feat(context_manager): 添加消息处理日志,优化消息标记为已读的逻辑

This commit is contained in:
Windpicker-owo
2025-11-10 19:18:30 +08:00
parent aab3f19f10
commit 69ee2d30de
4 changed files with 55 additions and 19 deletions

View File

@@ -85,26 +85,41 @@ class StreamContext(BaseDataModel):
message_id: 消息ID
action: 要添加的动作名称
"""
# 在未读消息中查找并更新
# 在未读消息中查找并更新(统一转字符串比较)
for message in self.unread_messages:
if message.message_id == message_id:
if str(message.message_id) == str(message_id):
message.add_action(action)
break
# 在历史消息中查找并更新
# 在历史消息中查找并更新(统一转字符串比较)
for message in self.history_messages:
if message.message_id == message_id:
if str(message.message_id) == str(message_id):
message.add_action(action)
break
def mark_message_as_read(self, message_id: str):
"""标记消息为已读"""
from src.common.logger import get_logger
logger = get_logger("StreamContext")
# 先找到要标记的消息(处理 int/str 类型不匹配问题)
message_to_mark = None
for msg in self.unread_messages:
if msg.message_id == message_id:
msg.is_read = True
self.history_messages.append(msg)
self.unread_messages.remove(msg)
# 统一转换为字符串比较,避免 int vs str 导致的匹配失败
if str(msg.message_id) == str(message_id):
message_to_mark = msg
break
# 然后移动到历史消息
if message_to_mark:
message_to_mark.is_read = True
self.history_messages.append(message_to_mark)
self.unread_messages.remove(message_to_mark)
msg_id_str = str(message_id)[:8] if message_id else "unknown"
logger.info(f"📌 [标记已读] 消息 {msg_id_str} 已移至历史, 当前历史数: {len(self.history_messages)}, 未读数: {len(self.unread_messages)}")
else:
msg_id_str = str(message_id)[:8] if message_id else "unknown"
logger.warning(f"⚠️ [标记已读] 未找到消息 {msg_id_str} 在未读列表中, 当前未读消息ID列表: {[str(m.message_id)[:8] for m in self.unread_messages[:5]]}")
def get_unread_messages(self) -> list["DatabaseMessages"]:
"""获取未读消息"""