ci-release-helper/changelogs/2.12.0-RC.md
2.12 带来以下主要更新:
EventChannel 到协程 Flow 的对接;弃用 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还未稳定)
EventChannel.exceptionHandler() (#1953)BotConfiguration.disableAccountSecretes 关闭 account.secrets
account.secrets 保存账号的会话信息。 它可加速登录过程,也可能可以减少出现验证码的次数。如果遇到一段时间后无法接收消息通知等同步问题时可尝试禁用。
部分的消息类型的 toString 将包含更多属性,涉及:
Image
现在图片没有一些详细属性时可能无法发送,因此属性也与 imageId 一样重要。更多的信息将帮助调试。
MessageSourceQuoteReplyFileMessageImage.toString 现在将包含全部属性
重写消息协议层与发送消息流程 (#1997)
可扩展,易于测试,为将来支持频道和模块化等做准备。这不会影响现有的功能。
为 ForwardMessage.BuilderNode 实现 toString
EventChannel 事件异常处理机制 (#1911)
现在广播方不会收到来自监听方的事件,监听方有全部责任处理自己的异常,未处理的异常会通过默认日志输出。
nextEvent 和 syncFromEvent:
Event、EventChannel、Listener-Dmirai.event.trace=true 启用
这将会在遇到异常时输出注册事件监听器时的 stacktrace,以及记录每一个事件的广播。
.mirai 的问题 (
#1111)现在在开发介绍文档中能访问 mirai-console 相关文档,在《准备工作》中也能了解启动 console 的方式。
Bot.close 的自动登出增加超时CommandContext,支持在指令中获得原消息链 (#2099)
三种内置指令
RawCommand、SimpleCommand和CompositeCommand的 Kotlin 以及 Java 版(J前缀)都支持。参考文档。 能获得原消息链也就能获得MessageMetadata(#1835)。
JSimpleCommand 和 JCompositeCommand
修改 CommandArgumentContext
参考文档。
PluginCustomCommandSender 可供插件实现 CommandSender (#1964)MiraiConsole.shutdown 来优雅地关闭 Console (#1959, #2016)
优雅指的是会禁用插件,依次停止各种服务并保存数据。
当有插件依赖这个失败的插件时,也会禁用相关插件。 实际上该功能可由前端选择是否开启。mirai 官方的终端前端以及 Mirai Android 都会启用该功能。
若 A 依赖 B,现在会先卸载 A 再卸载 B。
现在可以使用 Ktor 2.0
PluginManager.getPluginDescription 不再需要插件已被加载 (#2052)
这可能帮助实现
PluginLoader。
警告在插件中使用
GlobalEventChannel的危险性。
runConsole 启动模拟 Mirai Console 实例 (#2056, #2058)
解决了在 IDEA 直接运行 RunTerminal 时出现
NoClassDefError等错误的问题 (#2055)。现在在 IDEA 新生成的项目可以选择 Mirai 文件夹中的Run Mirai Console来启动测试。详见 文档。
shadowLink 打包的依赖在其他依赖也引用时无效的问题 (#2070)