Releases: mamoe/mirai
2.16.0
2.16.0-RC
mirai-core
新特性
可通过
Contact.uploadShortVideo
为好友和群上传视频消息,更多信息请查看此方法的 KDoc
超级表情是类似
菜汪
和流泪
之类的有高级动画显示的表情,可以通过对应普通表情Face.toSuperFace
转换
- 为
ANDROID_PAD
协议启用戳一戳支持 (#2771) - 添加
val MiraiProtocol.isNudgeSupported: Boolean
用于判断当前协议是否支持戳一戳 (#2771)
优化和修复
- 修复获取 QIMEI 请求的载荷参数错误 (#2749 by @zhaodice)
- 修复 Base64 工具在 Android 平台的行为与 JVM 平台不一致的问题 (#2753 by @zhaodice)
- 在升级旧版本的设备信息文件之前检查文件写权限
- 修复从可确定图片类型的 Mirai Code 构造的图片 时 type 为
UNKNOW
或与期望类型不一致 (#2760, #2761 @Hamusuta0320) - 修复在某些情况下无法收到好友消息撤回事件 (#2784)
- 优化
NormalMember.specialTitle
文档 (#2777 by @MrY-Cat) - 移除 Kotlin Native 相关的注解
- (internal) 弃用 mirai-core-api 的
jvmBase
模块,与common
模块合并 (#2772)
mirai-console
不兼容变更
新特性
- 添加强制性最终用户使用须知,将在 console 首次启动和须知内容变动时显示 (#2738)
- 现在插件可通过内置配置文件资源加载插件依赖 (#1985, #2189, #2735)
- 现在插件可依赖指定版本 console 来限制 conosle 的版本 (#1895, #2703 by @cssxsh)
优化和修复
- 优化 AutoLogin 配置文件部分注释 (#2742 by @ParaN3xus)
- 修复在控制台中当上次输入请求被取消导致输入队列阻塞的问题
- 修复 Bot 登录失败后关闭 Bot 时 console 异常退出的问题 (#2740)
- 将 console backend 的
org.slf4j.spi.SLF4JServiceProvider
移动至 console frontend base (#2443 by @cssxsh) - 在插件加载前排除 ID 相同的插件 (#2136, #2703 by @cssxsh)
- 优化
AutoLoginEvent
显示 (#2750 by @cssxsh)
CI
IDEA
- 支持 IDEA 2023.2 (#2769, #2775 by @Samarium150)
2.15.0
2.15.0 是 2.15 的稳定版本,此更新记录仅包含 2.15.0-RC 至 2.15.0 的更新。完整更新记录请查看前几个预览版本
mirai-core
不兼容变更
- (Internal) EncryptService 注册方式改为 Factory (fa389f4)
新特性
优化和修复
- 二维码登录相关修复 (#2708 by @cssxsh)
- (Internal) 当 EncryptService 可用时提示服务来源警告
- (Internal) EncryptService update
- 默认关闭登录验证时的内部日志
- 修复禁言匿名成员 (#2711 by @cssxsh, #2626, #2370)
关于包数据加密 / 签名 (Internal)(#2716)
mirai 不会内置任何第三方 签名/加密 服务,而是提供 SPI 让用户自行实现。
mirai 已经提供了外部 EncryptService SPI 供用户对接。如果您没有能力自行对接,您可以考虑到论坛寻找社区对接。
在使用社区服务前,您需要了解并理解以下内容
- 保证可信来源!
当,且仅当, 服务来源可信时,使用此服务。mirai 传递给服务的内容包括但不限于:- 所有的 Bot 登录请求(包含 Bot 的所有敏感信息(如密码,登录凭证等))
- Bot 发出去的全部消息内容
- 保护好你的网络!
据最近观察,部分相关的服务实现并没有对消息进行加密,如果您所访问的服务位于公开网络,您的数据有被窃取的风险。 - 保护好你的日志!
据最近观察,部分相关服务使用HTTP GET
请求传递数据体,当远程服务出错时,服务对接可能会直接将此次请求的连接直接输出到日志中,此日志可能包含了此次尝试 签名/加密 的内容,而此内容可能包含关键信息。
当您需要上传日志时,请记得移除相关的请求日志。
如果您无法分辨哪些请求需要被抹除时,您可以参考以下规则:- 请求连接包含大量 Hex 文本,抹除 (Hex: 由
0-9
和ABCDEF
组成的序列 ) - 请求包含大量 Base64 文本,抹除 (如您不知道什么是 Base64 文本,您可以简单当做是超长的英文与符号组合)
- 请求连接过长,抹除(如连接日志换行了三次都还没有显示完全)
- 请求连接包含大量 Hex 文本,抹除 (Hex: 由
2.15.0-RC
mirai-core
不兼容变更
- 删除 native 编译目标 (#2698)
- 弃用
DeviceInfo
构造器及 serializer, 以DeviceInfoBuilder
和DeviceInfo.serializeToString
替代 (#2674) MessageSyncEvent
的MessageSource
的targetId
由机器人 ID 变为实际的消息发送对象 (#2122, #2513)
新特性
-
现在可以在
BotAuthorization.authorize
时通过BotAuthInfo
获取导致重新登录的原因 (#2664) -
优化插件 classpath 策略 (#2666)
- 添加选项以允许插件不搜索其他插件的 classpath
- 添加选项以允许插件阻止其他未依赖此插件的插件进行引用
-
AudioToSilkService
现在稳定 (#2658) -
支持使用 JSON 保存与读取
PluginData
与PluginConfig
(#2498 by @NoMathExpectation) -
支持获取和管理群精华消息 (
Group.essences
) (#837, #2293, #2314 by @cssxsh) -
以 Android Library 形式发布 Android 编译目标 (#2635, #2699 by @MrXiaoM)
优化和修复
-
修复刷新令牌后令牌不保存的问题 (#2590, #2584)
这是一个很长时间的错误, 应该只在完全重启 mirai 或更新 bot 后才会影响
-
修复
java.lang.IllegalStateException: wLoginSigInfoField is not yet initialized
(#1603, #2449, #2450 by @sandtechnology) -
修复
OnlineAnnouncement.members
只能获取 50 个人的问题 (#2531, #2530 by @cssxsh) -
修复发送消息时实际发送的消息会忽略通过
MessagePreSendEvent
所进行的修改的问题 (#2525 by @NoMathExpectation) -
完善了用户文档部分的内容 (#2541 by @MikkoAyaka)
-
在消息日志中去除特殊控制符
-
添加
QRCodeLoginListener.onCompleted()
用于资源释放
mirai-core-mock
mirai-console
优化和修复
IDEA
新特性
- 新增一个勾选框,为用户提供是否使用阿里云镜像仓库的选项 (#2636 by @Samarium150)
- 添加 Gradle 插件的阿里云镜像仓库 (#1778, #2636 by @Samarium150)
- 支持设置
jvmTarget
(#2387, #2631 by @Samarium150) - 使插件在新建项目时创建
gradle-wrapper.properties
文件和src/test
文件夹 (#2617, #2622 by @Samarium150)
2.15.0-M1
mirai-core
不兼容变更
- 删除了旧版的为兼容 Java 生成的阻塞式方法桥
这只会导致依赖 mirai 2.1.0 (发布于 2 年前) 编译的 Java 代码现在无法使用 mirai 2.15.0-M1 及以上版本运行. 将它们使用 2.15.0-M1 及以上重新编译即可运行.
这是因为 KJBB 以前有 bug, 会生成返回值为
Unit
的方法桥. mirai 为了兼容, 一直让 KJBB 既生成返回Unit
的, 也生成返回void
的. 但自 Kotiln 编译器 1.8.0 起, 其 IR lowering 会把companion object
中的静态函数@JvmStatic
的返回值由Unit
变更为void
, 导致编译器插件 KJBB 不再能做兼容.
新特性
- 支持扫码登录 (#2502 with @StageGuard, #1281)
新的登录方法通过 BotAuthorization
& BotFactory.newBot(id: Long, authorization: BotAuthorization)
登录
关于详细的使用方法请参考 BotAuthorization
的注释
扫码登录的实现不一定稳定 (因为涉及修改了大量内部登录和维护在线逻辑), 文档也还在正在准备中.
在 2.15.0-RC 可能会修改扫码登录的 API.
mirai-console 尚未支持在命令中指定扫码登录, 但是提供了
MiraiConsole.addBot(id: Long, authorization: BotAuthorization)
用于扫码登录
优化和修复
- 更新 Kotlin 到 1.8.10, kotlinx-serialization 到 1.5.0 (#2578)
- 修复特殊情况可能无法加载 services 的问题 (#2268, #2511 by @Nambers, #2428 by @cssxsh)
例如在 Minecraft 插件中
- 增加 TxCaptchaHelper 可用性无法保证的警告 (#2564 by @MrXiaoM)
- 修正消息多态序列化, 输出的 JSON 不再包含多余的 "type" 字段 (#2414)
- 修正群公告发送失败报错
no login
(#2069, #2512 by @cssxsh) - 修正使用
Announcements.get(fid)
出现kotlinx.serialization.MissingFieldException: Field 'msg'
(#2509, #2512 by @cssxsh) - 修正短暂断网时不能成功重连 (#2488, #2504, #2505 by @sandtechnology)
- 修复
OfflineMessageSource
回复时, 引用回复的 At 变空白的问题 (#2501) - 在无法连接服务器时在报错信息中携带尝试连接的服务器 (#2576 by @cssxsh)
- 修正 dumpTlvMap 返回值不正确的问题 (内部) (#2557 by @MrXiaoM)
- 修正文档细节 (#2547 by @7aGiven)
mirai-core-mock
- 在 upload 后的 MockImage 中提供 size 属性 (#2515)
mirai-console
新特性
- JvmPlugin 以
getResource
方法获取全局资源文件 (#2536 by @ArgonarioD) - 添加新事件
StartupEvent
,AutoLoginEvent
(#2446 by @cssxsh)分别在 Console 启动完成后, 和自动登录后触发
优化和修复
2.14.0
2.13.4
2.14.0-RC
mirai-core
不兼容变更
- 删除 SwingLoginSolver (#2410)
它以前是设计给解决图形验证码, 而现在基本不会遇到图形验证码了。现在将默认使用命令行版本 LoginSolver。
以前使用 "-Dno-desktop" 可以禁用 SwingLoginSolver,现在这个选项将没有效果,不会报错。
- 现在使用 RemoteFile 将会得到编译错误
RemoteFile 早在 2.8 就弃用了, 使用时会得到警告. 现在起使用将会得到编译错误.
新特性
- 群聊获取历史消息 (
Group
实现RoamingSupported
) (#1866, #2332 by @StageGuard )
可使用
group.roamingMessages
/group.getRoamingMessages()
类型名称为
RockPaperScissors
类型名称为
SignEvent
优化和修复
- 修复无法登录的问题 (#2433 by @sandtechnology )
此修复也会在 2.13.4 包含
不清除会导致登录失败等问题
- 修复 iOS 无法查看私聊转发消息的问题 (#1575)
- 修复转发消息存在特殊字符时无法加载的问题 (#2241)
- 修正
contentToString()
注释不严谨处 (#2373, #2374 by @MrXiaoM ) - 修正 PokeMessage.id (#2170)
- 修复 QuoteReply 无法引用 bot 发出的 ForwardMessage (#2342)
- 修改日志等级的颜色 (#2336)
现在 WARN 是金黄色,而不是红色
mirai-core-mock
优化和修复
- 避免 MockAbsoluteFile.md5/sha1 可能为空 (#2436 by @Nambers )
- 修复部分信息撤回逻辑不正确的错误 (#2421 by @Nambers )
- 修复
MockNormalMember.modiyAdmin()
逻辑错误 (#2420 by @Nambers ) - 修复 uploadMockImage 上传相同文件时触发 java.nio.file.FileAlreadyExistsException (#2401)
- 引入 AvatarGenerator
- 修复联系人头像等信息更新同步的问题
mirai-console
新特性
优化和修复
- 修复
JvmPlugin.onDisable
被多次执行的错误 (#2015, #2397) - 修复低版本 Android 系统报错
java.lang.NoSuchMethodError: No virtual method getDeclaredAnnotation(Ljava/lang/Class;)L
(#2354 by @zhaodice) - 在命令的报错中去除不必要的
InvocationTargetException
包装 (#2258 by @cssxsh ) - 优化 MiraiLogger (在 mirai-console) 性能 (#2341)
- SLF4J 支持 (#2341)
IDEA
- 支持 2022.3 (#2372)
- 新插件版本号为
223-2.14.0-172-1
- 新版本只支持 2022.3 + Kotlin 1.7.20 (因为 2022.3 捆绑 1.7.20)
- 新插件版本号为
关于 mirai-console SLF4J 支持 (#2341)
配置文件修改
修改均为默认配置, 先前已经生成的配置不会进行修改
Logger.yml
# 默认日志输出等级
# 可选值: ALL, VERBOSE, DEBUG, INFO, WARNING, ERROR, NONE
defaultPriority: INFO
# 特定日志记录器输出等级
loggers:
example.logger: NONE
console.debug: NONE
Bot: ALL
+ org.eclipse.aether.internal: INFO
+ org.apache.http.wire: INFO
+# 是否启动外部日志框架桥接
+binding:
+ slf4j: true
ABI 变更
注: 实际上 console 没有直接的 ABI 变更
依赖更新: org.slf4j:slf4j-api:1.7.32
-> 2.0.3
此依赖的更新只会影响 slf4j-api
的对接, 并不会影响 slf4j-api
的单纯使用
即不会对插件有任何影响, 只会对部分对 console 进行高度自定义的会有少许影响
其他 API 变更
- mirai-logging-log4j2 现在使用
org.apache.logging.log4j:log4j-slf4j2-impl
- mirai-logging-slf4j-logback 现在使用 1.3.4
- mirai-core-all 现在携带的是 slf4j 2.0.x
新年快乐! 🎆🎉