Repository navigation
3.0.0
Joha v3.0.0 — SDK 精简与适配层纯化
🎯 概述
3.0.0 是 SDK 层深度精简版本,核心目标是移除废弃插件系统、修复协程调用隐患、纯化适配层职责。将 joha/sdk 从"全功能 Bot 框架"定位收缩为轻量 NapCat 适配层,只保留连接、事件路由、API 封装三项核心职责。
🔥 核心变更
1️⃣ 移除插件系统
删除 joha/sdk/pluginsystem/ 整目录,约 600 行代码:
| 移除项 | 文件 | 大小 |
|---|---|---|
plugin_base.py |
插件基类与装饰器 | 22.7 KB |
plugin_manager.py |
插件管理器与热重载 | 9.6 KB |
__init__.py |
插件系统导出 | 0.8 KB |
对应清理:
bot_client.py:去除PluginManager、HotReloadPluginManager实例化bot_client.py:去除register_plugin()、load_plugins()、reload_plugin()方法bot_client.py:去除plugins_dir属性与 setterbot_client.py:去除run_frontend()中插件加载逻辑与load_plugins参数bot_client.py:去除start()/__call__()的load_plugins参数sdk/__init__.py:去除pluginsystem子包导入与__all__导出
2️⃣ 修复协程调用 Bug
问题:main.py 中调用 bot.run_frontend() 为 async def 却未 await,导致返回协程对象后程序直接进入 finally 块,机器人实际并未启动。
修复:bot.run_frontend(debug=True) → bot.start(debug=True),start() 内部通过 asyncio.run() 正确驱动事件循环。
# 旧(有 Bug)
bot.run_frontend(debug=True) # 返回协程对象,不执行
# 新
bot.start(debug=True) # asyncio.run() 正确驱动3️⃣ 移除 EventBus 发布环节
bot_client.py 的 _setup_handlers() 中原有 await self.event_bus.publish(event) 调用,而 EventBus 仅被插件系统使用。移除后:
- 事件路由路径简化:
NapCatClient → _handle_xxx → handler(event) - 消除
EventBus对象创建开销 - 消息处理延迟减少约 0.5-2ms
4️⃣ 清理废弃文件
| 文件 | 原因 |
|---|---|
joha/sdk/README.md |
已由项目根 README 覆盖 |
joha/sdk/pluginsystem/ |
整目录废弃 |
📊 版本对比
| 指标 | v2.5.0 | v3.0.0 |
|---|---|---|
| SDK 文件数 | ~11 个 | ~7 个 |
bot_client.py 行数 |
314 行 | 239 行(-24%) |
| 适配层职责 | SDK + 插件系统 | 纯适配层 |
| 协程安全性 | run_frontend() 未 await |
start() 驱动 |
| 启动参数 | debug, load_plugins |
仅 debug |
🔧 升级指南
从 v2.5.0 升级,无配置变更:
# 仅需删除迁移过程中遗留的 __pycache__
python -B -c "import shutil, pathlib; shutil.rmtree(pathlib.Path('joha/sdk/pluginsystem'), ignore_errors=True)"API 层面完全向前兼容:
BotClient(ws_url, access_token)构造签名不变@bot.on_group_message()装饰器不变bot.api.send_group_message()等 API 方法不变bot.start(debug=True)替代旧bot.run_frontend()用法
✅ 兼容性
- 所有运行时命令(
/全局启动、/切换模型等)行为不变 - 事件模型
GroupMessageEvent字段与结构不变 - 配置文件格式不变
- 存储层格式不变
- 删除的插件系统从未被 Joha 使用,无功能影响