Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/core/component.py

242 lines
9.8 KiB
Python
Raw Normal View History

2021-10-24 10:55:45 +00:00
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
2022-07-01 14:12:26 +00:00
from core.elements import Command, RegexCommand, Schedule, StartUp
2022-01-27 13:16:53 +00:00
from core.elements.module.component_meta import *
2021-11-12 14:25:53 +00:00
from core.loader import ModulesManager
2022-08-06 13:39:24 +00:00
from core.parser.args import parse_template
2021-10-24 10:55:45 +00:00
class Bind:
class Command:
def __init__(self, bind_prefix):
self.bind_prefix = bind_prefix
def handle(self,
2021-12-25 14:01:33 +00:00
help_doc: Union[str, list, tuple] = None,
2022-01-27 13:16:53 +00:00
*help_docs,
options_desc: dict = None,
2021-10-24 10:55:45 +00:00
required_admin: bool = False,
2021-11-19 16:33:53 +00:00
required_superuser: bool = False,
2022-01-26 13:45:17 +00:00
available_for: Union[str, list, tuple] = '*',
2022-08-06 13:39:24 +00:00
exclude_from: Union[str, list, tuple] = '',
priority: int = 1):
2021-10-24 10:55:45 +00:00
def decorator(function):
2021-12-25 14:01:33 +00:00
nonlocal help_doc
if isinstance(help_doc, str):
help_doc = [help_doc]
2022-01-27 13:16:53 +00:00
if help_docs:
help_doc += help_docs
2022-08-06 13:39:24 +00:00
if help_doc is None:
help_doc = []
2021-10-24 10:55:45 +00:00
ModulesManager.bind_to_module(self.bind_prefix, CommandMeta(function=function,
2022-08-06 13:39:24 +00:00
help_doc=parse_template(help_doc),
2022-01-27 13:16:53 +00:00
options_desc=options_desc,
2021-10-24 10:55:45 +00:00
required_admin=required_admin,
2021-11-19 16:33:53 +00:00
required_superuser=required_superuser,
2022-01-26 13:45:17 +00:00
available_for=available_for,
2022-08-06 13:39:24 +00:00
exclude_from=exclude_from,
priority=priority))
2022-05-25 16:15:08 +00:00
return function
2022-07-31 08:33:20 +00:00
2021-10-24 10:55:45 +00:00
return decorator
class Regex:
def __init__(self, bind_prefix):
self.bind_prefix = bind_prefix
def handle(self, pattern: Union[str, re.Pattern], mode: str = "M", flags: re.RegexFlag = 0,
show_typing: bool = True, logging: bool = True):
2021-10-24 10:55:45 +00:00
def decorator(function):
ModulesManager.bind_to_module(self.bind_prefix, RegexMeta(function=function,
pattern=pattern,
mode=mode,
flags=flags,
show_typing=show_typing,
logging=logging))
2022-05-25 16:15:08 +00:00
return function
2022-07-31 08:33:20 +00:00
2021-10-24 10:55:45 +00:00
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))
2022-05-25 16:15:08 +00:00
return function
2022-07-31 08:33:20 +00:00
2021-10-24 10:55:45 +00:00
return decorator
def on_command(
2022-01-20 12:13:03 +00:00
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,
2022-01-26 13:45:17 +00:00
required_superuser: bool = False,
available_for: Union[str, list, tuple] = '*',
exclude_from: Union[str, list, tuple] = ''
2021-10-24 10:55:45 +00:00
):
"""
:param bind_prefix: 绑定的命令前缀
:param alias: 此命令的别名
同时被用作命令解析当此项不为空时将会尝试解析其中的语法并储存结果在 MessageSession.parsed_msg
:param desc: 此命令的简介
:param recommend_modules: 推荐打开的其他模块
:param developers: 模块作者
:param required_admin: 此命令是否需要群聊管理员权限
:param base: 将此命令设为基础命令设为基础命令后此命令将被强制开启
:param required_superuser: 将此命令设为机器人的超级管理员才可执行
2022-01-26 13:45:17 +00:00
:param available_for: 此命令支持的平台列表
:param exclude_from: 此命令排除的平台列表
2021-10-24 10:55:45 +00:00
:return: 此类型的模块
"""
module = Command(alias=alias,
bind_prefix=bind_prefix,
desc=desc,
recommend_modules=recommend_modules,
developers=developers,
base=base,
required_admin=required_admin,
2022-01-26 13:45:17 +00:00
required_superuser=required_superuser,
available_for=available_for,
exclude_from=exclude_from)
2021-10-24 10:55:45 +00:00
ModulesManager.add_module(module)
return Bind.Command(bind_prefix)
def on_regex(
2022-01-20 12:13:03 +00:00
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,
2022-01-26 13:45:17 +00:00
required_superuser: bool = False,
available_for: Union[str, list, tuple] = '*',
exclude_from: Union[str, list, tuple] = ''
):
2021-10-24 10:55:45 +00:00
"""
:param bind_prefix: 绑定的命令前缀
模式所获取到的内容将会储存在 MessageSession.matched_msg
:param alias: 此命令的别名
:param desc: 此命令的简介
:param recommend_modules: 推荐打开的其他模块
:param developers: 模块作者
:param required_admin: 此命令是否需要群聊管理员权限
:param base: 将此命令设为基础命令设为基础命令后此命令将被强制开启
:param required_superuser: 将此命令设为机器人的超级管理员才可执行
2022-01-26 13:45:17 +00:00
:param available_for: 此命令支持的平台列表
:param exclude_from: 此命令排除的平台列表
2021-10-24 10:55:45 +00:00
: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,
2022-01-26 13:45:17 +00:00
available_for=available_for,
exclude_from=exclude_from
2021-10-24 10:55:45 +00:00
)
ModulesManager.add_module(module)
return Bind.Regex(bind_prefix)
2022-07-31 08:33:20 +00:00
2021-10-24 10:55:45 +00:00
def on_schedule(
2022-01-20 12:13:03 +00:00
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,
2022-01-26 13:45:17 +00:00
available_for: Union[str, list, tuple] = '*',
exclude_from: Union[str, list, tuple] = ''
2021-10-24 10:55:45 +00:00
):
"""
:param bind_prefix: 绑定的命令前缀
:param trigger: 此命令的触发器
:param alias: 此命令的别名
:param desc: 此命令的简介
:param recommend_modules: 推荐打开的其他模块
:param developers: 模块作者
:param required_superuser: 将此命令设为机器人的超级管理员才可执行
2022-01-26 13:45:17 +00:00
:param available_for: 此命令支持的平台列表
:param exclude_from: 此命令排除的平台列表
2021-10-24 10:55:45 +00:00
:return: 此类型的模块
"""
def decorator(function):
module = Schedule(function=function,
trigger=trigger,
bind_prefix=bind_prefix,
desc=desc,
alias=alias,
recommend_modules=recommend_modules,
developers=developers,
2022-01-26 13:45:17 +00:00
required_superuser=required_superuser,
available_for=available_for,
exclude_from=exclude_from)
2021-10-24 10:55:45 +00:00
ModulesManager.add_module(module)
return module
return decorator
def on_startup(
2022-01-20 12:13:03 +00:00
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,
2022-01-26 13:45:17 +00:00
available_for: Union[str, list, tuple] = '*',
exclude_from: Union[str, list, tuple] = ''
2021-10-24 10:55:45 +00:00
):
"""
:param bind_prefix: 绑定的命令前缀
:param alias: 此命令的别名
:param desc: 此命令的简介
:param recommend_modules: 推荐打开的其他模块
:param developers: 模块作者
:param required_superuser: 将此命令设为机器人的超级管理员才可执行
2022-01-26 13:45:17 +00:00
:param available_for: 此命令支持的平台列表
:param exclude_from: 此命令排除的平台列表
2021-10-24 10:55:45 +00:00
:return: 此类型的模块
"""
def decorator(function):
module = StartUp(function=function,
bind_prefix=bind_prefix,
desc=desc,
alias=alias,
recommend_modules=recommend_modules,
developers=developers,
2022-01-26 13:45:17 +00:00
required_superuser=required_superuser,
available_for=available_for,
exclude_from=exclude_from
)
2021-10-24 10:55:45 +00:00
ModulesManager.add_module(module)
return module
return decorator