From b950ddba134207a3660d6e7c1763de0d0ce1545c Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Wed, 5 Nov 2025 14:45:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(chat):=20=E5=A2=9E=E5=BC=BA=E5=AF=B9?= =?UTF-8?q?=E8=87=AA=E6=88=91=E8=BA=AB=E4=BB=BD=E7=9A=84=E8=AF=86=E5=88=AB?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E5=B0=86=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=A0=87=E8=AE=B0=E4=B8=BA"SELF"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/message_receive/storage.py | 7 ++++++ src/chat/utils/chat_message_builder.py | 34 ++++++++++++++------------ 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/chat/message_receive/storage.py b/src/chat/message_receive/storage.py index a23bbd229..6eb621e3c 100644 --- a/src/chat/message_receive/storage.py +++ b/src/chat/message_receive/storage.py @@ -12,6 +12,7 @@ from src.common.data_models.database_data_model import DatabaseMessages from src.common.database.core import get_db_session from src.common.database.core.models import Images, Messages from src.common.logger import get_logger +from src.config.config import global_config from .chat_stream import ChatStream from .message import MessageSending @@ -275,6 +276,9 @@ class MessageStorageBatcher: user_platform = user_info_dict.get("platform") user_id = user_info_dict.get("user_id") + # 将机器人自己的user_id标记为"SELF",增强对自我身份的识别 + if user_id == global_config.bot.qq_account: + user_id = "SELF" user_nickname = user_info_dict.get("user_nickname") user_cardname = user_info_dict.get("user_cardname") @@ -612,6 +616,9 @@ class MessageStorage: user_platform = user_info_dict.get("platform") user_id = user_info_dict.get("user_id") + # 将机器人自己的user_id标记为"SELF",增强对自我身份的识别 + if user_id == global_config.bot.qq_account: + user_id = "SELF" user_nickname = user_info_dict.get("user_nickname") user_cardname = user_info_dict.get("user_cardname") diff --git a/src/chat/utils/chat_message_builder.py b/src/chat/utils/chat_message_builder.py index 8ddab795c..c31bb855d 100644 --- a/src/chat/utils/chat_message_builder.py +++ b/src/chat/utils/chat_message_builder.py @@ -44,8 +44,8 @@ def replace_user_references_sync( if name_resolver is None: def default_resolver(platform: str, user_id: str) -> str: - # 检查是否是机器人自己 - if replace_bot_name and user_id == global_config.bot.qq_account: + # 检查是否是机器人自己(支持SELF标记或直接比对QQ号) + if replace_bot_name and (user_id == "SELF" or user_id == global_config.bot.qq_account): return f"{global_config.bot.nickname}(你)" # 同步函数中无法使用异步的 get_value,直接返回 user_id # 建议调用方使用 replace_user_references_async 以获取完整的用户名 @@ -60,8 +60,8 @@ def replace_user_references_sync( aaa = match[1] bbb = match[2] try: - # 检查是否是机器人自己 - if replace_bot_name and bbb == global_config.bot.qq_account: + # 检查是否是机器人自己(支持SELF标记或直接比对QQ号) + if replace_bot_name and (bbb == "SELF" or bbb == global_config.bot.qq_account): reply_person_name = f"{global_config.bot.nickname}(你)" else: reply_person_name = name_resolver(platform, bbb) or aaa @@ -81,8 +81,8 @@ def replace_user_references_sync( aaa = m.group(1) bbb = m.group(2) try: - # 检查是否是机器人自己 - if replace_bot_name and bbb == global_config.bot.qq_account: + # 检查是否是机器人自己(支持SELF标记或直接比对QQ号) + if replace_bot_name and (bbb == "SELF" or bbb == global_config.bot.qq_account): at_person_name = f"{global_config.bot.nickname}(你)" else: at_person_name = name_resolver(platform, bbb) or aaa @@ -118,8 +118,8 @@ async def replace_user_references_async( """ if name_resolver is None: async def default_resolver(platform: str, user_id: str) -> str: - # 检查是否是机器人自己 - if replace_bot_name and user_id == global_config.bot.qq_account: + # 检查是否是机器人自己(支持SELF标记或直接比对QQ号) + if replace_bot_name and (user_id == "SELF" or user_id == global_config.bot.qq_account): return f"{global_config.bot.nickname}(你)" person_id = PersonInfoManager.get_person_id(platform, user_id) person_info = await person_info_manager.get_values(person_id, ["person_name"]) @@ -134,8 +134,8 @@ async def replace_user_references_async( aaa = match.group(1) bbb = match.group(2) try: - # 检查是否是机器人自己 - if replace_bot_name and bbb == global_config.bot.qq_account: + # 检查是否是机器人自己(支持SELF标记或直接比对QQ号) + if replace_bot_name and (bbb == "SELF" or bbb == global_config.bot.qq_account): reply_person_name = f"{global_config.bot.nickname}(你)" else: reply_person_name = await name_resolver(platform, bbb) or aaa @@ -155,8 +155,8 @@ async def replace_user_references_async( aaa = m.group(1) bbb = m.group(2) try: - # 检查是否是机器人自己 - if replace_bot_name and bbb == global_config.bot.qq_account: + # 检查是否是机器人自己(支持SELF标记或直接比对QQ号) + if replace_bot_name and (bbb == "SELF" or bbb == global_config.bot.qq_account): at_person_name = f"{global_config.bot.nickname}(你)" else: at_person_name = await name_resolver(platform, bbb) or aaa @@ -637,12 +637,14 @@ async def _build_readable_messages_internal( if not all([platform, user_id, timestamp is not None]): continue - person = Person(platform=platform, user_id=user_id) # 根据 replace_bot_name 参数决定是否替换机器人名称 person_name: str - if replace_bot_name and user_id == global_config.bot.qq_account: + # 检查是否是机器人自己(支持SELF标记或直接比对QQ号) + if replace_bot_name and (user_id == "SELF" or user_id == global_config.bot.qq_account): person_name = f"{global_config.bot.nickname}(你)" else: + person_id = PersonInfoManager.get_person_id(platform, user_id) + person_info_manager = get_person_info_manager() person_name = await person_info_manager.get_value(person_id, "person_name") # type: ignore # 如果 person_name 未设置,则使用消息中的 nickname 或默认名称 @@ -654,8 +656,8 @@ async def _build_readable_messages_internal( else: person_name = "某人" - # 在用户名后面添加 QQ 号, 但机器人本体不用 - if user_id != global_config.bot.qq_account: + # 在用户名后面添加 QQ 号, 但机器人本体不用(包括SELF标记) + if user_id != global_config.bot.qq_account and user_id != "SELF": person_name = f"{person_name}({user_id})" # 使用独立函数处理用户引用格式