""" NEO Bot Plugins Package 插件模块,包含所有业务逻辑插件。 支持固定验证插件列表 + 热加载模式: - VERIFIED_PLUGINS: 经过验证的固定插件列表,启动时优先加载 - Hot-loading: 自动发现并加载目录中未在验证列表中的插件 """ import importlib import sys from pathlib import Path from neobot.core.utils.logger import logger # 固定验证插件列表 # 这些插件经过验证和测试,会在启动时被优先加载 # 如需添加新插件,先加入此列表进行验证 VERIFIED_PLUGINS = ( "admin", "auto_approve", "bot_status", "broadcast", "code_py", "daily_wife", "echo", "feedback", "furry", "group_welcome", "jrcd", "knowledge_base", "mirror_avatar", "poke", "repeat", "thpic", "weather", ) __all__ = [] def _load_verified_plugins(): """加载固定验证插件列表""" for plugin_name in VERIFIED_PLUGINS: full_name = f"{__package__}.{plugin_name}" try: importlib.import_module(full_name) __all__.append(plugin_name) logger.debug(f"[插件加载] 验证插件已加载: {plugin_name}") except Exception as e: logger.error(f"[插件加载] 加载验证插件 '{plugin_name}' 失败: {e}") def _hot_load_plugins(): """热加载:自动发现并加载目录中未在验证列表中的插件""" current_dir = Path(__file__).parent import pkgutil for _, module_name, is_pkg in pkgutil.iter_modules([str(current_dir)]): if module_name.startswith("_"): continue if module_name in VERIFIED_PLUGINS: continue if module_name in __all__: continue full_name = f"{__package__}.{module_name}" try: importlib.import_module(full_name) __all__.append(module_name) logger.info(f"[插件加载] 热加载插件: {module_name}") except Exception as e: logger.error(f"[插件加载] 热加载插件 '{module_name}' 失败: {e}") # 先加载验证插件,再热加载其余插件 _load_verified_plugins() _hot_load_plugins()