fix: QQ头衔+bot账号垃圾消息过滤,清理查库队列
根因:OCR把QQ群聊头衔[专业皮肤定制]、bot账号(youpaishidifu)自身回复识别为用户消息, 重启后_replied_texts清空,bot旧回复无历史记录可比对,全部混入查库队列。 修复: - 规则2扩展:半角方括号[]匹配OCR头衔(原只匹配全角【】) - 规则2b新增:行内嵌入头衔+无问号+长度≤30字→bot回复(头衔在消息体中间=bot特征) - 规则7新增:含bot账号名(youpaishidifu)+无问号→bot系统消息,过滤 回归:截图场景4条垃圾消息全FILTER,关于我们/专业皮肤定制怎么配 KEEP,[GG]游戏管理员 FILTER
This commit is contained in:
+23
-2
@@ -6655,11 +6655,22 @@ class MessageMonitor:
|
||||
if re.match(r'^!0?\s*\(?\s*img/', s, re.IGNORECASE):
|
||||
logger.debug(f"[qq-ui] 规则1匹配(图片引用): {s}")
|
||||
return True
|
||||
# 2) 用户头衔/徽章: 【...】Username
|
||||
# 2) 用户头衔/徽章: 【...】Username 或 [...]Username
|
||||
# QQ 群成员的头衔标签,如【专业皮肤定制】C418minecraft
|
||||
if re.match(r'^【[^】]{1,30}】\s*[\w\u4e00-\u9fff]+', s):
|
||||
# ⭐ 2026-08-19: OCR 常把全角【】识别成半角[],两种都匹配
|
||||
# ⚠ 扩展:行内含头衔+无问号→bot消息(头衔出现在消息体中间,说明是bot回复,
|
||||
# 用户消息头衔在用户名上方不在消息体里);行首头衔+独立用户名→同样过滤。
|
||||
if re.match(r'^(?:【[^】]{1,30}】|\[[^\]]{1,30}\])\s*[\w\u4e00-\u9fff]+', s):
|
||||
logger.debug(f"[qq-ui] 规则2匹配(头衔徽章): {s}")
|
||||
return True
|
||||
# ⭐ 2026-08-19: 行内含半角/全角头衔 + 无问号 + 长度≤30字 → bot回复
|
||||
# 如"来吧小姐姐,[专业皮肤定制]"(12字)、"我>新问题,[专业皮肤定制]"(16字)
|
||||
# 头衔出现在消息体中间 = bot消息(用户消息头衔不在消息体里)
|
||||
# ⚠ 长度限制:用户正常消息含头衔(如"专业皮肤定制怎么配?")>30字不拦截
|
||||
_q_in_s = ('?' in s or '?' in s or any(q in s for q in ('怎么', '如何', '什么', '请问', '哪')))
|
||||
if not _q_in_s and len(s) <= 30 and (re.search(r'(?:【[^】]{1,30}】|\[[^\]]{1,30}])', s)):
|
||||
logger.debug(f"[qq-ui] 规则2b匹配(消息体嵌入头衔): {s}")
|
||||
return True
|
||||
# 3) 用户标签: ## @Username — QQ 的 @ 提及格式
|
||||
if re.match(r'^##\s*@[\w\u4e00-\u9fff]+', s):
|
||||
logger.debug(f"[qq-ui] 规则3匹配(##标签): {s}")
|
||||
@@ -6713,6 +6724,16 @@ class MessageMonitor:
|
||||
if re.match(r'^(?:[\u4e00-\u9fff]+)?@[\w\u4e00-\u9fff]+[\s]+[\w\u4e00-\u9fff]+(?:[\s]+[\w\u4e00-\u9fff]+)*$', s):
|
||||
logger.debug(f"[qq-ui] 规则6匹配(纯@消息): {s}")
|
||||
return True
|
||||
# 7) Bot账号自身消息:行内含bot账号名(youpaishidifu)+ 无疑问词
|
||||
# 重启后历史清空,bot旧回复被OCR重新识别当成新消息入库。
|
||||
# 特征:含账号名 + 无问号/疑问词 → bot系统消息,过滤。
|
||||
# ⚠ 含疑问词时放行(如"youpaishidifu是什么?"可能是用户真实查询)
|
||||
_bot_accounts = ('youpaishidifu',)
|
||||
if any(acc in s for acc in _bot_accounts):
|
||||
_qwords7 = ('?', '?', '请问', '是不是', '怎么', '如何', '什么', '哪', '谁', '多少', '几')
|
||||
if not any(q in s for q in _qwords7):
|
||||
logger.debug(f"[qq-ui] 规则7匹配(bot账号消息): {s}")
|
||||
return True
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
|
||||
Reference in New Issue
Block a user