Skip to content

3.0.0

Choose a tag to compare

@Ruqiehou Ruqiehou released this 17 May 10:53
· 97 commits to main since this release

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 属性与 setter
  • bot_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 使用,无功能影响