1
+ from flask import Flask , Response
2
+ from slackeventsapi import SlackEventAdapter
3
+ import os
4
+ from threading import Thread
5
+ from slack import WebClient
6
+
7
+
8
+ # This `app` represents your existing Flask app
9
+ app = Flask (__name__ )
10
+
11
+ greetings = ["hi" , "hello" , "hello there" , "hey" ]
12
+
13
+ SLACK_SIGNING_SECRET = os .environ ['SLACK_SIGNING_SECRET' ]
14
+ slack_token = os .environ ['SLACK_BOT_TOKEN' ]
15
+ VERIFICATION_TOKEN = os .environ ['VERIFICATION_TOKEN' ]
16
+
17
+ #instantiating slack client
18
+ slack_client = WebClient (slack_token )
19
+
20
+ # An example of one of your Flask app's routes
21
+ @app .route ("/" )
22
+ def event_hook (request ):
23
+ json_dict = json .loads (request .body .decode ("utf-8" ))
24
+ if json_dict ["token" ] != VERIFICATION_TOKEN :
25
+ return {"status" : 403 }
26
+
27
+ if "type" in json_dict :
28
+ if json_dict ["type" ] == "url_verification" :
29
+ response_dict = {"challenge" : json_dict ["challenge" ]}
30
+ return response_dict
31
+ return {"status" : 500 }
32
+ return
33
+
34
+
35
+ slack_events_adapter = SlackEventAdapter (
36
+ SLACK_SIGNING_SECRET , "/slack/events" , app
37
+ )
38
+
39
+
40
+ @slack_events_adapter .on ("app_mention" )
41
+ def handle_message (event_data ):
42
+ def send_reply (value ):
43
+ event_data = value
44
+ message = event_data ["event" ]
45
+ if message .get ("subtype" ) is None :
46
+ command = message .get ("text" )
47
+ channel_id = message ["channel" ]
48
+ if any (item in command .lower () for item in greetings ):
49
+ message = (
50
+ "Hello <@%s>! :tada:"
51
+ % message ["user" ] # noqa
52
+ )
53
+ slack_client .chat_postMessage (channel = channel_id , text = message )
54
+ thread = Thread (target = send_reply , kwargs = {"value" : event_data })
55
+ thread .start ()
56
+ return Response (status = 200 )
57
+
58
+
59
+ # Start the server on port 3000
60
+ if __name__ == "__main__" :
61
+ app .run (port = 3000 )
0 commit comments