Some checks are pending
Auto Deploy NeoBot (FRP + SSH 密码登录) / deploy-to-server (push) Waiting to run
1. 新增daily_wife插件,群里每天随机配对群友 2. 给GroupMemberInfo加了QQ等级和是否机器人的字段 3. 改了群成员API的缓存和字段过滤逻辑 4. 更新了反馈数据和更新日志页面
79 lines
2.1 KiB
Python
79 lines
2.1 KiB
Python
"""
|
|
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()
|