feat(heart_fc_sender): 修复Send API消息不入流上下文的问题,确保消息可引用并添加转换为数据库消息的功能

This commit is contained in:
Windpicker-owo
2025-11-11 21:42:17 +08:00
parent 13fb86394b
commit 9b68d7d995
2 changed files with 65 additions and 0 deletions

View File

@@ -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

View File

@@ -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}")