修复[消息状态检查]:解决消息被错误跳过处理的问题
- 问题:基线轮处理了消息但没有回复,后续轮询时由于数据库有记录从而跳过了处理 - 根因:is_message_already_replied方法查询所有匹配消息中reply_status=0的数量,当存在多条相同内容消息时,只要有一条状态为0就会跳过所有消息 - 修复:修改SQL查询只检查最近一条匹配消息的reply_status状态,避免多条消息状态不一致导致的误判 - 测试:创建临时测试脚本验证修复效果,所有测试通过
This commit is contained in:
+8
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user