aboutsummaryrefslogtreecommitdiff
path: root/commands/handling.py
diff options
context:
space:
mode:
Diffstat (limited to 'commands/handling.py')
-rw-r--r--commands/handling.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/commands/handling.py b/commands/handling.py
new file mode 100644
index 0000000..46cdb66
--- /dev/null
+++ b/commands/handling.py
@@ -0,0 +1,62 @@
+import sys
+import traceback
+
+import importlib
+import os
+import pyrogram
+import re
+import types
+from pyrogram.api import types as tgtypes
+
+import lib
+
+PREFIX = "!"
+
+
+def load_module(module):
+ functions = [module.__dict__.get(a) for a in dir(module)
+ if isinstance(module.__dict__.get(a), types.FunctionType)]
+ for func in functions:
+ if lib.is_command(func):
+ lib.register_command(func)
+
+
+def load_commands(folder='modules'):
+ for dirname, dirnames, filenames in os.walk(folder):
+ for filename in filenames:
+ filename: str
+ if filename.endswith('.py'):
+ filename = filename[:-3]
+ pos = os.path.join(dirname, filename)
+ module = importlib.import_module(pos.replace('/', '.'))
+ load_module(module)
+
+
+def handle_commands(client: pyrogram.Client, update, users, chats):
+ if not (isinstance(update, tgtypes.UpdateNewMessage)
+ or isinstance(update, tgtypes.UpdateNewChannelMessage)
+ or isinstance(update, tgtypes.UpdateNewEncryptedMessage)):
+ return
+ update: tgtypes.UpdateNewMessage
+ message: tgtypes.Message = update.message
+ author_id = message.from_id
+ if author_id != client.user_id:
+ # do not react to other people
+ return
+ text: str = message.message
+ if text[:len(PREFIX)] != PREFIX:
+ return
+ parts = re.split(r'\s+', text)
+ if len(parts) < 1:
+ return
+ command = parts[0][1:]
+ args = parts[1:]
+ cmd_func = lib.commands[command.lower()]
+ ctx = lib.CommandContext(client=client, channel=message.to_id, args=args, message=message)
+ try:
+ cmd_func(ctx)
+ except KeyError:
+ ctx.respond('unknown command')
+ except Exception as e:
+ ctx.respond("unknown exception during execution. Error will be DM'd" + str(e))
+ print(traceback.format_exc(), file=sys.stderr)