From aea6c8965cb8295a55de21707628d41e2571607d Mon Sep 17 00:00:00 2001 From: liuwei Date: Wed, 29 Apr 2026 11:51:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BE=A4=E5=9B=9E=E5=A4=8D@?= =?UTF-8?q?=E7=9B=AE=E6=A0=87=E8=AF=AF=E5=88=A4=E5=B9=B6=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E6=95=B0=E5=AD=97=E5=89=8D=E7=BC=80=E6=B8=85=E6=B4=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 变更项:\n1. 在 _resolve_reply_route 中读取 additional_config.platform_io_target_user_id,群聊优先用该字段作为 at_target。\n2. 增加对 platform_io_account_id 的防误用判断,避免把机器人账号当作 @ 目标。\n3. 增强 _sanitize_reply_text:支持清理无标点的长数字前缀(如 484377749在呢)。\n4. 补充中文注释,明确平台字段优先级与防误判逻辑。 --- plugins/maibot_adapter/main.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/plugins/maibot_adapter/main.py b/plugins/maibot_adapter/main.py index f14bfc0..d7a895b 100644 --- a/plugins/maibot_adapter/main.py +++ b/plugins/maibot_adapter/main.py @@ -652,6 +652,10 @@ class MaiBotAdapterPlugin(MessagePluginInterface): def _resolve_reply_route(self, message_info: Dict[str, Any]) -> Optional[Dict[str, str]]: """从 MaiBot 返回的 message_info 中解析微信路由。""" + additional_config = message_info.get("additional_config") or {} + cfg_target_user_id = str(additional_config.get("platform_io_target_user_id", "") or "").strip() + cfg_account_id = str(additional_config.get("platform_io_account_id", "") or "").strip() + # 优先按官方当前结构解析: # 1. group_info 存在 => 群回复; # 2. user_info 存在 => 私聊回复。 @@ -661,10 +665,16 @@ class MaiBotAdapterPlugin(MessagePluginInterface): root_user_id = str(root_user_info.get("user_id", "") or "").strip() if group_id: + # 群聊 @ 目标优先用平台显式给出的 target_user_id: + # 1. platform_io_target_user_id 才是这次应被 @ 的真实用户; + # 2. 避免误用 platform_io_account_id(机器人自身账号)导致 @ 错对象。 + at_target = cfg_target_user_id or root_user_id + if at_target and cfg_account_id and at_target == cfg_account_id: + at_target = "" return { "route_type": "group", "target": group_id, - "at_target": root_user_id, + "at_target": at_target, } if root_user_id: @@ -686,10 +696,13 @@ class MaiBotAdapterPlugin(MessagePluginInterface): sender_user_id = str(sender_user_info.get("user_id", "") or "").strip() if group_id: + at_target = cfg_target_user_id or receiver_user_id or sender_user_id + if at_target and cfg_account_id and at_target == cfg_account_id: + at_target = "" return { "route_type": "group", "target": group_id, - "at_target": receiver_user_id or sender_user_id, + "at_target": at_target, } if receiver_user_id: @@ -851,6 +864,10 @@ class MaiBotAdapterPlugin(MessagePluginInterface): # 2. 这些数字通常长度较长(>=6),且紧跟中文/英文标点或空白; # 3. 只在“前缀位置”清理,避免误伤正文里的正常数字内容。 text = re.sub(r"^\s*\d{6,}\s*[,,::;;\-—_~\s]*", "", text) + # 兼容“数字前缀直接连正文”的情况,例如“484377749在呢”: + # 1. 仅在开头匹配长数字; + # 2. 后面必须跟非数字字符,避免误删纯数字回复(如验证码类内容可按需保留)。 + text = re.sub(r"^\s*\d{6,}(?=\D)", "", text) # 若清理后前部还有一层“孤立标点”,再做一次轻量修整,避免出现“,在呢怎么了”这种残留。 text = re.sub(r"^\s*[,,::;;\-—_~]+\s*", "", text)