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
未使用是因为在
mirai EventChannel 设计之时 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)Bot.close 的自动登出增加超时CommandContext,支持在指令中获得原消息链 (#2099)
> 三种内置指令 RawCommand、SimpleCommand 和 CompositeCommand 的
Kotlin 以及
Java 版(J 前缀)都支持。参考文档。
> 能获得原消息链也就能获得 MessageMetadata (#1835)。JSimpleCommand 和 JCompositeCommand
修改 CommandArgumentContext
> 参考文档。PluginCustomCommandSender 可供插件实现 CommandSender (#1964)MiraiConsole.shutdown 来*优雅*地关闭 Console (#1959, #2016)
PluginManager.getPluginDescription 不再需要插件已被加载 (#2052)
> 这可能帮助实现 PluginLoader。GlobalEventChannel 的危险性。runConsole 启动模拟 Mirai Console 实例 (#2056, #2058)
> 解决了在 IDEA 直接运行 RunTerminal 时出现 NoClassDefError
等错误的问题 (#2055)。现在在
IDEA 新生成的项目可以选择 Mirai 文件夹中的 Run Mirai Console
来启动测试。详见 文档。shadowLink 打包的依赖在其他依赖也引用时无效的问题 (#2070)