3 from flask import Flask, request
5 from slackeventsapi import SlackEventAdapter
6 from slack import WebClient
7 from slack.errors import SlackApiError
14 slack_signing_secret = os.environ['SLACK_SIGNING_SECRET']
15 slack_bot_token = os.environ['SLACK_BOT_TOKEN']
17 slack_events = SlackEventAdapter(slack_signing_secret, "/slack/events", app)
18 slack_client = WebClient(slack_bot_token)
20 def rot_string(str, n=13):
24 result += chr(ord("A") + (ord(letter) - ord("A") + n) % 26)
29 @app.route('/rot', methods = ['POST'])
31 response_url = request.form.get('response_url')
32 channel_name = request.form.get('channel_name')
33 channel = request.form.get('channel_id')
34 query = request.form.get('text')
36 match = re.match('^([0-9]+|\*) (.*)$', query)
39 count = int(match.group(1))
49 reply = "```/rot {} {}\n".format(count if count else '*', text)
52 reply += rot_string(text, count)
54 reply += "\n".join(["{:02d} ".format(count) + rot_string(text, count) for count in range(1,26)])
58 if (channel_name == "directmessage"):
59 resp = requests.post(response_url,
60 json = {"text": reply},
61 headers = {"Content-type": "application/json"})
62 if (resp.status_code != 200):
63 app.logger.error("Error posting request to Slack: " + resp.text)
66 slack_client.chat_postMessage(channel=channel, text=reply)
67 except SlackApiError as e:
68 app.logger.error("Slack API error: " + e.response["error"])
71 @slack_events.on("error")
72 def handle_error(error):
73 app.logger.error("Error from Slack: " + str(error))
75 if __name__ == '__main__':