修复[消息状态检查]:解决消息被错误跳过处理的问题

- 问题:基线轮处理了消息但没有回复,后续轮询时由于数据库有记录从而跳过了处理
- 根因:is_message_already_replied方法查询所有匹配消息中reply_status=0的数量,当存在多条相同内容消息时,只要有一条状态为0就会跳过所有消息
- 修复:修改SQL查询只检查最近一条匹配消息的reply_status状态,避免多条消息状态不一致导致的误判
- 测试:创建临时测试脚本验证修复效果,所有测试通过
This commit is contained in:
youpaishidifu
2026-09-13 17:39:48 +08:00
parent be91fbad35
commit 16b5a388e9
+8 -3
View File
@@ -699,12 +699,17 @@ class MessageHistory:
self._ensure_user_messages_table()
conn = self._get_conn()
try:
# ⭐ Task #1704: 只查询最近一条匹配消息的reply_status
# 问题:多条相同内容消息时,只要有一条状态为0就跳过所有
# 修复:只检查最近一条匹配消息的状态
cursor = conn.execute(
"""SELECT COUNT(*) FROM user_messages
WHERE platform=? AND content=? AND reply_status=0""",
"""SELECT reply_status FROM user_messages
WHERE platform=? AND content=?
ORDER BY id DESC LIMIT 1""",
(platform, content.strip())
)
return cursor.fetchone()[0] > 0
row = cursor.fetchone()
return row is not None and row[0] == 0
except Exception as e:
logger.error(f"[{platform}] 检查消息是否已回复失败: {e}")
return False