refactor(replyer): 统一消息与用户信息模型

将 `_generate_prompt` 方法中的 `reply_message` 参数统一为 `DatabaseMessages` 类型,并确保从 `anchor_message` 获取的 `sender_info` 被正确转换为 `UserInfo` 模型。同时,简化了情绪提示词的构建逻辑。

此外,在 `_get_master_prompt` 中增加了对 `user_info` 的空值检查,以避免潜在的属性访问错误。
This commit is contained in:
minecraft1024a
2025-10-31 21:23:06 +08:00
parent c1beb2c526
commit bee9406c8d

View File

@@ -257,6 +257,8 @@ class DefaultReplyer:
if not master_config or not master_config.enable:
return ""
if not self.chat_stream.user_info:
return ""
platform, user_id = self.chat_stream.platform, self.chat_stream.user_info.user_id
try:
if user_id:
@@ -312,7 +314,7 @@ class DefaultReplyer:
extra_info=extra_info,
available_actions=available_actions,
enable_tool=enable_tool,
reply_message=reply_message,
reply_message=DatabaseMessages(**reply_message) if isinstance(reply_message, dict) else reply_message,
)
if not prompt:
@@ -976,7 +978,6 @@ class DefaultReplyer:
if unread_messages:
unread_lines = []
for msg in unread_messages:
msg_id = msg.message_id
msg_time = time.strftime("%H:%M:%S", time.localtime(msg.time))
msg_content = msg.processed_plain_text
@@ -1077,7 +1078,7 @@ class DefaultReplyer:
if unread_messages:
unread_lines = []
for msg in unread_messages:
msg_id = msg.get("message_id", "")
msg.get("message_id", "")
msg_time = time.strftime("%H:%M:%S", time.localtime(msg.get("time", time.time())))
msg_content = msg.get("processed_plain_text", "")
@@ -1150,7 +1151,7 @@ class DefaultReplyer:
extra_info: str = "",
available_actions: dict[str, ActionInfo] | None = None,
enable_tool: bool = True,
reply_message: dict[str, Any] | DatabaseMessages | None = None,
reply_message: DatabaseMessages | None = None,
) -> str:
"""
构建回复器上下文
@@ -1612,17 +1613,11 @@ class DefaultReplyer:
target = "(无消息内容)"
# 添加情绪状态获取
mood_prompt = ""
if global_config.mood.enable_mood:
chat_mood = mood_manager.get_mood_by_chat_id(chat_id)
mood_prompt = chat_mood.mood_state
# 检查是否有愤怒状态的补充提示词
angry_prompt_addition = mood_manager.get_angry_prompt_addition(chat_id)
if angry_prompt_addition:
mood_prompt = f"{mood_prompt}{angry_prompt_addition}"
else:
mood_prompt = ""
# 从内存获取历史消息,避免重复查询数据库
from src.plugin_system.apis.chat_api import get_chat_manager
@@ -1769,11 +1764,16 @@ class DefaultReplyer:
platform=self.chat_stream.platform,
)
# 从 DatabaseMessages 获取 sender_info
if anchor_message:
sender_info = anchor_message.user_info
else:
sender_info = None
# 从 DatabaseMessages 获取 sender_info 并转换为 UserInfo
sender_info = None
if anchor_message and anchor_message.user_info:
db_user_info = anchor_message.user_info
sender_info = UserInfo(
platform=db_user_info.platform,
user_id=db_user_info.user_id,
user_nickname=db_user_info.user_nickname,
user_cardname=db_user_info.user_cardname,
)
return MessageSending(
message_id=message_id, # 使用片段的唯一ID