From bd3bdb57692dc8be94c3c9b246e4ee69d0675bb6 Mon Sep 17 00:00:00 2001 From: Cvandia <106718176+Cvandia@users.noreply.github.com> Date: Sun, 16 Feb 2025 14:44:17 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=B7=BB=E5=8A=A0=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E5=92=8C=E5=91=BD=E4=BB=A4=E7=BB=84=E7=9A=84=E5=88=AB?= =?UTF-8?q?=E5=90=8D=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/star/filter/command.py | 5 +++-- astrbot/core/star/filter/command_group.py | 5 +++-- astrbot/core/star/register/star_handler.py | 14 ++++++++------ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/astrbot/core/star/filter/command.py b/astrbot/core/star/filter/command.py index e0b6d47e2..10dc540c0 100644 --- a/astrbot/core/star/filter/command.py +++ b/astrbot/core/star/filter/command.py @@ -12,8 +12,9 @@ from ..star_handler import StarHandlerMetadata # 标准指令受到 wake_prefix 的制约。 class CommandFilter(HandlerFilter, ParameterValidationMixin): '''标准指令过滤器''' - def __init__(self, command_name: str, handler_md: StarHandlerMetadata = None): + def __init__(self, command_name: str, alias: set, handler_md: StarHandlerMetadata = None): self.command_name = command_name + self.alias = alias if alias else set() if handler_md: self.init_handler_md(handler_md) self.custom_filter_list: List[CustomFilter] = [] @@ -68,7 +69,7 @@ class CommandFilter(HandlerFilter, ParameterValidationMixin): # 分割为列表(每个参数之间可能会有多个空格) ls = re.split(r"\s+", message_str) - if self.command_name != ls[0]: + if self.command_name != ls[0] and ls[0] not in self.alias: return False # if len(self.handler_params) == 0 and len(ls) > 1: # # 一定程度避免 LLM 聊天时误判为指令 diff --git a/astrbot/core/star/filter/command_group.py b/astrbot/core/star/filter/command_group.py index 750d01803..36135b3d0 100644 --- a/astrbot/core/star/filter/command_group.py +++ b/astrbot/core/star/filter/command_group.py @@ -11,8 +11,9 @@ from ..star_handler import StarHandlerMetadata # 指令组受到 wake_prefix 的制约。 class CommandGroupFilter(HandlerFilter): - def __init__(self, group_name: str): + def __init__(self, group_name: str, alias: set): self.group_name = group_name + self.alias = alias if alias else set() self.sub_command_filters: List[Union[CommandFilter, CommandGroupFilter]] = [] self.custom_filter_list: List[CustomFilter] = [] @@ -71,7 +72,7 @@ class CommandGroupFilter(HandlerFilter): ls = re.split(r"\s+", message_str) - if ls[0] != self.group_name: + if ls[0] != self.group_name and ls[0] not in self.alias: return False, None # 改写 message_str ls = ls[1:] diff --git a/astrbot/core/star/register/star_handler.py b/astrbot/core/star/register/star_handler.py index 14e221e6a..e9fecab3a 100644 --- a/astrbot/core/star/register/star_handler.py +++ b/astrbot/core/star/register/star_handler.py @@ -51,7 +51,7 @@ def get_handler_or_create( star_handlers_registry.append(md) return md -def register_command(command_name: str = None, *args, **kwargs): +def register_command(command_name: str = None, sub_command: str = None, alias: set = None, **kwargs): '''注册一个 Command. ''' @@ -61,11 +61,11 @@ def register_command(command_name: str = None, *args, **kwargs): add_to_event_filters = False if isinstance(command_name, RegisteringCommandable): # 子指令 - new_command = CommandFilter(args[0], None) + new_command = CommandFilter(sub_command, alias, None) command_name.parent_group.add_sub_command_filter(new_command) else: # 裸指令 - new_command = CommandFilter(command_name, None) + new_command = CommandFilter(command_name, alias, None) add_to_event_filters = True def decorator(awaitable): @@ -136,7 +136,9 @@ def register_custom_filter(custom_type_filter, *args, **kwargs): return awaitable return decorator -def register_command_group(command_group_name: str = None, *args, **kwargs): +def register_command_group( + command_group_name: str = None, sub_command: str = None, alias: set = None, **kwargs +): '''注册一个 CommandGroup ''' @@ -146,11 +148,11 @@ def register_command_group(command_group_name: str = None, *args, **kwargs): add_to_event_filters = False if isinstance(command_group_name, RegisteringCommandable): # 子指令组 - new_group = CommandGroupFilter(args[0]) + new_group = CommandGroupFilter(sub_command, alias) command_group_name.parent_group.add_sub_command_filter(new_group) else: # 根指令组 - new_group = CommandGroupFilter(command_group_name) + new_group = CommandGroupFilter(command_group_name, alias) add_to_event_filters = True def decorator(obj):