feat: 一大堆更新,修了一堆bug加了新功能
Some checks failed
Auto Deploy NeoBot (FRP + SSH 密码登录) / deploy-to-server (push) Has been cancelled

1. 新增反馈插件、复读插件、戳一戳插件
2. 修复了配置、线程安全、SQL校验等多处bug
3. 重构插件加载系统,支持验证插件+热加载
4. 修复大量测试用例问题,修复了76个测试挂逼的问题
5. 调整了broadcast插件的发送间隔
6. 优化了性能统计的函数命名逻辑
7. 修复了furry插件的注释和函数名错误
8. 重构了输入校验的逻辑顺序
9. 配置文件新增了默认值处理
This commit is contained in:
2026-05-15 06:25:40 +08:00
parent f0c63136bf
commit 67d01392e4
25 changed files with 726 additions and 1154 deletions

View File

@@ -2,38 +2,76 @@
NEO Bot Plugins Package
插件模块,包含所有业务逻辑插件。
支持固定验证插件列表 + 热加载模式:
- VERIFIED_PLUGINS: 经过验证的固定插件列表,启动时优先加载
- Hot-loading: 自动发现并加载目录中未在验证列表中的插件
"""
from . import admin
from . import auto_approve
from . import bot_status
from . import broadcast
from . import code_py
from . import echo
from . import furry
from . import furry_assistant
from . import github_parser
from . import group_welcome
from . import jrcd
from . import knowledge_base
from . import mirror_avatar
from . import thpic
from . import weather
import importlib
import sys
from pathlib import Path
from neobot.core.utils.logger import logger
__all__ = [
# 固定验证插件列表
# 这些插件经过验证和测试,会在启动时被优先加载
# 如需添加新插件,先加入此列表进行验证
VERIFIED_PLUGINS = (
"admin",
"auto_approve",
"bot_status",
"broadcast",
"code_py",
"echo",
"feedback",
"furry",
"furry_assistant",
"github_parser",
"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()