修复Bot自言自语拦截:不再仅依赖recent_replies,同时检查_replied_texts
根因:Bot自言自语拦截条件为recent_replies不为空,但物理重启后 DB被清空→recent_replies为空→拦截逻辑完全不执行。 修复:构建_self_check_sources列表,合并recent_replies和_replied_texts。 _replied_texts在物理重启时保留(Task #1616),确保拦截逻辑始终有效。
This commit is contained in:
+11
-3
@@ -9341,7 +9341,15 @@ class MessageMonitor:
|
||||
# ⭐ Task #1574 v2:拆行比对——OCR只读bot回复的首行(如"php有2种登陆模式:"),
|
||||
# 但recent_replies存的是完整多行回复(含表格)。整块比对Jaccard必然低分漏过。
|
||||
# 修复:把每条bot回复拆成行,逐行比对。策略3新增:子串包含检查。
|
||||
if len(ts) >= 6 and self._msg_history and recent_replies:
|
||||
# ⭐ Task #1616 v2:不再仅依赖recent_replies(物理重启后DB清空→为空),
|
||||
# 同时检查_replied_texts(跨重启持久的bot回复去重集)。
|
||||
_self_check_sources = list(recent_replies) if recent_replies else []
|
||||
# 补充:将_replied_texts中的完整回复加入比对源(防止重启后recent_replies为空)
|
||||
if replied:
|
||||
for _r in replied:
|
||||
if _r not in _self_check_sources:
|
||||
_self_check_sources.append(_r)
|
||||
if len(ts) >= 6 and self._msg_history and _self_check_sources:
|
||||
try:
|
||||
# 归一化函数:去时间戳、去标点空格、去英文
|
||||
def _norm_self_check(s):
|
||||
@@ -9353,8 +9361,8 @@ class MessageMonitor:
|
||||
# CJK骨架提取:连续中文字符序列
|
||||
sk_ts = ''.join(c for c in ts if '\u4e00' <= c <= '\u9fff')
|
||||
_self_skip = False
|
||||
# 与最近5分钟的bot回复做归一化比对
|
||||
for br in recent_replies:
|
||||
# 与最近5分钟的bot回复 + _replied_texts做归一化比对
|
||||
for br in _self_check_sources:
|
||||
# ⭐ 拆行:把多行回复拆成独立行,逐行比对
|
||||
# 防止OCR只读首行时被完整回复的长文本"稀释"导致Jaccard不达标
|
||||
br_lines = [ln.strip() for ln in br.split('\n') if ln.strip()]
|
||||
|
||||
Reference in New Issue
Block a user