fix(is_plugin_enabled): 检查该平台是否包含该插件的配置文件 plugin_set,通过 AstrBot 配置文件来判断账号启用插件

解决关联 issue
`[Bug] 定时分析会直接检测某个群所有支持的平台,而不会检查该平台是否包含该插件的配置文件 #72`
This commit is contained in:
SXP-Simon
2026-01-16 18:31:03 +08:00
parent fb65d14d9d
commit 9ee0662484
3 changed files with 68 additions and 1 deletions
+29
View File
@@ -13,3 +13,32 @@ src/reports/__pycache__/generators.cpython-312.pyc
src/reports/__pycache__/templates.cpython-312.pyc src/reports/__pycache__/templates.cpython-312.pyc
src/visualization/__pycache__/__init__.cpython-312.pyc src/visualization/__pycache__/__init__.cpython-312.pyc
src/visualization/__pycache__/activity_charts.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
+23
View File
@@ -14,6 +14,7 @@ class BotManager:
def __init__(self, config_manager): def __init__(self, config_manager):
self.config_manager = config_manager self.config_manager = config_manager
self._bot_instances = {} # 改为字典:{platform_id: bot_instance} self._bot_instances = {} # 改为字典:{platform_id: bot_instance}
self._platforms = {} # 存储平台对象以访问配置
self._bot_qq_ids = [] # 支持多个QQ号 self._bot_qq_ids = [] # 支持多个QQ号
self._context = None self._context = None
self._is_initialized = False self._is_initialized = False
@@ -110,6 +111,7 @@ class BotManager:
): ):
platform_id = platform.metadata.id platform_id = platform.metadata.id
self.set_bot_instance(bot_client, platform_id) self.set_bot_instance(bot_client, platform_id)
self._platforms[platform_id] = platform
discovered[platform_id] = bot_client discovered[platform_id] = bot_client
return discovered return discovered
@@ -193,3 +195,24 @@ class BotManager:
sender_id_str = str(sender_id) sender_id_str = str(sender_id)
# 检查是否在QQ号列表中 # 检查是否在QQ号列表中
return sender_id_str in self._bot_qq_ids 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
+16 -1
View File
@@ -4,10 +4,11 @@
""" """
import asyncio import asyncio
import base64
import weakref import weakref
from datetime import datetime, timedelta from datetime import datetime, timedelta
import aiohttp import aiohttp
import base64
from astrbot.api import logger from astrbot.api import logger
@@ -314,6 +315,13 @@ class AutoScheduler:
) )
for test_platform_id, test_bot_instance in available_platforms: 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: try:
logger.info( logger.info(
f"尝试使用平台 {test_platform_id} 获取群 {group_id} 的消息..." f"尝试使用平台 {test_platform_id} 获取群 {group_id} 的消息..."
@@ -428,6 +436,13 @@ class AutoScheduler:
return [] return []
for platform_id, bot_instance in self.bot_manager._bot_instances.items(): 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: try:
# 尝试使用 call_action 获取群列表 # 尝试使用 call_action 获取群列表
call_action_func = None call_action_func = None