#!/usr/bin/env python3
-from flask import Flask
-from flask_restful import reqparse, abort, Api, Resource
+from slackeventsapi import SlackEventAdapter
+from slack import WebClient
+import os
-app = Flask(__name__)
-api = Api(app)
+slack_signing_secret = os.environ['SLACK_SIGNING_SECRET']
+slack_bot_token = os.environ['SLACK_BOT_TOKEN']
-TODOS = {}
+slack_events = SlackEventAdapter(slack_signing_secret, "/slack/events")
+slack_client = WebClient(slack_bot_token)
-def abort_if_todo_doesnt_exist(todo_id):
- if todo_id not in TODOS:
- abort(404, message="Todo {} doesn't exist".format(todo_id))
+@slack_events.on("message")
+def handle_message(data):
+ message = data["event"]
+ if message.get("subtype") is None and "hi" in message.get("text"):
+ channel = message["channel"]
+ response = "Hello {}! :tada:".format(message["user"])
+ slack_client.chat_postMessage(channel=channel, text=response)
-parser = reqparse.RequestParser()
-parser.add_argument('task')
+@slack_events.on("error")
+def handle_error(err):
+ print("ERROR: " + str(err))
-class Todo(Resource):
- def get(self, todo_id):
- abort_if_todo_doesnt_exist(todo_id)
- return TODOS[todo_id]
-
- def delete(self, todo_id):
- abort_if_todo_doesnt_exist(todo_id)
- del TODOS[todo_id]
- return '', 204
-
- def put(self, todo_id):
- args = parser.parse_args()
- task = {'task': args['task']}
- TODOS[todo_id] = task
- return task, 201
-
-class TodoList(Resource):
- def get(self):
- return TODOS
-
- def post(self):
- args = parser.parse_args()
- try:
- todo_id = int(max(TODOS.keys()).lstrip('todo')) + 1
- except:
- todo_id = 1
- todo_id = 'todo%i' % todo_id
- TODOS[todo_id] = {'task': args['task']}
- return TODOS[todo_id], 201
-
-api.add_resource(TodoList, '/todos')
-api.add_resource(Todo, '/todos/<todo_id>')
-
-if __name__ == '__main__':
- app.run(debug=True)
+slack_events.start(port=3000)