fix: 修复指令组情况下可能造成多指令出触发的问题

This commit is contained in:
Soulter
2025-02-05 13:52:53 +08:00
parent 92c57e5476
commit da5aada002
3 changed files with 19 additions and 6 deletions
+3 -1
View File
@@ -7,6 +7,7 @@ from astrbot.core.message.components import At
from astrbot.core.star.star_handler import star_handlers_registry, EventType
from astrbot.core.star.filter.command_group import CommandGroupFilter
from astrbot.core.star.filter.permission import PermissionTypeFilter
from astrbot.core.star.filter.command import CommandFilter
@register_stage
@@ -80,6 +81,8 @@ class WakingCheckStage(Stage):
child_command_handler_md = None
permission_not_pass = False
has_command_pass = False
if len(handler.event_filters) == 0:
# 不可能有这种情况, 也不允许有这种情况
@@ -99,7 +102,6 @@ class WakingCheckStage(Stage):
break
elif isinstance(filter, PermissionTypeFilter):
if not filter.filter(event, self.ctx.astrbot_config):
print("permission not pass")
permission_not_pass = True
else:
if not filter.filter(event, self.ctx.astrbot_config):
+5 -1
View File
@@ -46,7 +46,11 @@ class CommandFilter(HandlerFilter, ParameterValidationMixin):
if not event.is_wake_up():
return False
message_str = event.get_message_str().strip()
if event.get_extra("parsing_command"):
message_str = event.get_extra("parsing_command").strip()
else:
message_str = event.get_message_str().strip()
# 分割为列表(每个参数之间可能会有多个空格)
ls = re.split(r"\s+", message_str)
if self.command_name != ls[0]:
+11 -4
View File
@@ -40,17 +40,24 @@ class CommandGroupFilter(HandlerFilter):
if not event.is_wake_up():
return False, None
message_str = event.get_message_str().strip()
if event.get_extra("parsing_command"):
message_str = event.get_extra("parsing_command").strip()
else:
message_str = event.get_message_str().strip()
ls = re.split(r"\s+", message_str)
if ls[0] != self.group_name:
return False, None
# 改写 message_str
ls = ls[1:]
event.message_str = " ".join(ls)
event.message_str = event.message_str.strip()
# event.message_str = " ".join(ls)
# event.message_str = event.message_str.strip()
parsing_command = " ".join(ls)
parsing_command = parsing_command.strip()
event.set_extra("parsing_command", parsing_command)
if event.message_str == "":
if parsing_command == "":
# 当前还是指令组
tree = self.group_name + "\n" + self.print_cmd_tree(self.sub_command_filters)
raise ValueError(f"指令组 {self.group_name} 未填写完全。这个指令组下有如下指令:\n"+tree)