Browse Source

Implemented automatic lifting of responses

Kirk Trombley 6 years ago
parent
commit
4293a2750f
2 changed files with 17 additions and 9 deletions
  1. 11 3
      src/command_system.py
  2. 6 6
      src/plugins/simple.py

+ 11 - 3
src/command_system.py

@@ -2,6 +2,7 @@ import logging
 from dataclasses import dataclass
 from enum import Enum, auto
 import inspect
+import functools
 
 from sqlalchemy.ext.declarative import declarative_base
 
@@ -162,23 +163,30 @@ def as_plugin(command):
         sig = inspect.signature(fn)
         converters = []
         for p in sig.parameters:
-            if p in ("msg", "message"):
+            if p in ("msg", "message", "_msg"):
                 converters.append(lambda self, db, msg: msg)
             elif p in ("db", "database"):
                 converters.append(lambda self, db, msg: db)
             elif p in ("log", "logger"):
                 converters.append(lambda self, db, msg: self.logger)
-            elif p == "bot":
+            elif p in ("bot", "rollbot"):
                 converters.append(lambda self, db, msg: self.bot)
             else:
                 raise ValueError(f"Illegal argument name {p} in decorated plugin {command_name}")
 
+        def on_command_standin(self, db, msg):
+            res = fn(*[c(self, db, msg) for c in converters])
+            if isinstance(res, RollbotResponse):
+                return res
+            else:
+                return RollbotResponse(msg, txt=str(res))
+
         return type(
             f"AutoGenerated`{command_name}`Command",
             (RollbotPlugin,),
             dict(
                 __init__=init_standin,
-                on_command=(lambda self, db, msg: fn(*[c(self, db, msg) for c in converters]))
+                on_command=on_command_standin,
             )
         )
 

+ 6 - 6
src/plugins/simple.py

@@ -1,26 +1,26 @@
 import random
 
-from command_system import as_plugin, RollbotResponse
+from command_system import as_plugin
 
 
 @as_plugin
 def isadmin(message):
-    return RollbotResponse(message, txt=str(message.from_admin))
+    return message.from_admin
 
 
 @as_plugin
 def debug(message):
-    return RollbotResponse(message, txt=str(message))
+    return message
 
 
 @as_plugin
 def echo(message):
-    return RollbotResponse(message, txt="'%s' - %s" % (message.raw_args, message.name))
+    return "'%s' - %s" % (message.raw_args or "", message.name)
 
 
 @as_plugin
 def greet(message):
-    return RollbotResponse(message, txt=random.choice(("Hi!", "Hello!", "안녕하세요", "こんにちは", "你好", "👋")))
+    return random.choice(("Hi!", "Hello!", "안녕하세요", "こんにちは", "你好", "👋"))
 
 
 @as_plugin
@@ -33,4 +33,4 @@ def console(message):
     ]
     if argstr is not None:
         opts.append("It'll be okay, {}! Keep trying!".format(argstr))
-    return RollbotResponse(message, txt=random.choice(opts))
+    return random.choice(opts)