From be047aa2c35465311768244e736522d657f797d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=B4=E7=8C=AB?= Date: Sun, 15 Mar 2026 08:25:56 +0900 Subject: [PATCH] fix: align sender paths with plan, remove QQ-as-universal fallback - Remove get_bot_account("qq") fallback from all 4 sender paths (plan L108/L208/L449: unknown platform = no account, never substitute QQ) - Sender paths now error immediately if platform bot account is not configured - Add detailed comments on filter_bot legacy fallback explaining why global user_id match is needed (plan contingency L528 insufficient for platform-tagged legacy rows like telegram+qq_account) Co-Authored-By: Claude Opus 4.6 (1M context) --- src/chat/brain_chat/PFC/message_sender.py | 6 ++---- src/chat/replyer/group_generator.py | 6 ++---- src/chat/replyer/private_generator.py | 6 ++---- src/common/message_repository.py | 5 ++++- src/services/send_service.py | 4 +--- 5 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/chat/brain_chat/PFC/message_sender.py b/src/chat/brain_chat/PFC/message_sender.py index 7cb57d96..ec5fb5ba 100644 --- a/src/chat/brain_chat/PFC/message_sender.py +++ b/src/chat/brain_chat/PFC/message_sender.py @@ -44,10 +44,8 @@ class DirectMessageSender: # 获取麦麦的信息 bot_user_id = get_bot_account(chat_stream.platform) if not bot_user_id: - bot_user_id = get_bot_account("qq") - if not bot_user_id: - logger.error(f"[私聊][{self.private_name}]平台 {chat_stream.platform} 无可用机器人账号,无法发送消息") - raise RuntimeError("机器人账号未配置") + logger.error(f"[私聊][{self.private_name}]平台 {chat_stream.platform} 未配置机器人账号,无法发送消息") + raise RuntimeError(f"平台 {chat_stream.platform} 未配置机器人账号") bot_user_info = UserInfo( user_id=bot_user_id, user_nickname=global_config.bot.nickname, diff --git a/src/chat/replyer/group_generator.py b/src/chat/replyer/group_generator.py index a2187be7..74b324be 100644 --- a/src/chat/replyer/group_generator.py +++ b/src/chat/replyer/group_generator.py @@ -1117,10 +1117,8 @@ class DefaultReplyer: """构建单个发送消息""" bot_user_id = get_bot_account(self.chat_stream.platform) if not bot_user_id: - bot_user_id = get_bot_account("qq") - if not bot_user_id: - logger.error(f"平台 {self.chat_stream.platform} 无可用机器人账号,无法构建发送消息") - raise RuntimeError("机器人账号未配置") + logger.error(f"平台 {self.chat_stream.platform} 未配置机器人账号,无法构建发送消息") + raise RuntimeError(f"平台 {self.chat_stream.platform} 未配置机器人账号") maim_message = MessageBase( message_info=BaseMessageInfo( diff --git a/src/chat/replyer/private_generator.py b/src/chat/replyer/private_generator.py index e3d5165e..3b70bb2c 100644 --- a/src/chat/replyer/private_generator.py +++ b/src/chat/replyer/private_generator.py @@ -957,10 +957,8 @@ class PrivateReplyer: """构建单个发送消息""" bot_user_id = get_bot_account(self.chat_stream.platform) if not bot_user_id: - bot_user_id = get_bot_account("qq") - if not bot_user_id: - logger.error(f"平台 {self.chat_stream.platform} 无可用机器人账号,无法构建发送消息") - raise RuntimeError("机器人账号未配置") + logger.error(f"平台 {self.chat_stream.platform} 未配置机器人账号,无法构建发送消息") + raise RuntimeError(f"平台 {self.chat_stream.platform} 未配置机器人账号") maim_message = MessageBase( message_info=BaseMessageInfo( diff --git a/src/common/message_repository.py b/src/common/message_repository.py index eac5e837..94d7bfea 100644 --- a/src/common/message_repository.py +++ b/src/common/message_repository.py @@ -176,7 +176,10 @@ def find_messages( ) ) - # 兼容旧数据:历史机器人消息在所有平台上都使用 QQ 账号进行存储。 + # 兼容旧数据:历史机器人消息在所有平台上都使用 QQ 账号作为 user_id 存储, + # 例如旧 Telegram bot 消息的 (platform="telegram", user_id=qq_account)。 + # plan 建议的 ("", qq_account) pair 只能覆盖空 platform 行,无法覆盖这种情况。 + # 因此这里使用全局 user_id 匹配作为临时方案,待 DB 迁移后应移除此兜底。 if qq_fallback := get_bot_account("qq"): exclusion_conditions.append(Messages.user_id == qq_fallback) diff --git a/src/services/send_service.py b/src/services/send_service.py index e90009f0..7af55716 100644 --- a/src/services/send_service.py +++ b/src/services/send_service.py @@ -85,9 +85,7 @@ async def _send_to_target( additional_config["selected_expressions"] = selected_expressions bot_user_id = get_bot_account(target_stream.platform) if not bot_user_id: - bot_user_id = get_bot_account("qq") - if not bot_user_id: - logger.error(f"[SendService] 平台 {target_stream.platform} 无可用机器人账号,无法发送消息") + logger.error(f"[SendService] 平台 {target_stream.platform} 未配置机器人账号,无法发送消息") return False maim_message = MessageBase(