Releases: MuRainBot/MuRainBot2
v0.4.1
What's Changed
- fix(QQRichText): 🪲️解决新版QQRichText一些边缘情况的兼容性,并将版本号提升至0.4.1 by @xiaosuyyds in #79
Full Changelog: v0.4.0...v0.4.1
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
v0.3.1
🚨 Hotfix: 修复 CommandManager.run_command 多级参数解析报错的严重问题,建议立即更新。
What's Changed
- Hotfix command bug by @xiaosuyyds in #76
Full Changelog: v0.3.0...v0.3.1
v0.3.0
本次更新为框架带来了多个核心新功能和架构级改进,极大地提升了功能上限和稳定性。
🚀 全新核心功能
-
[核心] 引入插件会话等待机制 (
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
What's Changed
- 合并Dev: 优化download_file_to_cache函数,为事件添加一些方便的属性方法,修复一些问题 by @xiaosuyyds in #74
Full Changelog: v0.1.2...v0.2.0
v0.1.2
What's Changed
- 合并Dev: 修复 CommandManager 中的命令匹配逻辑,优化QQRichText解析流程 by @xiaosuyyds in #73
Full Changelog: v0.1.1...v0.1.2
v0.1.1
v0.1.0
What's Changed
- feat(utils): 重构 Logger 模块并添加富文本日志功能 by @xiaosuyyds in #71
Full Changelog: v0.0.1...v0.1.0
v0.0.1
第一个发行版,可能有一些问题,欢迎各位反馈
v0.0.1.dev2
修复murainbot cli init时不带默认插件的问题