fix(msgbot): bot表格日期剥离——只有年月日无时间→表格内容不用于丢弃判断
- 检测每个日期后是否紧跟时间(年月日+时:分 → 真消息;只有年月日 → bot表格) - 若所有日期均无时间→判定为bot表格日期→剥离后继续处理,不触发历史消息丢弃 - 场景:用户问"近期公告"→bot回复表格含"2026年8月3日"→OCR读到日期→原逻辑整条丢弃→用户新消息丢失 - 修复后:表格日期被剥离,用户消息正常进入下游处理
This commit is contained in:
+18
@@ -6398,7 +6398,25 @@ class MessageMonitor:
|
|||||||
# OCR常把日期和时间连在一起:2026/8/319:45:20 → 匹配到2026/8/31(未来/非法)
|
# OCR常把日期和时间连在一起:2026/8/319:45:20 → 匹配到2026/8/31(未来/非法)
|
||||||
# 需要截断到最后一个合法且≤今天的日期
|
# 需要截断到最后一个合法且≤今天的日期
|
||||||
# ⭐ 2026-08-15 修复:扩展正则支持中文日期格式(2026年8月3日)
|
# ⭐ 2026-08-15 修复:扩展正则支持中文日期格式(2026年8月3日)
|
||||||
|
# ⭐ 2026-08-29 修复:检测日期是否附带时间——bot表格只有日期无时间,QQ消息日期+时分
|
||||||
raw_dates = re.findall(r'\d{4}[/-]\d{1,2}[/-]\d{1,2}|\d{4}年\d{1,2}月\d{1,2}日', text)
|
raw_dates = re.findall(r'\d{4}[/-]\d{1,2}[/-]\d{1,2}|\d{4}年\d{1,2}月\d{1,2}日', text)
|
||||||
|
# 检测每个日期后是否紧跟时间(年月日+时:分 → 真消息;只有年月日 → bot表格)
|
||||||
|
_dates_with_time = 0
|
||||||
|
_dates_without_time = 0
|
||||||
|
for _d_match in re.finditer(r'(\d{4}[/-]\d{1,2}[/-]\d{1,2}|\d{4}年\d{1,2}月\d{1,2}日)(\s*\d{1,2}:\d{1,2})', text):
|
||||||
|
_dates_with_time += 1
|
||||||
|
_dates_without_time = len(raw_dates) - _dates_with_time
|
||||||
|
_all_dates_are_table = len(raw_dates) > 0 and _dates_without_time == len(raw_dates)
|
||||||
|
if _all_dates_are_table:
|
||||||
|
logger.debug(f"[ocr] 所有日期均无附带时间({len(raw_dates)}个),判定为bot表格日期,剥离后继续处理")
|
||||||
|
# 剥离表格日期(用空格替换),保留其余文本给下游处理
|
||||||
|
text = re.sub(r'\d{4}[/-]\d{1,2}[/-]\d{1,2}|\d{4}年\d{1,2}月\d{1,2}日', '', text)
|
||||||
|
normalized = self._normalize_timestamps(text)
|
||||||
|
# 重新提取时间戳(日期被剥离后可能暴露新的时间戳)
|
||||||
|
timestamps = re.findall(r'\d{1,2}:\d{1,2}(?::\d{1,2})?', normalized)
|
||||||
|
# 重新设置 dates 为空,走后续"无日期"逻辑
|
||||||
|
raw_dates = []
|
||||||
|
dates = []
|
||||||
raw_dates = [d.replace('-', '/').replace('年', '/').replace('月', '/').replace('日', '') for d in raw_dates]
|
raw_dates = [d.replace('-', '/').replace('年', '/').replace('月', '/').replace('日', '') for d in raw_dates]
|
||||||
today = datetime.now().date()
|
today = datetime.now().date()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user