Releases: mamoe/mirai
2.13.1
2.13.0
2.13.0 包含对 2.13 前几个预览版本的修复和一些优化
mirai-core
优化和修复
- 修复使用
ANDROID_PHONE
登录时提示 "当前QQ版本过低,请升级至最新版本后再登录。" 的问题 (#2298, #2312 by @cssxsh)已知
ANDROID_WATCH
可能仍然无法登录 - 修复在 Android 平台遇到 "Duplicate class" 的问题 (#2291)
此问题由 2.13.O-M1 引入, 在 2.13.0-RC 尝试过修复但没有成功解决. 本次修复已被验证可用.
- 为 2.13.0-RC 弃用的
LoginSolver.onSolveUnsafeDeviceLoginVerify
增加了默认实现所以在实现
LoginSolver
就不需要覆盖这个已经被弃用的方法了. 请覆盖新增的支持短信验证的onSolveDeviceVerification
替代. - 优化一些潜在的内存泄露问题
如果你好奇, commit 为 81a09549. 实际上它只会在很少的情况下有影响.
- 优化了在发送消息失败时的堆栈信息
- 优化了与群文件相关的源码内文档
在
Group
类增加了引导等
mirai-console
新特性
- 在自动登录时展示正在使用的协议类型和心跳策略 (#2304 by @cssxsh)
- 增加了 Maven Central 仓库 https://repo1.maven.org/maven2 作为备用解决插件依赖的仓库
因为阿里云代理不太稳定. 目前仍然优先尝试速度更快的阿里云代理, 在失败时会使用 Central 仓库.
优化和修复
- 插件如果没有显式指定 Ktor 依赖, 则为其使用 Ktor 1.6.7 (#2297)
以解决在 2.13 以前编译的插件的兼容性问题
- 修复在启动过程中调整窗口大小导致报错
kotlin.UninitializedPropertyAccessException
的问题 (#2317)此问题非 2.13 引入
mirai-core-mock
不兼容变更
- 为
broadcastMsgSyncEvent
增加了OtherClient
参数不兼容旧版 (2.13.0-RC, 2.13.0-RC2) 代码
2.13.0-RC2
2.13.0-RC2 包含对 2.13 的补充和对 2.13.0-RC 的修复.
mirai-core
优化和修复
- 修复无法加载 2.9.0 以前版本生成的设备信息的问题 (#2280)
- 修复因好友分组列表加载失败而造成好友列表加载失败的问题 (#2274)
- 修复网络断开时无法重连的错误
- 修复重连后
Invalid number format: 'msfwifi'
导致的立刻断开连接 - 修复
Bot.close
时出现StackOverflowError
的问题 (#2266) - 修复非 snapshots 版本无法在 MPP 项目依赖的问题 (
Could not resolve net.mamoe:mirai-core-api:2.13.0-RC
) (#2270) - 修复使用 HTTP API 相关功能报错
java.lang.NoClassDefFoundError: okhttp3/Request$Builder
的问题 (#2263) - 修复获取群语音下载链接失败的问题 (#2269)
此问题非 2.13 引入
- 在使用不支持滑动验证的验证码处理器的错误中附带所使用的验证器的具体信息
mirai-core-mock
优化和修复
- 修复在模拟环境时的信息序列化相关问题
2.13.0-RC
2.13.0-RC 包含:
- 支持使用短信验证码进行设备锁验证
- 支持查看和修改好友分组
- 支持查询和修改群员头衔等活跃数据
- Core 模拟测试框架
- Console 下载进度条
- 一些问题修复
mirai-core
不兼容变更
mirai-core-api
去除了对kotlinx-coroutines-jdk8
的依赖.
新特性
- 支持使用短信验证码进行设备锁验证 (#717, #2109, #2216)
nextEvent
和nextEventOrNull
新增intercept
参数, 可在满足条件时拦截事件 (#1668, #2177 by @Nambers)- 支持查看和修改好友分组 (#1390, #1243, #2113 by @Nambers)
好友分组定名为
FriendGroup
.- 新增
Friend.friendGroup
获取该好友所属分组. - 新增
Bot.friendGroups
获取好友分组列表并操作分组.
- 新增
- 支持查询和修改群员头衔等活跃数据 (#2204, #2086, #2115 by @cssxsh)
- 新增
Group.active
获取群的活跃数据. - 新增
Member.active
获取该成员的活跃数据.
- 新增
- 新增
AbstractExternalResource.input
的默认实现在实现自定义
ExternalResource
时可能有帮助
优化和修复
- 更新
ANDROID_WATCH
和MACOS
的协议信息 (#2228 by @cssxsh) - 修复网络层的异常处理流程, 优化重连逻辑
- 优化由网络层抛出的异常的堆栈信息
现在不再有循环引用, 而且更简洁
CancellationException
将会被替换为真实原因 - 修复在 Android 上遇到 'Duplicate class' 的问题 (#2248)
- 修复合并转发内容中用户昵称错误的问题 (#2187)
此修复也包含在 2.12.3
- 优化各平台的 ECDH 实现 (#2161 by @AdoptOSS)
- 修复使用静态序列化器时无法编译的问题 (#2230)
自 2.13.0-M1
- 在发送群公告失败时抛出有正确信息的异常而不是序列化错误 (#2069)
- 修复日志中无法获得调试信息的问题 (#2097)
- 提升一些已弃用的 API 的弃用等级 (#2213)
mirai-console
新特性
- 在下载时展示进度条 (#2133, #2140)
也公开了进度条 API 供插件使用. 见
MiraiConsole.newProcessProgress()
. - 在
/login
登录时使用可用的自动登录配置 (#2209 by @cssxsh) - 增加了 Console 前端实现的基础模块
mirai-console-frontend-base
优化和修复
- 优化文档细节 (#2207)
- 优化日志系统 (#2196)
- Console 现在总是使用 core 的
MiraiLogger.Factory
API 创建日志 - 禁止插件修改日志系统
- 允许通过 classpath 修改日志系统
- 在保存日志到文件时不包含颜色符号 (#2218)
- Console 现在总是使用 core 的
- 在欢迎时打印 Mirai Console 字符画
以帮助区分 mirai-console 和 mirai-console-loader
mirai-core-mock
新增 Core 模拟测试框架 mirai-core-mock
. 版本号与 mirai-core
相同. 相关文档 (#1304, #1521)
使用模拟测试框架可以构造虚拟 Bot, 模拟收到各种事件.
IDEA
2.12.3
2.13.0-M1
2.13.0-M1 包含:
- Core 新的 native 编译目标
- 支持修改好友备注
- Console 指令参数支持 vararg 和原生类型数组
- 大量贡献相关文档更新
- 一些问题修复
以下内容正在进行中, 将发布在 2.13.0-RC:
- Core 模拟测试框架
- 支持查看和修改好友分组
- Console 下载进度条
mirai-core
不兼容变更
-
将 Ktor 嵌入 mirai-core 并且不公开 (#2096, #2084)
mirai 内部现在使用 Ktor 2.0 并且不公开.
所有曾经借由 mirai-core-api 获得 Ktor 依赖的用户都将需要显式定义 Ktor 依赖.
但是这将会解决版本兼容问题. 用户可以任选 Ktor 1 或者 Ktor 2 -
Audio
现在继承ConstrainSingle
(#2093)所以它将会只能单独作为内容存在于消息链中
这不会影响现在以正确逻辑编写的代码, 但可能影响一些边界情况
新特性
-
mirai-core 新增 native 编译目标, 可编译为动态链接库或可执行文件 (#2048)
native 编译目标是 Kotlin/Native, 不依赖 JVM. 支持 macOS, Windows, Linux.
目前只可以使用 Kotlin/Native 开发. C API 的导出正计划中.特别感谢 @AdoptOSS 的帮助:
-
friend.remark
由val
变为var
, 修改时会触发FriendRemarkChangeEvent
. -
在
Image
序列化时支持全部属性 (#2036 by @cssxsh)以前只会输出
imageId
, 现在还会输出width
等全部必要属性. 兼容旧版本, 在读取时会使用默认0
值.
优化和修复
- 重写并检查了消息序列化的正确性 (#2159)
它现在完全支持全平台.
修复了一些元素的序列化可能有不期望行为的问题, 例如在不应该有type
(classDiscriminator
) 的时候有或相反.
正确支持并验证了@Contextual
.这可能导致新的问题, 建议在试用本测试版时测试是否还能正常工作并及时反馈问题以避免正式版本仍有问题
- 修复合并转发消息在 iOS 移动端显示错位的问题 (#2071)
- 更新贡献相关文档, 包括
- mirai 项目组成
- 构建多平台的 Core
- 构建其他 JVM 项目
- 基于新架构实现新消息协议支持
- 优化文档细节 (#2182 @2938137849)
- 更新依赖
- Kotlin 1.7.10
- kotlinx-serialization 1.3.3
- kotlinx-coroutines 1.6.4
- kotlinx-atomicfu 0.17.3
- Ktor 2.1.0
mirai-console
不兼容变更
- 新增
CommandSenderOnMessage
, 修正CommandSender
的部分扩展的行为 (#2105)
新特性
2.12.2
2.12.1
2.12.0
2.12.0-RC
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)