高效率 QQ 机器人支持库
ShortVideo
支持 (#867, #1664, #2011, #2621, #2739)可通过
Contact.uploadShortVideo
为好友和群上传视频消息,更多信息请查看此方法的 KDoc
SuperFace
支持 (#2621, #2722 by @cssxsh)超级表情是类似
菜汪
和流泪
之类的有高级动画显示的表情,可以通过对应普通表情Face.toSuperFace
转换
ANDROID_PAD
协议启用戳一戳支持 (#2771)val MiraiProtocol.isNudgeSupported: Boolean
用于判断当前协议是否支持戳一戳 (#2771)UNKNOW
或与期望类型不一致 (#2760, #2761 @Hamusuta0320)NormalMember.specialTitle
文档 (#2777 by @MrY-Cat)jvmBase
模块,与 common
模块合并 (#2772)PermitteeId.hasChild
,改为 PermitteeId.isChildOf
(#2762 by @cssxsh)org.slf4j.spi.SLF4JServiceProvider
移动至 console frontend base (#2443 by @cssxsh)AutoLoginEvent
显示 (#2750 by @cssxsh)2.15.0 是 2.15 的稳定版本,此更新记录仅包含 2.15.0-RC 至 2.15.0 的更新。完整更新记录请查看前几个预览版本
val MiraiProtocol.isQRLoginSupported: Boolean
(#2726, #2642)mirai 不会内置任何第三方 签名/加密 服务,而是提供 SPI 让用户自行实现。 mirai 已经提供了外部 EncryptService SPI 供用户对接。如果您没有能力自行对接,您可以考虑到论坛寻找社区对接。
在使用社区服务前,您需要了解并理解以下内容
HTTP GET
请求传递数据体,当远程服务出错时,服务对接可能会直接将此次请求的连接直接输出到日志中,此日志可能包含了此次尝试 签名/加密 的内容,而此内容可能包含关键信息。
当您需要上传日志时,请记得移除相关的请求日志。
如果您无法分辨哪些请求需要被抹除时,您可以参考以下规则:
0-9
和 ABCDEF
组成的序列 )DeviceInfo
构造器及 serializer, 以 DeviceInfoBuilder
和 DeviceInfo.serializeToString
替代 (#2674)MessageSyncEvent
的 MessageSource
的 targetId
由机器人 ID 变为实际的消息发送对象 (#2122, #2513)更新登录协议 (#2613, #2592)
现在可以在 BotAuthorization.authorize
时通过 BotAuthInfo
获取导致重新登录的原因 (#2664)
优化插件 classpath 策略 (#2666)
AudioToSilkService
现在稳定 (#2658)
支持使用 JSON 保存与读取 PluginData
与 PluginConfig
(#2498 by @NoMathExpectation)
支持获取和管理群精华消息 (Group.essences
) (#837, #2293, #2314 by @cssxsh)
以 Android Library 形式发布 Android 编译目标 (#2635, #2699 by @MrXiaoM)
修复扫码登录的已知问题 (无法进入登录验证等) (#2623, #2645, #2633 with @cssxsh)
修复刷新令牌后令牌不保存的问题 (#2590, #2584)
这是一个很长时间的错误, 应该只在完全重启 mirai 或更新 bot 后才会影响
修复 java.lang.IllegalStateException: wLoginSigInfoField is not yet initialized
(#1603, #2449, #2450 by @sandtechnology)
修复获取群活跃数据失败的问题 (#2609, #2610 by @cssxsh)
修复部分合并转发消息仅被作为APP消息接收的问题 (#2618, #2675)
修复 MessageSource
定位相关逻辑: (#2510, #2513)
修复获取群精华消息报错 (#2668, #2672 by @cssxsh)
修复群公告协议 (#2619 by @cssxsh)
修复 OnlineAnnouncement.members
只能获取 50 个人的问题 (#2531, #2530 by @cssxsh)
修复发送消息时实际发送的消息会忽略通过 MessagePreSendEvent
所进行的修改的问题 (#2525 by @NoMathExpectation)
优化文档 (#2639 by @cssxsh)
完善了用户文档部分的内容 (#2541 by @MikkoAyaka)
在文档注释手表协议不支持戳一戳事件 (#2572 by @7aGiven)
在消息日志中去除特殊控制符
添加 QRCodeLoginListener.onCompleted()
用于资源释放
Image.isUploaded
(#2582 by @Nambers)mockHonorMember
(#2473 by @Nambers)AutoLoginEvent
与 StartupEvent
的描述 (#2692 by @BakaFT)jvmTarget
(#2387, #2631 by @Samarium150)gradle-wrapper.properties
文件和 src/test
文件夹 (#2617, #2622 by @Samarium150)这只会导致依赖 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 不再能做兼容.
新的登录方法通过 BotAuthorization
& BotFactory.newBot(id: Long, authorization: BotAuthorization)
登录
关于详细的使用方法请参考 BotAuthorization
的注释
扫码登录的实现不一定稳定 (因为涉及修改了大量内部登录和维护在线逻辑), 文档也还在正在准备中.
在 2.15.0-RC 可能会修改扫码登录的 API.
mirai-console 尚未支持在命令中指定扫码登录, 但是提供了
MiraiConsole.addBot(id: Long, authorization: BotAuthorization)
用于扫码登录
例如在 Minecraft 插件中
no login
(#2069, #2512 by @cssxsh)Announcements.get(fid)
出现 kotlinx.serialization.MissingFieldException: Field 'msg'
(#2509, #2512 by @cssxsh)OfflineMessageSource
回复时, 引用回复的 At 变空白的问题 (#2501)getResource
方法获取全局资源文件 (#2536 by @ArgonarioD)StartupEvent
, AutoLoginEvent
(#2446 by @cssxsh)
分别在 Console 启动完成后, 和自动登录后触发
2.14.0 的稳定版本,相比 2.14.0-RC 没有更新。
它以前是设计给解决图形验证码, 而现在基本不会遇到图形验证码了。现在将默认使用命令行版本 LoginSolver。 以前使用 "-Dno-desktop" 可以禁用 SwingLoginSolver,现在这个选项将没有效果,不会报错。
RemoteFile 早在 2.8 就弃用了, 使用时会得到警告. 现在起使用将会得到编译错误.
Group
实现 RoamingSupported
) (#1866, #2332 by @StageGuard )可使用
group.roamingMessages
/group.getRoamingMessages()
类型名称为
RockPaperScissors
类型名称为
SignEvent
Announcement
现在可以获取 已确认/未确认 的群成员 (#2255 by @cssxsh )此修复也会在 2.13.4 包含
不清除会导致登录失败等问题
contentToString()
注释不严谨处 (#2373, #2374 by @MrXiaoM )现在 WARN 是金黄色,而不是红色
MockNormalMember.modiyAdmin()
逻辑错误 (#2420 by @Nambers )JvmPlugin.onDisable
被多次执行的错误 (#2015, #2397)java.lang.NoSuchMethodError: No virtual method getDeclaredAnnotation(Ljava/lang/Class;)L
(#2354 by @zhaodice)InvocationTargetException
包装 (#2258 by @cssxsh )
- 新插件版本号为
223-2.14.0-172-1
- 新版本只支持 2022.3 + Kotlin 1.7.20 (因为 2022.3 捆绑 1.7.20)
修改均为默认配置, 先前已经生成的配置不会进行修改
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
注: 实际上 console 没有直接的 ABI 变更
依赖更新: org.slf4j:slf4j-api:1.7.32
-> 2.0.3
此依赖的更新只会影响 slf4j-api
的对接, 并不会影响 slf4j-api
的单纯使用
即不会对插件有任何影响, 只会对部分对 console 进行高度自定义的会有少许影响
org.apache.logging.log4j:log4j-slf4j2-impl
新年快乐! 🎆🎉