v2.12.0-RC
版本发布时间: 2022-06-18 21:36:29
mamoe/mirai最新发布版本:v2.16.0(2023-10-22 14:43:15)
2.12 带来以下主要更新:
-
EventChannel
到协程Flow
的对接; - 消息链性能优化;
- 针对开发易用性的优化;
- 对调试插件的更好支持;
- 大量文档更新;
- 以及一些问题修复。
mirai-core
不兼容变更
-
弃用
EmptyMessageChain
,以emptyMessageChain()
函数替换 (#1997)因为内部结构有变更,见下文。Java 可以
MessageUtils.emptyMessageChain()
替换。 -
MarketFace.contentToString
现在在原本会返回空字符串的情况下会返回"[商城表情]"
(#2030 by @cssxsh)原本会返回空字符串是因为服务器提供的表情名称可能为空。
-
修复
FileMessage
的序列化名称 (#2041 by @cssxsh)以前错误地使用了
Image
,现在改为FileMessage
。以前序列化的FileMessage
可能会无法反序列化。 -
Image.equals
现在会比较全部属性而不是只比较
imageId
。因为现在图片没有一些详细属性时可能无法发送。 -
弃用
EventDisabled
属性 (#1911)它可以关闭事件功能,但这并不是明智的做法。
-
弃用
GroupEntranceAnnouncementChangeEvent
(#1873)这个事件在 2.7 增加
Announcements
时就已经无效了。
新特性
- 优化
MessageChain
实现的性能,现在在大量调用Message.plus
构造消息链也能获得与MessageChainBuilder
相当的性能。(#1997)只修改了内部实现,API 及行为都没有变化。
- 优化处理合并转发消息的效率
- 新增
EventChannel.asFlow
获得事件通道的Flow<...>
(#1911)协程
Flow
很适合承载事件广播功能,拥有更高的通用性和扩展性。(mirai 未使用是因为在 miraiEventChannel
设计之时Flow
还未稳定) - 新增 Java 友好的
EventChannel.exceptionHandler()
(#1953) - 新增
BotConfiguration.disableAccountSecretes
关闭account.secrets
account.secrets 保存账号的会话信息。 它可加速登录过程,也可能可以减少出现验证码的次数。如果遇到一段时间后无法接收消息通知等同步问题时可尝试禁用。
优化和修复
消息
-
部分的消息类型的
toString
将包含更多属性,涉及:-
Image
现在图片没有一些详细属性时可能无法发送,因此属性也与 imageId 一样重要。更多的信息将帮助调试。
-
MessageSource
-
QuoteReply
-
FileMessage
-
-
重写消息协议层与发送消息流程 (#1997)
可扩展,易于测试,为将来支持频道和模块化等做准备。这不会影响现有的功能。
-
为
ForwardMessage.BuilderNode
实现toString
事件
- 优化
EventChannel
事件异常处理机制 (#1911)现在广播方不会收到来自监听方的事件,监听方有全部责任处理自己的异常,未处理的异常会通过默认日志输出。
- 优化
nextEvent
和syncFromEvent
:- 完善文档
- 在遇到异常时正确停止监听器
- 针对异常处理机制完善事件相关文档:
Event
、EventChannel
、Listener
- 增加事件追踪日志,可由
-Dmirai.event.trace=true
启用这将会在遇到异常时输出注册事件监听器时的 stacktrace,以及记录每一个事件的广播。
- 修复官方 macOS 客户端发送给机器人的图片后缀均为
.mirai
的问题 (#1111)
其他
- 更新开发文档索引
现在在开发介绍文档中能访问 mirai-console 相关文档,在《准备工作》中也能了解启动 console 的方式。
- 为
Bot.close
的自动登出增加超时
mirai-console
新特性
- 新增
CommandContext
,支持在指令中获得原消息链 (#2099)三种内置指令
RawCommand
、SimpleCommand
和CompositeCommand
的 Kotlin 以及 Java 版(J
前缀)都支持。参考文档。 能获得原消息链也就能获得MessageMetadata
(#1835)。 - 支持在
JSimpleCommand
和JCompositeCommand
修改CommandArgumentContext
参考文档。
- 增加
PluginCustomCommandSender
可供插件实现CommandSender
(#1964) - 新增
MiraiConsole.shutdown
来优雅地关闭 Console (#1959, #2016)- 修复收到 SIGINT Console 不退出的问题 (#2042)
- 关闭时有一分钟限时,超时后强制结束
优雅指的是会禁用插件,依次停止各种服务并保存数据。
- 在加载配置和数据文件失败时自动备份原文件 (#2089 by @cssxsh)
- 当插件加载失败时标记其为加载失败而不关闭 Console (#2022 by @Nambers)
当有插件依赖这个失败的插件时,也会禁用相关插件。 实际上该功能可由前端选择是否开启。mirai 官方的终端前端以及 Mirai Android 都会启用该功能。
- 相反于加载顺序卸载插件 (#1994)
若 A 依赖 B,现在会先卸载 A 再卸载 B。
优化和修复
插件
- 修复插件无法使用更高版本的 Ktor 等 mirai-core 也使用的依赖的问题 (#2051)
现在可以使用 Ktor 2.0
- 修复插件在引用了相同的库时,在某些的情况下会产生冲突的问题 (#2054)
- 修复在插件配置的路径中使用子路径出现的异常的问题 (#2088 by @MrXiaoM)
- 现在
PluginManager.getPluginDescription
不再需要插件已被加载 (#2052)这可能帮助实现
PluginLoader
。
文档
- 增加关于使用日志的文档 (#2003)
- 重写指令文档
- 优化事件文档
警告在插件中使用
GlobalEventChannel
的危险性。 - 优化文档细节 (#2078 by @xtyuns, #2067 by @CauchyDOOM, #2095 by @Hugozys)
mirai-console-gradle
新特性
- 新增任务
runConsole
启动模拟Mirai Console
实例 (#2056, #2058)解决了在 IDEA 直接运行 RunTerminal 时出现
NoClassDefError
等错误的问题 (#2055)。现在在 IDEA 新生成的项目可以选择 Mirai 文件夹中的Run Mirai Console
来启动测试。详见 文档。
优化和修复
- 修复
shadowLink
打包的依赖在其他依赖也引用时无效的问题 (#2070)