aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/__init__.py64
-rw-r--r--lib/commands.py48
-rw-r--r--lib/common.py16
-rw-r--r--lib/match_script.py42
4 files changed, 110 insertions, 60 deletions
diff --git a/lib/__init__.py b/lib/__init__.py
index edb1b42..0cec7cf 100644
--- a/lib/__init__.py
+++ b/lib/__init__.py
@@ -1,61 +1,5 @@
-from typing import List
+from .commands import CommandContext, get_all_commands, get_command_name, get_command_description, description, name, \
+ is_command, register_command, get_command_by_name
-import pyrogram
-from pyrogram.api import types as tgtypes
-
-
-def property_decorator(key):
- def decorator(value):
- def wrapper(func):
- setattr(func, key, value)
- return func
-
- return wrapper
-
- return decorator
-
-
-name = property_decorator('name')
-description = property_decorator('description')
-
-
-def is_command(func):
- return hasattr(func, 'name') and func.name is not None
-
-
-def get_command_name(func):
- return func.name
-
-
-def get_command_description(func):
- return func.description
-
-
-commands = {}
-
-
-def get_all_commands():
- return commands.values()
-
-
-class CommandContext(object):
- def __init__(self, client: pyrogram.Client, channel, args: List[str], message: tgtypes.Message):
- import re
- self.args = args
- self.client = client
- self.channel = channel
- self.message = message
- self.rest_content = re.sub('^.*? ', '', message.message)
- self.author = message.from_id
-
- def respond(self, text):
- self.client.send_message(self.channel, text=text)
-
- def edit(self, text):
- self.client.edit_message_text(chat_id=self.channel, message_id=self.message.id, text=text)
-
-
-def register_command(func):
- if not is_command(func):
- return
- commands[get_command_name(func)] = func
+from .match_script import get_match_script_matcher, is_match_script, match_text, register_match_script, \
+ get_match_scripts, MatchContext
diff --git a/lib/commands.py b/lib/commands.py
new file mode 100644
index 0000000..638ab9b
--- /dev/null
+++ b/lib/commands.py
@@ -0,0 +1,48 @@
+import typing
+
+import pyrogram
+from pyrogram.api import types as tgtypes
+
+from lib.common import CommonContext
+from util import property_decorator
+
+commands = {}
+
+
+def get_all_commands():
+ return commands.values()
+
+
+class CommandContext(CommonContext):
+ def __init__(self, client: pyrogram.Client, channel, args: typing.List[str], message: tgtypes.Message):
+ super().__init__(client, channel, message)
+ import re
+ self.args = args
+ self.rest_content = re.sub('^.*? ', '', message.message)
+
+
+
+def register_command(func):
+ if not is_command(func):
+ return
+ commands[get_command_name(func)] = func
+
+
+def is_command(func):
+ return hasattr(func, 'name') and func.name is not None
+
+
+def get_command_name(func):
+ return func.name
+
+
+def get_command_description(func):
+ return func.description
+
+
+def get_command_by_name(command_name: str):
+ return commands[command_name.lower()]
+
+
+name = property_decorator('name')
+description = property_decorator('description')
diff --git a/lib/common.py b/lib/common.py
new file mode 100644
index 0000000..ade2891
--- /dev/null
+++ b/lib/common.py
@@ -0,0 +1,16 @@
+import pyrogram
+from pyrogram.api import types as tgtypes
+
+
+class CommonContext:
+ def __init__(self, client: pyrogram.Client, channel, message: tgtypes.Message):
+ self.client = client
+ self.channel = channel
+ self.message = message
+ self.author = message.from_id
+
+ def respond(self, text):
+ self.client.send_message(self.channel, text=text)
+
+ def edit(self, text):
+ self.client.edit_message_text(chat_id=self.channel, message_id=self.message.id, text=text)
diff --git a/lib/match_script.py b/lib/match_script.py
new file mode 100644
index 0000000..124c23b
--- /dev/null
+++ b/lib/match_script.py
@@ -0,0 +1,42 @@
+import pyrogram
+from pyrogram.api import types as tgtypes
+
+from lib.common import CommonContext
+
+
+def match_text(regex):
+ import re
+ regex = re.compile(regex)
+
+ def wrapper(func):
+ func.regex = regex
+ return func
+
+ return wrapper
+
+
+match_scripts = {}
+
+
+def is_match_script(func):
+ return hasattr(func, 'regex') and func.regex is not None
+
+
+def get_match_script_matcher(func):
+ return func.regex
+
+
+def register_match_script(func):
+ match_scripts[func.regex] = func
+
+
+class MatchContext(CommonContext):
+ def __init__(self, client: pyrogram.Client, channel, message: tgtypes.Message, match, groups, named_groups):
+ super().__init__(client, channel, message)
+ self.match = match
+ self.groups = groups
+ self.named_groups = named_groups
+
+
+def get_match_scripts():
+ return match_scripts