Skip to content

Releases: MuRainBot/MuRainBot2

v0.4.1

08 Dec 17:11
8f346e5

Choose a tag to compare

What's Changed

  • fix(QQRichText): 🪲️解决新版QQRichText一些边缘情况的兼容性,并将版本号提升至0.4.1 by @xiaosuyyds in #79

Full Changelog: v0.4.0...v0.4.1

v0.4.0

08 Dec 16:36
f0cf191

Choose a tag to compare

本次更新是一次深度的架构重构,主要聚焦于核心组件的 模块化解耦线程安全强化 以及 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

v0.3.1

10 Aug 04:02
8d7c83c

Choose a tag to compare

🚨 Hotfix: 修复 CommandManager.run_command 多级参数解析报错的严重问题,建议立即更新。

What's Changed

Full Changelog: v0.3.0...v0.3.1

v0.3.0

07 Aug 10:45
793d334

Choose a tag to compare

本次更新为框架带来了多个核心新功能和架构级改进,极大地提升了功能上限和稳定性。

🚀 全新核心功能

  • [核心] 引入插件会话等待机制 (CommandManager):

    • 首次引入了基于 generator 的会话等待功能。插件现在可以通过 yield WaitAction 来暂停执行并等待特定事件(如用户的下一条命令),从而实现复杂的多步交互流程。
    • 内置了 WaitCommand 用于等待命令,并提供了可扩展的 WaitAction 基类供开发者自定义等待逻辑。
    • 会话恢复逻辑通过 @async_task 在独立线程中执行,确保了框架主事件流的非阻塞。
  • [核心] 引入中央定时器管理器 (TimerManager):

    • 新增 TimerManager 模块,提供统一、高效、线程安全的 delay 接口,用于调度所有延迟和周期性任务。
    • 原有的 AutoRestartOnebot 心跳检查和 QQDataCacher 垃圾回收已全部迁移至此模块管理,统一了框架内的异步任务调度。
  • [核心] 引入路径延迟初始化 (murainbot.paths):

    • 新增 PathManagerProxy 代理类,实现了路径对象的按需、延迟初始化。这解决了在框架未完全启动前导入 paths 模块可能导致的问题,极大增强了模块的健壮性和独立性。

✨ 功能增强与开发者体验

  • 事件系统 (EventClassifier): 为 MessageEvent, GroupIncreaseEvent 等数十个事件添加了方便的布尔属性 (.is_group, .is_at_me(), .is_from_admin, .was_invited 等),显著简化了插件中的条件判断逻辑。
  • 下载工具 (common.download_file_to_cache): 功能大幅增强,增加了对文件大小的限制、请求超时、路径穿越安全检查,并优化了流式下载逻辑。
  • 日志系统: 改进了多个关键路径的异常处理和日志记录,现在能更精确地定位到出错的处理器函数和模块。

🛠️ 其他改进

  • 构建系统 (setup.py): 优化了打包逻辑,现在会根据白名单精确复制默认插件,而非整个文件夹。
  • 代码忽略 (.gitignore): 全面更新了 .gitignore 文件,使其更加符合现代Python项目的标准。
  • 启动逻辑 (main.py): 调整了入口文件,使工作目录的传递方式更加清晰可靠。

What's Changed

  • 合并Dev:实现会话等待功能,允许通过yield的方式等待自定义内容,发生后再恢复执行的功能,实现TimerManager,统一简单的定时任务,减少开销 by @xiaosuyyds in #75

Full Changelog: v0.2.0...v0.3.0

v0.2.0

12 Jul 15:45
3cb9075

Choose a tag to compare

What's Changed

  • 合并Dev: 优化download_file_to_cache函数,为事件添加一些方便的属性方法,修复一些问题 by @xiaosuyyds in #74

Full Changelog: v0.1.2...v0.2.0

v0.1.2

09 Jul 05:26
5ee5d70

Choose a tag to compare

What's Changed

  • 合并Dev: 修复 CommandManager 中的命令匹配逻辑,优化QQRichText解析流程 by @xiaosuyyds in #73

Full Changelog: v0.1.1...v0.1.2

v0.1.1

06 Jul 04:13
b3fa3b2

Choose a tag to compare

What's Changed

  • 合并Dev分支:修复长文本日志可能会被省略的问题 by @xiaosuyyds in #72

Full Changelog: v0.1.0...v0.1.1

v0.1.0

06 Jul 03:23
f1277ae

Choose a tag to compare

What's Changed

  • feat(utils): 重构 Logger 模块并添加富文本日志功能 by @xiaosuyyds in #71

Full Changelog: v0.0.1...v0.1.0

v0.0.1

06 Jul 01:43
8998cac

Choose a tag to compare

第一个发行版,可能有一些问题,欢迎各位反馈

v0.0.1.dev2

29 Jun 10:01

Choose a tag to compare

v0.0.1.dev2 Pre-release
Pre-release

修复murainbot cli init时不带默认插件的问题