修复启用新的 message_sender 后导致麦麦消息被重复存入数据库的问题

pull/917/head
Bakadax 2025-05-02 19:05:52 +08:00
parent bea8ce8150
commit 7fe55ddf68
3 changed files with 11 additions and 41 deletions

View File

@ -514,13 +514,13 @@ class ActionPlanner:
retrieved_knowledge_str_planner = await self._get_prompt_info(message=retrieval_context)
logger.info(f"[私聊][{self.private_name}] (ActionPlanner) 自动检索知识 {'完成' if retrieved_knowledge_str_planner else '无结果'}")
except Exception as retrieval_err:
logger.error(f"[私聊][{self.private_name}] (ActionPlanner) 自动检索时出错: {retrieval_err}")
retrieved_memory_str_planner = "检索记忆时出错。\n"
retrieved_knowledge_str_planner = "检索知识时出错。\n"
logger.error(f"[私聊][{self.private_name}] (ActionPlanner) 自动检索时出错: {retrieval_err}")
retrieved_memory_str_planner = "检索记忆时出错。\n"
retrieved_knowledge_str_planner = "检索知识时出错。\n"
else:
logger.debug(f"[私聊][{self.private_name}] (ActionPlanner) 无有效聊天记录,跳过自动检索。")
retrieved_memory_str_planner = "无聊天记录无法检索记忆。\n"
retrieved_knowledge_str_planner = "无聊天记录无法检索知识。\n"
logger.debug(f"[私聊][{self.private_name}] (ActionPlanner) 无有效聊天记录,跳过自动检索。")
retrieved_memory_str_planner = "无聊天记录无法检索记忆。\n"
retrieved_knowledge_str_planner = "无聊天记录无法检索知识。\n"
# --- 选择 Prompt ---
if last_successful_reply_action in ["direct_reply", "send_new_message"]:

View File

@ -6,7 +6,6 @@ from ..chat.message import Message
from maim_message import UserInfo, Seg
from src.plugins.chat.message import MessageSending, MessageSet
from src.plugins.chat.message_sender import message_manager
# from ..storage.storage import MessageStorage
from ...config.config import global_config
@ -18,7 +17,6 @@ class DirectMessageSender:
def __init__(self, private_name: str):
self.private_name = private_name
# self.storage = MessageStorage()
async def send_message(
self,
@ -70,7 +68,6 @@ class DirectMessageSender:
message_set = MessageSet(chat_stream, message_id)
message_set.add_message(message)
await message_manager.add_message(message_set)
# await self.storage.store_message(message, chat_stream)
logger.info(f"[私聊][{self.private_name}]PFC消息已发送: {content}")
except Exception as e:

View File

@ -6,7 +6,6 @@ from .chat_observer import ChatObserver
from .chat_states import NotificationHandler, NotificationType, Notification
from src.plugins.utils.chat_message_builder import build_readable_messages
import traceback # 导入 traceback 用于调试
from src.config.config import global_config
logger = get_module_logger("observation_info")
@ -253,27 +252,6 @@ class ObservationInfo:
message_time = message.get("time")
message_id = message.get("message_id")
processed_text = message.get("processed_plain_text", "")
is_bot_message = False
# 确定发送者和是否为机器人
if user_info:
sender_id = str(user_info.user_id)
if sender_id == str(global_config.BOT_QQ):
is_bot_message = True
# 更新机器人最后发言时间
if message_time and message_time > (self.last_bot_speak_time or 0):
self.last_bot_speak_time = message_time
else:
# 更新用户最后发言时间
if message_time and message_time > (self.last_user_speak_time or 0):
self.last_user_speak_time = message_time
self.active_users.add(sender_id)
self.last_message_sender = sender_id
else:
logger.warning(
f"[私聊][{self.private_name}]处理消息更新时缺少有效的 UserInfo 对象, message_id: {message_id}"
)
self.last_message_sender = None
# 只有在新消息到达时才更新 last_message 相关信息
if message_time and message_time > (self.last_message_time or 0):
@ -300,17 +278,12 @@ class ObservationInfo:
)
self.last_message_sender = None # 发送者未知
if not is_bot_message:
# 将原始消息字典添加到未处理列表
self.unprocessed_messages.append(message)
self.new_messages_count = len(self.unprocessed_messages) # 直接用列表长度
logger.debug(f"[私聊][{self.private_name}] 用户新消息加入未处理列表. 当前未处理数: {self.new_messages_count}")
# logger.debug(f"[私聊][{self.private_name}]消息更新: last_time={self.last_message_time}, new_count={self.new_messages_count}")
self.update_changed() # 标记状态已改变
else:
# 是机器人自己的消息,仅记录日志,不加入未处理列表
logger.debug(f"[私聊][{self.private_name}] 观察到机器人自身消息 (ID: {message_id}),仅更新时间戳,不处理。")
# 将原始消息字典添加到未处理列表
self.unprocessed_messages.append(message)
self.new_messages_count = len(self.unprocessed_messages) # 直接用列表长度
# logger.debug(f"[私聊][{self.private_name}]消息更新: last_time={self.last_message_time}, new_count={self.new_messages_count}")
self.update_changed() # 标记状态已改变
else:
# 如果消息时间戳不是最新的,可能不需要处理,或者记录一个警告
pass