Skip to content

v0.4.0

Choose a tag to compare

@xiaosuyyds xiaosuyyds released this 08 Dec 16:36
· 6 commits to master since this release
f0cf191

本次更新是一次深度的架构重构,主要聚焦于核心组件的 模块化解耦线程安全强化 以及 API 的现代化改造

最显著的变化是将会话管理逻辑从命令系统中剥离,诞生了通用的 SessionManager;同时 QQRichText 迎来了更符合 Python 习惯的属性(Property)操作方式。

⚠️ 注意:本次更新包含多项破坏性变更(Breaking Changes),升级前请务必阅读下方说明并检查您的插件代码。

🚨 破坏性变更 (Breaking Changes)

如果您现有的插件代码中包含以下内容,升级后需要进行修改:

  1. 会话控制需显式声明 (@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(...)
  1. QQRichText 移除 set_xxx 方法 和 array 属性
    • 变更:所有消息段(Segment)子类(如 Text, At, Image 等)移除了 set_text, set_id 等旧式 Setter 方法。
      array 属性改为更明确的 seg_dict 属性,需要注意的是,seg_dict 为Segment内部字典的深拷贝,如果需要更改请使用 _seg_dict(不建议)。
    • 迁移:请直接使用属性赋值和重命名属性。
# 旧写法
msg = Text("hello")
msg.set_text("world")
print(msg.array)

# 新写法
msg = Text("hello")
msg.text = "world"  # 更简洁,且依然包含必要的处理逻辑
print(msg.seg_dict)
  1. StateManager 返回结构调整
    • 变更StateManager.get_state 返回的字典中,other_plugin_data 字段的类型由 dict 变更为 list,以支持更灵活的数据结构。

✨ 新特性 (New Features)

🧩 SessionManager (独立会话管理器)

我们将原先深度耦合在 CommandManager 中的流程控制逻辑(WaitHandler/WaitAction)完全剥离,重构为独立的 murainbot.utils.SessionManager 模块。

  • 通用性大幅提升:现在您可以在任何类型的事件处理器(不仅仅是命令)中使用 yieldWaitAction 来实现多轮对话或复杂流程控制。
  • 解耦:命令匹配器只负责匹配,流程控制由会话管理器负责。

🎮 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