From 9ee0662484592eb9b6ea73780d31b376839ef07b Mon Sep 17 00:00:00 2001 From: SXP-Simon Date: Fri, 16 Jan 2026 18:31:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(is=5Fplugin=5Fenabled):=20=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E8=AF=A5=E5=B9=B3=E5=8F=B0=E6=98=AF=E5=90=A6=E5=8C=85?= =?UTF-8?q?=E5=90=AB=E8=AF=A5=E6=8F=92=E4=BB=B6=E7=9A=84=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=20`plugin=5Fset`=EF=BC=8C=E9=80=9A=E8=BF=87?= =?UTF-8?q?=20AstrBot=20=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E6=9D=A5?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E8=B4=A6=E5=8F=B7=E5=90=AF=E7=94=A8=E6=8F=92?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 解决关联 issue `[Bug] 定时分析会直接检测某个群所有支持的平台,而不会检查该平台是否包含该插件的配置文件 #72` --- .gitignore | 29 +++++++++++++++++++++++++++++ src/core/bot_manager.py | 23 +++++++++++++++++++++++ src/scheduler/auto_scheduler.py | 17 ++++++++++++++++- 3 files changed, 68 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f4f24d4..5803258 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,32 @@ src/reports/__pycache__/generators.cpython-312.pyc src/reports/__pycache__/templates.cpython-312.pyc src/visualization/__pycache__/__init__.cpython-312.pyc src/visualization/__pycache__/activity_charts.cpython-312.pyc +__pycache__/main.cpython-311.pyc +src/analysis/__pycache__/__init__.cpython-311.pyc +src/analysis/__pycache__/llm_analyzer.cpython-311.pyc +src/analysis/__pycache__/statistics.cpython-311.pyc +src/analysis/analyzers/__pycache__/__init__.cpython-311.pyc +src/analysis/analyzers/__pycache__/base_analyzer.cpython-311.pyc +src/analysis/analyzers/__pycache__/golden_quote_analyzer.cpython-311.pyc +src/analysis/analyzers/__pycache__/topic_analyzer.cpython-311.pyc +src/analysis/analyzers/__pycache__/user_title_analyzer.cpython-311.pyc +src/analysis/utils/__pycache__/__init__.cpython-311.pyc +src/analysis/utils/__pycache__/info_utils.cpython-311.pyc +src/analysis/utils/__pycache__/json_utils.cpython-311.pyc +src/analysis/utils/__pycache__/llm_utils.cpython-311.pyc +src/core/__pycache__/__init__.cpython-311.pyc +src/core/__pycache__/bot_manager.cpython-311.pyc +src/core/__pycache__/config.cpython-311.pyc +src/core/__pycache__/message_handler.cpython-311.pyc +src/models/__pycache__/__init__.cpython-311.pyc +src/models/__pycache__/data_models.cpython-311.pyc +src/reports/__pycache__/__init__.cpython-311.pyc +src/reports/__pycache__/generators.cpython-311.pyc +src/reports/__pycache__/templates.cpython-311.pyc +src/scheduler/__pycache__/__init__.cpython-311.pyc +src/scheduler/__pycache__/auto_scheduler.cpython-311.pyc +src/utils/__pycache__/__init__.cpython-311.pyc +src/utils/__pycache__/helpers.cpython-311.pyc +src/utils/__pycache__/pdf_utils.cpython-311.pyc +src/visualization/__pycache__/__init__.cpython-311.pyc +src/visualization/__pycache__/activity_charts.cpython-311.pyc diff --git a/src/core/bot_manager.py b/src/core/bot_manager.py index a82505a..9098a5d 100644 --- a/src/core/bot_manager.py +++ b/src/core/bot_manager.py @@ -14,6 +14,7 @@ class BotManager: def __init__(self, config_manager): self.config_manager = config_manager self._bot_instances = {} # 改为字典:{platform_id: bot_instance} + self._platforms = {} # 存储平台对象以访问配置 self._bot_qq_ids = [] # 支持多个QQ号 self._context = None self._is_initialized = False @@ -110,6 +111,7 @@ class BotManager: ): platform_id = platform.metadata.id self.set_bot_instance(bot_client, platform_id) + self._platforms[platform_id] = platform discovered[platform_id] = bot_client return discovered @@ -193,3 +195,24 @@ class BotManager: sender_id_str = str(sender_id) # 检查是否在QQ号列表中 return sender_id_str in self._bot_qq_ids + + def is_plugin_enabled(self, platform_id: str, plugin_name: str) -> bool: + """检查指定平台是否启用了该插件""" + if platform_id not in self._platforms: + # 如果找不到平台对象(例如是手动添加的),默认认为启用 + # 或者可以返回 True,因为无法进行否定检查 + return True + + platform = self._platforms[platform_id] + if not hasattr(platform, "config") or not isinstance(platform.config, dict): + return True + + plugin_set = platform.config.get("plugin_set", ["*"]) + + if plugin_set is None: + return False # 如果明确为 None, 视为都不启用? 或者默认? Default is ["*"] usually. + + if "*" in plugin_set: + return True + + return plugin_name in plugin_set diff --git a/src/scheduler/auto_scheduler.py b/src/scheduler/auto_scheduler.py index 5d8ca68..91b994b 100644 --- a/src/scheduler/auto_scheduler.py +++ b/src/scheduler/auto_scheduler.py @@ -4,10 +4,11 @@ """ import asyncio +import base64 import weakref from datetime import datetime, timedelta + import aiohttp -import base64 from astrbot.api import logger @@ -314,6 +315,13 @@ class AutoScheduler: ) for test_platform_id, test_bot_instance in available_platforms: + # 检查该平台是否启用了此插件 + if not self.bot_manager.is_plugin_enabled( + test_platform_id, "astrbot_plugin_qq_group_daily_analysis" + ): + logger.debug(f"平台 {test_platform_id} 未启用此插件,跳过") + continue + try: logger.info( f"尝试使用平台 {test_platform_id} 获取群 {group_id} 的消息..." @@ -428,6 +436,13 @@ class AutoScheduler: return [] for platform_id, bot_instance in self.bot_manager._bot_instances.items(): + # 检查该平台是否启用了此插件 + if not self.bot_manager.is_plugin_enabled( + platform_id, "astrbot_plugin_qq_group_daily_analysis" + ): + logger.debug(f"平台 {platform_id} 未启用此插件,跳过获取群列表") + continue + try: # 尝试使用 call_action 获取群列表 call_action_func = None