清理MaiBot回复中的message_id数字前缀噪音
变更项:\n1. 新增 _sanitize_reply_text 方法,对回复文本做发送前净化。\n2. 增加规则:清理回复开头的长数字前缀(>=6位)及其后随标点/空白,避免 message_id 等内部标识外泄到群聊。\n3. 增加前导标点二次修整,去除数字剥离后残留的逗号/冒号等噪音字符。\n4. 在 _handle_incoming_package 中接入净化流程,保证实际发送前统一生效。
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
|
import re
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
from typing import Any, Dict, List, Optional, Tuple
|
from typing import Any, Dict, List, Optional, Tuple
|
||||||
@@ -425,6 +426,7 @@ class MaiBotAdapterPlugin(MessagePluginInterface):
|
|||||||
message_segment = api_message.get("message_segment") or {}
|
message_segment = api_message.get("message_segment") or {}
|
||||||
|
|
||||||
reply_text = self._extract_segment_text(message_segment).strip()
|
reply_text = self._extract_segment_text(message_segment).strip()
|
||||||
|
reply_text = self._sanitize_reply_text(reply_text)
|
||||||
if not reply_text:
|
if not reply_text:
|
||||||
self._log_runtime(
|
self._log_runtime(
|
||||||
f"[{self.name}] MaiBot 返回了空文本或非文本片段,忽略发送: package_id={package_id}, "
|
f"[{self.name}] MaiBot 返回了空文本或非文本片段,忽略发送: package_id={package_id}, "
|
||||||
@@ -838,6 +840,23 @@ class MaiBotAdapterPlugin(MessagePluginInterface):
|
|||||||
|
|
||||||
return str(data or "")
|
return str(data or "")
|
||||||
|
|
||||||
|
def _sanitize_reply_text(self, reply_text: str) -> str:
|
||||||
|
"""清理 MaiBot 回复里的路由噪音,避免把 message_id 等内部标识发到群里。"""
|
||||||
|
text = str(reply_text or "").strip()
|
||||||
|
if not text:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
# 清理“纯数字前缀 + 标点/空白”的噪音:
|
||||||
|
# 1. 某些轮次里模型会把 message_id 或会话标识误拼到回复最前面;
|
||||||
|
# 2. 这些数字通常长度较长(>=6),且紧跟中文/英文标点或空白;
|
||||||
|
# 3. 只在“前缀位置”清理,避免误伤正文里的正常数字内容。
|
||||||
|
text = re.sub(r"^\s*\d{6,}\s*[,,::;;\-—_~\s]*", "", text)
|
||||||
|
|
||||||
|
# 若清理后前部还有一层“孤立标点”,再做一次轻量修整,避免出现“,在呢怎么了”这种残留。
|
||||||
|
text = re.sub(r"^\s*[,,::;;\-—_~]+\s*", "", text)
|
||||||
|
|
||||||
|
return text.strip()
|
||||||
|
|
||||||
def _parse_json_message(self, raw_text: str) -> Optional[Dict[str, Any]]:
|
def _parse_json_message(self, raw_text: str) -> Optional[Dict[str, Any]]:
|
||||||
"""统一处理 JSON 解析异常,避免接收循环被坏包打断。"""
|
"""统一处理 JSON 解析异常,避免接收循环被坏包打断。"""
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user