From f2d02572fbb41bfc710bfdce4aa5d555b1d940a1 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Sat, 27 Sep 2025 16:31:23 +0800 Subject: [PATCH] =?UTF-8?q?refactor(chat):=20=E4=BC=98=E5=8C=96=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=96=87=E7=AE=A1=E7=90=86=E5=99=A8=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=90=AF=E5=8A=A8=E4=B8=8E=E5=81=9C=E6=AD=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E6=94=B9=E8=BF=9B=E6=B6=88=E6=81=AF=E7=94=A8?= =?UTF-8?q?=E6=88=B7ID=E8=8E=B7=E5=8F=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/message_manager/context_manager.py | 28 +++++++++++++++++-- src/chat/message_manager/message_manager.py | 11 ++++++++ .../built_in/affinity_flow_chatter/planner.py | 9 ++++-- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/chat/message_manager/context_manager.py b/src/chat/message_manager/context_manager.py index 80e65a33a..5de9463eb 100644 --- a/src/chat/message_manager/context_manager.py +++ b/src/chat/message_manager/context_manager.py @@ -14,7 +14,7 @@ from src.common.logger import get_logger from src.config.config import global_config from src.chat.interest_system import interest_manager from src.chat.energy_system import energy_manager -from . import distribution_manager +from .distribution_manager import distribution_manager logger = get_logger("context_manager") @@ -549,6 +549,13 @@ class StreamContextManager: def _message_to_dict(self, message: Any) -> Dict[str, Any]: """将消息对象转换为字典""" try: + # 获取user_id,优先从user_info.user_id获取,其次从user_id属性获取 + user_id = "" + if hasattr(message, 'user_info') and hasattr(message.user_info, 'user_id'): + user_id = getattr(message.user_info, 'user_id', "") + else: + user_id = getattr(message, 'user_id', "") + return { "message_id": getattr(message, "message_id", ""), "processed_plain_text": getattr(message, "processed_plain_text", ""), @@ -557,7 +564,7 @@ class StreamContextManager: "is_mentioned": getattr(message, "is_mentioned", False), "is_command": getattr(message, "is_command", False), "key_words": getattr(message, "key_words", "[]"), - "user_id": getattr(message, "user_id", ""), + "user_id": user_id, "time": getattr(message, "time", time.time()), } except Exception as e: @@ -858,6 +865,23 @@ class StreamContextManager: return False, f"验证器执行失败: {e}" return True, None + async def start(self) -> None: + """启动上下文管理器""" + if self.is_running: + logger.warning("上下文管理器已经在运行") + return + + await self.start_auto_cleanup() + logger.info("上下文管理器已启动") + + async def stop(self) -> None: + """停止上下文管理器""" + if not self.is_running: + return + + await self.stop_auto_cleanup() + logger.info("上下文管理器已停止") + async def start_auto_cleanup(self, interval: Optional[float] = None) -> None: """启动自动清理 diff --git a/src/chat/message_manager/message_manager.py b/src/chat/message_manager/message_manager.py index ce95a0dd8..1f4880e57 100644 --- a/src/chat/message_manager/message_manager.py +++ b/src/chat/message_manager/message_manager.py @@ -78,6 +78,17 @@ class MessageManager: def add_message(self, stream_id: str, message: DatabaseMessages): """添加消息到指定聊天流""" + # 检查流上下文是否存在,不存在则创建 + context = self.context_manager.get_stream_context(stream_id) + if not context: + # 创建新的流上下文 + from src.common.data_models.message_manager_data_model import StreamContext + new_context = StreamContext(stream_id=stream_id) + success = self.context_manager.add_stream_context(stream_id, new_context) + if not success: + logger.error(f"无法为流 {stream_id} 创建上下文") + return + # 使用 context_manager 添加消息 success = self.context_manager.add_message_to_context(stream_id, message) diff --git a/src/plugins/built_in/affinity_flow_chatter/planner.py b/src/plugins/built_in/affinity_flow_chatter/planner.py index f0d09a5e6..14520ed62 100644 --- a/src/plugins/built_in/affinity_flow_chatter/planner.py +++ b/src/plugins/built_in/affinity_flow_chatter/planner.py @@ -106,10 +106,13 @@ class ChatterActionPlanner: reply_not_available = False if unread_messages: - # 获取用户ID + # 获取用户ID,优先从user_info.user_id获取,其次从user_id属性获取 user_id = None - if unread_messages[0].user_id: - user_id = unread_messages[0].user_id + first_message = unread_messages[0] + if hasattr(first_message, 'user_info') and hasattr(first_message.user_info, 'user_id'): + user_id = getattr(first_message.user_info, 'user_id', None) + elif hasattr(first_message, 'user_id'): + user_id = getattr(first_message, 'user_id', None) # 构建计算上下文 calc_context = {