Browse Source

Adding utils, moving bot IDs to secrets, prepping to purge config.toml from history

Kirk Trombley 6 years ago
parent
commit
d5b9c090c0
4 changed files with 66 additions and 33 deletions
  1. 28 22
      src/app.py
  2. 1 1
      src/config.py
  3. 2 10
      src/rollbot.py
  4. 35 0
      src/util.py

+ 28 - 22
src/app.py

@@ -6,6 +6,7 @@ from flask import Flask, request, render_template
 from config import BOTS_LOOKUP
 from command_system import RollbotMessage
 from rollbot import Rollbot
+from util import post_message
 
 dictConfig({
     "version": 1,
@@ -32,26 +33,31 @@ atexit.register(rollbot.shutdown_plugins)
 
 
 
-msg = RollbotMessage.from_web("!echo This is a test!")
-print(rollbot.run_command(msg).info)
-
-
-
-"""
-        if response.txt is not None:
-            post_message(response.txt, bot_id=bot_id)
-        if response.img is not None:
-            post_message(response.img, bot_id=bot_id)
-        else:
-
-        if message.group_id in BOTS_LOOKUP:
-            bot_id = BOTS_LOOKUP[msg.group_id]
-
-        if not response.respond:
-            self.logger.info(f"Skipping response to message {message.message_id}")
-            return
-
-        self.logger.info(f"Responding to message {message.message_id}")
-"""
-
 
+@app.route("/rollbot", methods=["POST"])
+def execute():
+    json = request.get_json()
+    msg = RollbotMessage.from_groupme(json)
+    if msg.group_id in BOTS_LOOKUP:
+        bot_id = BOTS_LOOKUP[msg.group_id]
+        if msg.is_command:
+            response = rollbot.run_command(msg)
+            if result.respond:
+                app.logger.info(f"Responding to message {message.message_id}")
+                if result.is_success():
+                    if result.txt is not None:
+                        post_message(result.txt, bot_id=bot_id)
+                    if result.img is not None:
+                        post_message(result.img, bot_id=bot_id)
+                else:
+                    post_message(result.failure_msg, bot_id=bot_id)
+            else:
+                app.logger.info(f"Skipping response to message {message.message_id}")
+    else:
+        app.logger.warn(f"Received message from unknown group ID {msg.group_id}")
+    return "200 OK"
+
+
+if __name__ == "__main__":
+    # default deployment in debug mode
+    app.run(host="localhost", port=6071, debug=True)

+ 1 - 1
src/config.py

@@ -25,7 +25,7 @@ def get_secret(key):
         c = c[k]
     return c
 
-BOTS_LOOKUP = get_config("bots")
+BOTS_LOOKUP = get_secret("bots")
 GLOBAL_ADMINS = get_config("auths.global")
 GROUP_ADMINS = get_config("auths.group")
 PLUGINS = get_config("plugins")

+ 2 - 10
src/rollbot.py

@@ -40,21 +40,13 @@ class Rollbot:
 
         plugin = self.commands.get(message.command, None)
         if plugin is None:
-            return RollbotResponse(message, failure_reason=RollbotFailure.INVALID_COMMAND)
+            response = RollbotResponse(message, failure_reason=RollbotFailure.INVALID_COMMAND)
         else:
             with db.session_scope() as session:
-                return plugin.on_command(session, message)
-
-    def handle_message(self, message):
-        if not message.is_command:
-            return
-
-        response = self._run_command(message)
+                response = plugin.on_command(session, message)
 
         if not response.is_success:
             self.logger.warn(f"Message {message.message_id} caused failure")
             self.logger.warn(response.info)
-            post_message(response.failure_msg, bot_id=bot_id)
-            return
 
         return response

+ 35 - 0
src/util.py

@@ -0,0 +1,35 @@
+import requests
+from requests.exceptions import ConnectionError
+
+
+def post_message(msg, bot_id):
+    requests.post(
+        "https://api.groupme.com/v3/bots/post",
+        json={
+            "bot_id": bot_id,
+            "text": msg
+        },
+        timeout=10
+    )
+
+
+def upload_image(key, content):
+    try:
+        return True, requests.post(
+            "https://image.groupme.com/pictures",
+            headers={
+                "Content-Type": "image/png",
+                "X-Access-Token": key,
+            },
+            data=content
+        ).json()["payload"]["url"]
+    except ConnectionError as ce:
+        return False, {
+            "explain": "Could not reach GroupMe image service.",
+            "exception": ce
+        }
+    except (KeyError, JSONDecodeError) as e:
+        return False, {
+            "explain": "Could not parse response from GroupMe image service.",
+            "exception": e
+        }