223 lines
8.3 KiB
Python
223 lines
8.3 KiB
Python
|
import re
|
|||
|
from typing import Union
|
|||
|
|
|||
|
from apscheduler.triggers.combining import AndTrigger, OrTrigger
|
|||
|
from apscheduler.triggers.cron import CronTrigger
|
|||
|
from apscheduler.triggers.date import DateTrigger
|
|||
|
from apscheduler.triggers.interval import IntervalTrigger
|
|||
|
|
|||
|
from core.elements import Command, RegexCommand, Option, Schedule, StartUp
|
|||
|
from core.loader import ModulesManager
|
|||
|
from core.elements.module.meta import *
|
|||
|
|
|||
|
|
|||
|
class Bind:
|
|||
|
class Command:
|
|||
|
def __init__(self, bind_prefix):
|
|||
|
self.bind_prefix = bind_prefix
|
|||
|
|
|||
|
def handle(self,
|
|||
|
help_doc: str = None,
|
|||
|
required_admin: bool = False,
|
|||
|
required_superuser: bool = False):
|
|||
|
def decorator(function):
|
|||
|
ModulesManager.bind_to_module(self.bind_prefix, CommandMeta(function=function,
|
|||
|
help_doc=help_doc,
|
|||
|
required_admin=required_admin,
|
|||
|
required_superuser=required_superuser))
|
|||
|
|
|||
|
return decorator
|
|||
|
|
|||
|
class Regex:
|
|||
|
def __init__(self, bind_prefix):
|
|||
|
self.bind_prefix = bind_prefix
|
|||
|
|
|||
|
def handle(self, pattern: str, mode: str = "M", flags: re.RegexFlag = 0):
|
|||
|
def decorator(function):
|
|||
|
ModulesManager.bind_to_module(self.bind_prefix, RegexMeta(function=function,
|
|||
|
pattern=pattern,
|
|||
|
mode=mode,
|
|||
|
flags=flags))
|
|||
|
|
|||
|
return decorator
|
|||
|
|
|||
|
class Schedule:
|
|||
|
def __init__(self, bind_prefix):
|
|||
|
self.bind_prefix = bind_prefix
|
|||
|
|
|||
|
def handle(self):
|
|||
|
def decorator(function):
|
|||
|
ModulesManager.bind_to_module(self.bind_prefix, ScheduleMeta(function=function))
|
|||
|
|
|||
|
return decorator
|
|||
|
|
|||
|
|
|||
|
def on_command(
|
|||
|
bind_prefix: str,
|
|||
|
alias: Union[str, list, tuple, dict] = None,
|
|||
|
desc: str = None,
|
|||
|
recommend_modules: Union[str, list, tuple] = None,
|
|||
|
developers: Union[str, list, tuple] = None,
|
|||
|
required_admin: bool = False,
|
|||
|
base: bool = False,
|
|||
|
required_superuser: bool = False
|
|||
|
):
|
|||
|
"""
|
|||
|
|
|||
|
:param bind_prefix: 绑定的命令前缀。
|
|||
|
:param alias: 此命令的别名。
|
|||
|
同时被用作命令解析,当此项不为空时将会尝试解析其中的语法并储存结果在 MessageSession.parsed_msg 中。
|
|||
|
:param desc: 此命令的简介。
|
|||
|
:param recommend_modules: 推荐打开的其他模块。
|
|||
|
:param developers: 模块作者。
|
|||
|
:param required_admin: 此命令是否需要群聊管理员权限。
|
|||
|
:param base: 将此命令设为基础命令。设为基础命令后此命令将被强制开启。
|
|||
|
:param required_superuser: 将此命令设为机器人的超级管理员才可执行。
|
|||
|
:return: 此类型的模块。
|
|||
|
"""
|
|||
|
module = Command(alias=alias,
|
|||
|
bind_prefix=bind_prefix,
|
|||
|
desc=desc,
|
|||
|
recommend_modules=recommend_modules,
|
|||
|
developers=developers,
|
|||
|
base=base,
|
|||
|
required_admin=required_admin,
|
|||
|
required_superuser=required_superuser)
|
|||
|
ModulesManager.add_module(module)
|
|||
|
return Bind.Command(bind_prefix)
|
|||
|
|
|||
|
|
|||
|
def on_regex(
|
|||
|
bind_prefix: str,
|
|||
|
recommend_modules: Union[str, list, tuple] = None,
|
|||
|
alias: Union[str, list, tuple, dict] = None,
|
|||
|
desc: str = None,
|
|||
|
developers: Union[str, list, tuple] = None,
|
|||
|
required_admin: bool = False,
|
|||
|
base: bool = False,
|
|||
|
required_superuser: bool = False):
|
|||
|
"""
|
|||
|
|
|||
|
:param bind_prefix: 绑定的命令前缀。
|
|||
|
模式所获取到的内容将会储存在 MessageSession.matched_msg 中。
|
|||
|
:param alias: 此命令的别名。
|
|||
|
:param desc: 此命令的简介。
|
|||
|
:param recommend_modules: 推荐打开的其他模块。
|
|||
|
:param developers: 模块作者。
|
|||
|
:param required_admin: 此命令是否需要群聊管理员权限。
|
|||
|
:param base: 将此命令设为基础命令。设为基础命令后此命令将被强制开启。
|
|||
|
:param required_superuser: 将此命令设为机器人的超级管理员才可执行。
|
|||
|
:return: 此类型的模块。
|
|||
|
"""
|
|||
|
|
|||
|
module = RegexCommand(bind_prefix=bind_prefix,
|
|||
|
recommend_modules=recommend_modules,
|
|||
|
alias=alias,
|
|||
|
desc=desc,
|
|||
|
developers=developers,
|
|||
|
required_admin=required_admin,
|
|||
|
base=base,
|
|||
|
required_superuser=required_superuser,
|
|||
|
)
|
|||
|
ModulesManager.add_module(module)
|
|||
|
return Bind.Regex(bind_prefix)
|
|||
|
|
|||
|
|
|||
|
def on_option(
|
|||
|
bind_prefix: str,
|
|||
|
desc: str = None,
|
|||
|
alias: Union[str, list, tuple, dict] = None,
|
|||
|
recommend_modules: Union[str, list, tuple] = None,
|
|||
|
developers: Union[str, list, tuple] = None,
|
|||
|
required_superuser: bool = False,
|
|||
|
required_admin: bool = False
|
|||
|
):
|
|||
|
"""
|
|||
|
|
|||
|
:param bind_prefix: 绑定的命令前缀。
|
|||
|
:param alias: 此命令的别名。
|
|||
|
:param desc: 此命令的简介。
|
|||
|
:param recommend_modules: 推荐打开的其他模块。
|
|||
|
:param developers: 模块作者。
|
|||
|
:param required_admin: 此命令是否需要群聊管理员权限。
|
|||
|
:param required_superuser: 将此命令设为机器人的超级管理员才可执行。
|
|||
|
:return: 此类型的模块。
|
|||
|
"""
|
|||
|
|
|||
|
module = Option(bind_prefix=bind_prefix,
|
|||
|
desc=desc,
|
|||
|
alias=alias,
|
|||
|
recommend_modules=recommend_modules,
|
|||
|
developers=developers,
|
|||
|
required_superuser=required_superuser,
|
|||
|
required_admin=required_admin)
|
|||
|
ModulesManager.add_module(module)
|
|||
|
|
|||
|
|
|||
|
def on_schedule(
|
|||
|
bind_prefix: str,
|
|||
|
trigger: Union[AndTrigger, OrTrigger, DateTrigger, CronTrigger, IntervalTrigger],
|
|||
|
desc: str = None,
|
|||
|
alias: Union[str, list, tuple, dict] = None,
|
|||
|
recommend_modules: Union[str, list, tuple] = None,
|
|||
|
developers: Union[str, list, tuple] = None,
|
|||
|
required_superuser: bool = False,
|
|||
|
):
|
|||
|
"""
|
|||
|
:param bind_prefix: 绑定的命令前缀。
|
|||
|
:param trigger: 此命令的触发器。
|
|||
|
:param alias: 此命令的别名。
|
|||
|
:param desc: 此命令的简介。
|
|||
|
:param recommend_modules: 推荐打开的其他模块。
|
|||
|
:param developers: 模块作者。
|
|||
|
:param required_superuser: 将此命令设为机器人的超级管理员才可执行。
|
|||
|
:return: 此类型的模块。
|
|||
|
"""
|
|||
|
|
|||
|
def decorator(function):
|
|||
|
module = Schedule(function=function,
|
|||
|
trigger=trigger,
|
|||
|
bind_prefix=bind_prefix,
|
|||
|
desc=desc,
|
|||
|
alias=alias,
|
|||
|
recommend_modules=recommend_modules,
|
|||
|
developers=developers,
|
|||
|
required_superuser=required_superuser)
|
|||
|
ModulesManager.add_module(module)
|
|||
|
return module
|
|||
|
|
|||
|
return decorator
|
|||
|
|
|||
|
|
|||
|
def on_startup(
|
|||
|
bind_prefix: str,
|
|||
|
desc: str = None,
|
|||
|
alias: Union[str, list, tuple, dict] = None,
|
|||
|
recommend_modules: Union[str, list, tuple] = None,
|
|||
|
developers: Union[str, list, tuple] = None,
|
|||
|
required_superuser: bool = False,
|
|||
|
):
|
|||
|
"""
|
|||
|
|
|||
|
:param bind_prefix: 绑定的命令前缀。
|
|||
|
:param alias: 此命令的别名。
|
|||
|
:param desc: 此命令的简介。
|
|||
|
:param recommend_modules: 推荐打开的其他模块。
|
|||
|
:param developers: 模块作者。
|
|||
|
:param required_superuser: 将此命令设为机器人的超级管理员才可执行。
|
|||
|
:return: 此类型的模块。
|
|||
|
"""
|
|||
|
|
|||
|
def decorator(function):
|
|||
|
module = StartUp(function=function,
|
|||
|
bind_prefix=bind_prefix,
|
|||
|
desc=desc,
|
|||
|
alias=alias,
|
|||
|
recommend_modules=recommend_modules,
|
|||
|
developers=developers,
|
|||
|
required_superuser=required_superuser)
|
|||
|
ModulesManager.add_module(module)
|
|||
|
return module
|
|||
|
|
|||
|
return decorator
|