From 9b68d7d995b6092ce5287362dc7ba04b5c552618 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Tue, 11 Nov 2025 21:42:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(heart=5Ffc=5Fsender):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?Send=20API=E6=B6=88=E6=81=AF=E4=B8=8D=E5=85=A5=E6=B5=81?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E6=96=87=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=E7=A1=AE=E4=BF=9D=E6=B6=88=E6=81=AF=E5=8F=AF=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E5=B9=B6=E6=B7=BB=E5=8A=A0=E8=BD=AC=E6=8D=A2=E4=B8=BA=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=B6=88=E6=81=AF=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message_receive/uni_message_sender.py | 64 +++++++++++++++++++ .../proactive/proactive_thinking_executor.py | 1 + 2 files changed, 65 insertions(+) diff --git a/src/chat/message_receive/uni_message_sender.py b/src/chat/message_receive/uni_message_sender.py index 265150b21..e61c64bb1 100644 --- a/src/chat/message_receive/uni_message_sender.py +++ b/src/chat/message_receive/uni_message_sender.py @@ -98,8 +98,72 @@ class HeartFCSender: if storage_message: await self.storage.store_message(message, message.chat_stream) + # 修复Send API消息不入流上下文的问题 + # 将Send API发送的消息也添加到流上下文中,确保后续对话可以引用 + try: + # 将MessageSending转换为DatabaseMessages + db_message = await self._convert_to_database_message(message) + if db_message and message.chat_stream.context_manager: + await message.chat_stream.context_manager.add_message(db_message) + logger.debug(f"[{chat_id}] Send API消息已添加到流上下文: {message_id}") + except Exception as context_error: + logger.warning(f"[{chat_id}] 将Send API消息添加到流上下文失败: {context_error}") + return sent_msg except Exception as e: logger.error(f"[{chat_id}] 处理或存储消息 {message_id} 时出错: {e}") raise e + + async def _convert_to_database_message(self, message: MessageSending): + """将MessageSending对象转换为DatabaseMessages对象 + + Args: + message: MessageSending对象 + + Returns: + DatabaseMessages: 转换后的数据库消息对象,如果转换失败则返回None + """ + try: + from src.common.data_models.database_data_model import DatabaseMessages + + # 构建用户信息 - Send API发送的消息,bot是发送者 + bot_user_info = message.bot_user_info + + # 构建聊天信息 + chat_info = message.message_info + chat_stream = message.chat_stream + + # 获取群组信息 + group_id = None + group_name = None + if chat_stream and chat_stream.group_info: + group_id = chat_stream.group_info.group_id + group_name = chat_stream.group_info.group_name + + # 创建DatabaseMessages对象 + db_message = DatabaseMessages( + message_id=message.message_id, + time=chat_info.time or 0.0, + user_id=bot_user_info.user_id, + user_nickname=bot_user_info.user_nickname, + user_cardname=bot_user_info.user_nickname, # 使用nickname作为cardname + user_platform=chat_info.platform or "", + chat_info_group_id=group_id, + chat_info_group_name=group_name, + chat_info_group_platform=chat_info.platform if group_id else None, + chat_info_platform=chat_info.platform or "", + processed_plain_text=message.processed_plain_text or "", + display_message=message.display_message or "", + is_read=True, # 新消息标记为已读 + interest_value=0.5, # 默认兴趣值 + should_reply=False, # 自己发送的消息不需要回复 + should_act=False, # 自己发送的消息不需要执行动作 + is_mentioned=False, # 自己发送的消息默认不提及 + ) + + return db_message + + except Exception as e: + logger.error(f"转换MessageSending到DatabaseMessages失败: {e}", exc_info=True) + return None diff --git a/src/plugins/built_in/affinity_flow_chatter/proactive/proactive_thinking_executor.py b/src/plugins/built_in/affinity_flow_chatter/proactive/proactive_thinking_executor.py index 0499c31f5..4c182a70c 100644 --- a/src/plugins/built_in/affinity_flow_chatter/proactive/proactive_thinking_executor.py +++ b/src/plugins/built_in/affinity_flow_chatter/proactive/proactive_thinking_executor.py @@ -685,6 +685,7 @@ async def execute_proactive_thinking(stream_id: str): await send_api.text_to_stream( stream_id=stream_id, text=reply, + storage_message=True ) logger.info(f"[主动思考] 已发送话题消息到 {stream_id}")