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 = {