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/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
+23
View File
@@ -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
+16 -1
View File
@@ -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