Merge pull request #517 from Cvandia/master

 feat: 添加命令和命令组的别名支持
This commit is contained in:
Soulter
2025-02-16 14:51:47 +08:00
committed by GitHub
3 changed files with 14 additions and 10 deletions
+3 -2
View File
@@ -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 = None, 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 聊天时误判为指令
+3 -2
View File
@@ -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 = None):
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:]
+8 -6
View File
@@ -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):