From 64ac6c429b6d64eea9ad33e8f57865e7c07e13ea Mon Sep 17 00:00:00 2001 From: SXP-Simon Date: Tue, 18 Nov 2025 13:14:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=A4=9A=E9=80=82=E9=85=8D=E5=99=A8?= =?UTF-8?q?=E6=94=AF=E6=8C=81):=20=E5=A4=84=E7=90=86=20Bot=20=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E4=B8=8E=E5=B9=B3=E5=8F=B0=20ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 12 ++++++++++-- src/core/bot_manager.py | 9 ++++++++- src/scheduler/auto_scheduler.py | 21 +++++++++++++++------ src/utils/helpers.py | 4 ++-- 4 files changed, 35 insertions(+), 11 deletions(-) diff --git a/main.py b/main.py index 0970bdc..83401d9 100644 --- a/main.py +++ b/main.py @@ -70,7 +70,7 @@ class QQGroupDailyAnalysis(Star): async def _delayed_start_scheduler(self): """延迟启动调度器,给系统时间初始化""" try: - # 等待30秒让系统完全初始化 + # 等待10秒让系统完全初始化 await asyncio.sleep(30) # 初始化所有bot实例 @@ -174,9 +174,17 @@ class QQGroupDailyAnalysis(Star): logger.info(f"当前输出格式配置: {config_manager.get_output_format()}") try: + # 获取该群对应的平台ID和bot实例 + platform_id = auto_scheduler._get_platform_id_for_group(group_id) + bot_instance = bot_manager.get_bot_instance(platform_id) + + if not bot_instance: + yield event.plain_result(f"❌ 未找到群 {group_id} 对应的bot实例(平台: {platform_id})") + return + # 获取群聊消息 messages = await message_analyzer.message_handler.fetch_group_messages( - bot_manager.get_bot_instance(), group_id, analysis_days + bot_instance, group_id, analysis_days, platform_id ) if not messages: yield event.plain_result( diff --git a/src/core/bot_manager.py b/src/core/bot_manager.py index cab1ce1..9d148fd 100644 --- a/src/core/bot_manager.py +++ b/src/core/bot_manager.py @@ -120,7 +120,14 @@ class BotManager: def update_from_event(self, event): """从事件更新bot实例(用于手动命令)""" if hasattr(event, "bot") and event.bot: - self.set_bot_instance(event.bot) + # 从事件中获取平台ID + platform_id = None + if hasattr(event, "platform") and event.platform: + platform_id = event.platform + elif hasattr(event, "metadata") and hasattr(event.metadata, "platform"): + platform_id = event.metadata.platform + + self.set_bot_instance(event.bot, platform_id) # 每次都尝试从bot实例提取QQ号 bot_qq_id = self._extract_bot_qq_id(event.bot) if bot_qq_id: diff --git a/src/scheduler/auto_scheduler.py b/src/scheduler/auto_scheduler.py index c0b6573..dd382bc 100644 --- a/src/scheduler/auto_scheduler.py +++ b/src/scheduler/auto_scheduler.py @@ -376,9 +376,12 @@ class AutoScheduler: async def _send_image_message(self, group_id: str, image_url: str): """发送图片消息到群""" try: - bot_instance = self.bot_manager.get_bot_instance() + # 获取该群对应的平台ID和bot实例 + platform_id = self._get_platform_id_for_group(group_id) + bot_instance = self.bot_manager.get_bot_instance(platform_id) + if not bot_instance: - logger.error(f"群 {group_id} 发送图片失败:缺少bot实例") + logger.error(f"群 {group_id} 发送图片失败:缺少bot实例(平台: {platform_id})") return # 发送图片消息到群 @@ -398,9 +401,12 @@ class AutoScheduler: async def _send_text_message(self, group_id: str, text_content: str): """发送文本消息到群""" try: - bot_instance = self.bot_manager.get_bot_instance() + # 获取该群对应的平台ID和bot实例 + platform_id = self._get_platform_id_for_group(group_id) + bot_instance = self.bot_manager.get_bot_instance(platform_id) + if not bot_instance: - logger.error(f"群 {group_id} 发送文本失败:缺少bot实例") + logger.error(f"群 {group_id} 发送文本失败:缺少bot实例(平台: {platform_id})") return # 发送文本消息到群 @@ -415,9 +421,12 @@ class AutoScheduler: async def _send_pdf_file(self, group_id: str, pdf_path: str): """发送PDF文件到群""" try: - bot_instance = self.bot_manager.get_bot_instance() + # 获取该群对应的平台ID和bot实例 + platform_id = self._get_platform_id_for_group(group_id) + bot_instance = self.bot_manager.get_bot_instance(platform_id) + if not bot_instance: - logger.error(f"群 {group_id} 发送PDF失败:缺少bot实例") + logger.error(f"群 {group_id} 发送PDF失败:缺少bot实例(平台: {platform_id})") return # 发送PDF文件到群 diff --git a/src/utils/helpers.py b/src/utils/helpers.py index 1a9c12d..cfc2e81 100644 --- a/src/utils/helpers.py +++ b/src/utils/helpers.py @@ -32,10 +32,10 @@ class MessageAnalyzer: return str(bot_instance.user_id) return None - async def set_bot_instance(self, bot_instance): + async def set_bot_instance(self, bot_instance, platform_id=None): """设置bot实例(保持向后兼容)""" if self.bot_manager: - self.bot_manager.set_bot_instance(bot_instance) + self.bot_manager.set_bot_instance(bot_instance, platform_id) else: # 从bot实例提取QQ号并设置为列表 bot_qq_id = self._extract_bot_qq_id_from_instance(bot_instance)