Explorar o código

Moving admin logic so that command_system doesn't require config

Kirk Trombley %!s(int64=6) %!d(string=hai) anos
pai
achega
6f4da5e813
Modificáronse 2 ficheiros con 18 adicións e 12 borrados
  1. 2 2
      src/app.py
  2. 16 10
      src/command_system.py

+ 2 - 2
src/app.py

@@ -5,7 +5,7 @@ from threading import Thread
 from flask import Flask, request, render_template, jsonify
 
 import db
-from config import BOTS_LOOKUP, get_config
+from config import BOTS_LOOKUP, GLOBAL_ADMINS, GROUP_ADMINS, get_config
 from command_system import RollbotMessage, RollbotResponse, RollbotFailure
 from rollbot import Rollbot
 from util import post_message
@@ -56,7 +56,7 @@ def teamspeak():
 @app.route("/rollbot", methods=["POST"])
 def execute():
     json = request.get_json()
-    msg = RollbotMessage.from_groupme(json)
+    msg = RollbotMessage.from_groupme(json, global_admins=GLOBAL_ADMINS, group_admins=GROUP_ADMINS)
     rollbot.handle_command_threaded(msg)
     return "", 204
 

+ 16 - 10
src/command_system.py

@@ -4,8 +4,6 @@ from enum import Enum, auto
 
 from sqlalchemy.ext.declarative import declarative_base
 
-from config import GLOBAL_ADMINS, GROUP_ADMINS
-
 
 BANGS = ('!',)
 
@@ -29,6 +27,7 @@ class RollbotMessage:
     group_id: str
     message_id: str
     message_txt: str
+    from_admin: bool
 
     def __post_init__(self):
         self.is_command = False
@@ -39,14 +38,21 @@ class RollbotMessage:
                 self.command = cmd.lower()
                 self.raw_args = raw
 
-        self.from_admin = self.sender_id is not None and \
-            self.sender_id in GLOBAL_ADMINS or (
-                self.group_id in GROUP_ADMINS and
-                self.sender_id in GROUP_ADMINS[self.group_id])
-
     @staticmethod
-    def from_groupme(msg):
-        return RollbotMessage("GROUPME", msg["name"], msg["sender_id"], msg["group_id"], msg["id"], msg["text"].strip())
+    def from_groupme(msg, global_admins=(), group_admins={}):
+        sender_id = msg["sender_id"]
+        group_id = msg["group_id"]
+        return RollbotMessage(
+            "GROUPME",
+            msg["name"],
+            sender_id,
+            group_id,
+            msg["id"],
+            msg["text"].strip(),
+            sender_id in global_admins or (
+                group_id in group_admins and
+                sender_id in group_admins[group_id])
+        )
 
     @staticmethod
     def from_web(content):
@@ -54,7 +60,7 @@ class RollbotMessage:
         if len(content) > 0 and content[0] not in BANGS:
             content = BANGS[0] + content
         # TODO should still assign an id...
-        return RollbotMessage("WEB_FRONTEND", "user", None, None, None, content)
+        return RollbotMessage("WEB_FRONTEND", "user", None, None, None, content, False)
 
     def args(self, normalize=True):
         arg, rest = pop_arg(self.raw_args)