Task #1608 修复:过去日期文本中含新鲜时间戳时被误丢弃

根因:OCR一次读到的文本同时含历史内容(公告表格)和新消息
例:'2026年8月3日 | 升级服务器...' + '17:45:35 登录插件在哪儿下载'
当前逻辑有过去日期→全量丢弃,误伤新消息

修复:检查是否有新鲜时间戳(≤300s),有则放行(新消息特征),无则丢弃(纯历史消息)

触发场景:用户在新消息中@bot时,OCR同时读到了上一条bot回复的历史公告表格
This commit is contained in:
youpaishidifu
2026-08-25 17:55:03 +08:00
parent c78c5a1636
commit 2726863405
+36 -8
View File
@@ -6411,15 +6411,43 @@ class MessageMonitor:
except (ValueError, IndexError):
pass
if has_today:
# 有今天日期:历史消息特征 → 整段丢弃
logger.debug(f"[ocr] 过滤器1结果: 检测到今天日期,丢弃历史消息: {text[:80]!r}")
return False
# 有今天日期:检查是否有新鲜时间戳
# 若文本中同时含今天日期和新鲜时间戳,说明是新消息+历史背景(如公告)
# 不应全量丢弃,应放行给下游查重
_has_fresh_ts = False
for ts in timestamps:
try:
if not self._is_timestamp_old(ts, 300):
_has_fresh_ts = True
logger.debug(f"[ocr] 过滤器1结果: 今天日期+新鲜时间戳{ts}(≤300s),放行")
break
except Exception:
pass
if _has_fresh_ts:
pass # 继续走后续逻辑放行
else:
logger.debug(f"[ocr] 过滤器1结果: 检测到今天日期且无新鲜时间戳,丢弃历史消息: {text[:80]!r}")
return False
if has_past:
# ⭐ Task #1602 修复:过去日期=历史消息,时间戳再"新鲜"也丢弃
# 根因:OCR把历史md表格(含旧时间戳如"10:20:26")当成新消息放行
# 解决:有过去日期→直接丢弃,不检查时间戳新鲜度
logger.debug(f"[ocr] 过滤器1结果: 检测到过去日期,丢弃历史消息: {text[:80]!r}")
return False
# ⭐ Task #1602/1607 修复:过去日期但含新鲜时间戳时放行
# 根因:OCR一次读到的文本可能同时含历史内容(公告表格)和新消息
# 例:历史内容"2026年8月3日 | 升级服务器..." + 新消息"17:45:35 登录插件在哪儿下载"
# 过去日期→丢弃逻辑误伤新消息
# 解决:检查是否有新鲜时间戳,有则放行(新消息特征),无则丢弃(纯历史消息)
_has_fresh_ts = False
for ts in timestamps:
try:
if not self._is_timestamp_old(ts, 300):
_has_fresh_ts = True
logger.debug(f"[ocr] 过滤器1结果: 过去日期+新鲜时间戳{ts}(≤300s),放行")
break
except Exception:
pass
if _has_fresh_ts:
pass # 继续走后续逻辑放行
else:
logger.debug(f"[ocr] 过滤器1结果: 检测到过去日期且无新鲜时间戳,丢弃历史消息: {text[:80]!r}")
return False
# 其他情况:丢弃(理论上不会到这里)
logger.debug(f"[ocr] 过滤器1结果: 检测到清晰年月日,丢弃历史消息: {text[:80]!r}")
return False