修复[消息状态检查]:解决消息被错误跳过处理的问题
- 问题:基线轮处理了消息但没有回复,后续轮询时由于数据库有记录从而跳过了处理 - 根因: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()
|
self._ensure_user_messages_table()
|
||||||
conn = self._get_conn()
|
conn = self._get_conn()
|
||||||
try:
|
try:
|
||||||
|
# ⭐ Task #1704: 只查询最近一条匹配消息的reply_status
|
||||||
|
# 问题:多条相同内容消息时,只要有一条状态为0就跳过所有
|
||||||
|
# 修复:只检查最近一条匹配消息的状态
|
||||||
cursor = conn.execute(
|
cursor = conn.execute(
|
||||||
"""SELECT COUNT(*) FROM user_messages
|
"""SELECT reply_status FROM user_messages
|
||||||
WHERE platform=? AND content=? AND reply_status=0""",
|
WHERE platform=? AND content=?
|
||||||
|
ORDER BY id DESC LIMIT 1""",
|
||||||
(platform, content.strip())
|
(platform, content.strip())
|
||||||
)
|
)
|
||||||
return cursor.fetchone()[0] > 0
|
row = cursor.fetchone()
|
||||||
|
return row is not None and row[0] == 0
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"[{platform}] 检查消息是否已回复失败: {e}")
|
logger.error(f"[{platform}] 检查消息是否已回复失败: {e}")
|
||||||
return False
|
return False
|
||||||
|
|||||||
Reference in New Issue
Block a user