v0.4.0
本次更新是一次深度的架构重构,主要聚焦于核心组件的 模块化解耦、线程安全强化 以及 API 的现代化改造。
最显著的变化是将会话管理逻辑从命令系统中剥离,诞生了通用的 SessionManager;同时 QQRichText 迎来了更符合 Python 习惯的属性(Property)操作方式。
⚠️ 注意:本次更新包含多项破坏性变更(Breaking Changes),升级前请务必阅读下方说明并检查您的插件代码。
🚨 破坏性变更 (Breaking Changes)
如果您现有的插件代码中包含以下内容,升级后需要进行修改:
- 会话控制需显式声明 (
@session_handler)- 变更:
CommandMatcher不再自动识别生成器函数(即包含yield的函数)。 - 影响:旧版本中直接使用
yield Wait...的命令处理函数,在新版本中会被视为返回生成器对象而不执行任何逻辑。 - 迁移:必须为这些函数手动添加
@session_handler装饰器。
- 变更:
from murainbot.utils.SessionManager import session_handler
matcher = CommandManager.on_command("example")
@matcher.register_command("example")
@session_handler # <--- 必须添加此装饰器
def handler(event):
event.reply("Step 1")
yield WaitAction(...)- QQRichText 移除
set_xxx方法 和array属性- 变更:所有消息段(Segment)子类(如
Text,At,Image等)移除了set_text,set_id等旧式 Setter 方法。
将array属性改为更明确的seg_dict属性,需要注意的是,seg_dict为Segment内部字典的深拷贝,如果需要更改请使用_seg_dict(不建议)。 - 迁移:请直接使用属性赋值和重命名属性。
- 变更:所有消息段(Segment)子类(如
# 旧写法
msg = Text("hello")
msg.set_text("world")
print(msg.array)
# 新写法
msg = Text("hello")
msg.text = "world" # 更简洁,且依然包含必要的处理逻辑
print(msg.seg_dict)- StateManager 返回结构调整
- 变更:
StateManager.get_state返回的字典中,other_plugin_data字段的类型由dict变更为list,以支持更灵活的数据结构。
- 变更:
✨ 新特性 (New Features)
🧩 SessionManager (独立会话管理器)
我们将原先深度耦合在 CommandManager 中的流程控制逻辑(WaitHandler/WaitAction)完全剥离,重构为独立的 murainbot.utils.SessionManager 模块。
- 通用性大幅提升:现在您可以在任何类型的事件处理器(不仅仅是命令)中使用
yield和WaitAction来实现多轮对话或复杂流程控制。 - 解耦:命令匹配器只负责匹配,流程控制由会话管理器负责。
🎮 CommandManager 模块化与增强
- 结构重构:
CommandManager被拆分为独立的包,逻辑更清晰。 - WaitCommand 升级:
- 支持
ignore_error参数:可配置是否忽略等待期间的非预期错误。 - 支持自定义
error_handler:允许对捕获的异常进行自定义处理。 - 支持额外的
rules:等待命令时可附加额外的匹配规则。
- 支持
⚡ 优化与改进 (Improvements)
- ⏱️ TimerManager 优化:
- 弃用死循环
time.sleep,改用threading.Condition实现精准等待。 - 新任务加入时能即时唤醒,不再有轮询延迟。
- 弃用死循环
- 📝 统一异常处理:
- 引入
murainbot.common.exc_logger,统一了全框架的异常捕获、日志记录和 Dump 文件保存逻辑,系统运行更稳健,排查问题更方便。
- 引入
- 📜 日志体验升级:
Logger移除了硬编码的关键词高亮,优化了多行日志的排版显示。
📦 插件适配指南
内置插件 LagrangeExtension 已根据新的 API 进行了适配。如果您开发了自定义插件,请重点检查是否使用了 set_xxx 方法或未加装饰器的 yield 语句。
What's Changed
- 合并Dev: 重构QQRichText,CommandManager新增自定义异常处理,新增SessionManager,优化一些东西,修复一些bug by @xiaosuyyds in #78
Full Changelog: v0.3.1...v0.4.0