From c6ba7e2e37e3ae95ae520f7c1fd47dfba3dc77bd Mon Sep 17 00:00:00 2001 From: zhilv Date: Sat, 2 May 2026 21:01:33 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(command):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=97=A0=E5=8F=82=E6=95=B0=E5=91=BD=E4=BB=A4=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 正则改为允许命令后无空格和内容,如 `#测试命令` 也可触发 - 命令内容为空时 content 返回空字符串而非匹配失败 --- handlers/command.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/handlers/command.py b/handlers/command.py index 7efd5e8..9197d57 100644 --- a/handlers/command.py +++ b/handlers/command.py @@ -1,4 +1,4 @@ -"""命令监听处理器:匹配 #命令名+空格 格式的消息,转发到外部回调 URL 并自动回复。""" +"""命令监听处理器:匹配 #命令名 格式的消息,转发到外部回调 URL 并自动回复。""" import re @@ -8,9 +8,9 @@ from ..config import COMMAND_CALLBACK_URL, COMMAND_LENGTH, COMMAND_PREFIX def build_command_pattern() -> re.Pattern: - """构建命令匹配正则:# + N个中文字 + 空格。""" + """构建命令匹配正则:# + N个中文字,后面可跟空格+内容或无内容。""" return re.compile( - rf"^{re.escape(COMMAND_PREFIX)}([\u4e00-\u9fff]{{{COMMAND_LENGTH}}})\s+(.+)", + rf"^{re.escape(COMMAND_PREFIX)}([\u4e00-\u9fff]{{{COMMAND_LENGTH}}})(?:\s+(.+))?$", re.DOTALL, ) @@ -25,7 +25,7 @@ def parse_command(raw_message: str) -> dict | None: return None return { "command": match.group(1), - "content": match.group(2).strip(), + "content": match.group(2).strip() if match.group(2) else "", "raw_message": raw_message.strip(), }