feat(heart_fc_sender): 修复Send API消息不入流上下文的问题,确保消息可引用并添加转换为数据库消息的功能
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user