diff --git a/utils/parser.py b/utils/parser.py index 3626f20..61e8b37 100644 --- a/utils/parser.py +++ b/utils/parser.py @@ -94,11 +94,20 @@ class CommandParser: if at_match: content = at_match.group(1).strip() - # 检查是否以指令开头 - for cmd_prefix, game_type in cls.COMMAND_MAP.items(): - if content == cmd_prefix: - # 返回游戏类型和完整指令 - return game_type, content + # 拦截全角空格与全角标点(不允许) + # 范围包含:全角空格\u3000、全角标点\uFF01-\uFF60、兼容区\uFFE0-\uFFEE + if re.search(r"[\u3000\uFF01-\uFF60\uFFE0-\uFFEE]", content): + logger.debug(f"包含全角字符,忽略: {content}") + return None + + # 大小写不敏感匹配(仅用于匹配,不改变返回的原始内容) + content_lower = content.lower() + + # 使用最长前缀优先,避免 .r 误匹配 .roll 等更长前缀 + command_keys_sorted = sorted(cls.COMMAND_MAP.keys(), key=len, reverse=True) + for cmd_prefix in command_keys_sorted: + if content_lower.startswith(cmd_prefix.lower()): + return cls.COMMAND_MAP[cmd_prefix], content # 没有匹配的指令 logger.debug(f"未识别的指令: {content}")