Bot releases are visible (Hide)
感谢大家四年以来对 mirai 的支持。阳光穿过秋天的枫叶,留下一张张独特的风景,如此灿烂,如此艳丽。
ShortVideo
文档ShortVideo
的内部日志plugin.yml
加载时无法加载的问题 (#2791 by @cssxsh)Published by StageGuard about 1 year ago
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)Published by Karlatemp over 1 year ago
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
组成的序列 )Published by Him188 over 1 year ago
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)Published by Karlatemp over 1 year ago
这只会导致依赖 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 启动完成后, 和自动登录后触发
Published by Karlatemp over 1 year ago
2.14.0 的稳定版本,相比 2.14.0-RC 没有更新。
Published by Him188 over 1 year ago
此修复也在 2.14.0-RC 包含
Published by Karlatemp almost 2 years ago
它以前是设计给解决图形验证码, 而现在基本不会遇到图形验证码了。现在将默认使用命令行版本 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
新年快乐! 🎆🎉
Published by Him188 almost 2 years ago
DecryptionFailedException
的问题 (#2167, #2419 by @sandtechnology)ANDROID_PHONE
或 ANDROID_PAD
登录时出现错误 "版本过低" 的问题 (#2405, #2423 by @sandtechnology)friendGroupId
增加默认值 0
, 以兼容旧缓存 (#2403 by @cssxsh)Published by Him188 almost 2 years ago
java.lang.NoSuchMethodError
的问题 (#2381)
自 2.13.0
Published by Karlatemp almost 2 years ago
UnsupportedSliderCaptchaException
的错误提示
java.lang.ArrayIndexOutOfBoundsException: arraycopy: last destination index 4132 out of bounds for byte[4096]
(#2309)
Published by Him188 almost 2 years ago
2.13.0 包含对 2.13 前几个预览版本的修复和一些优化
ANDROID_PHONE
登录时提示 "当前QQ版本过低,请升级至最新版本后再登录。" 的问题 (#2298, #2312 by @cssxsh)
已知
ANDROID_WATCH
可能仍然无法登录
此问题由 2.13.O-M1 引入, 在 2.13.0-RC 尝试过修复但没有成功解决. 本次修复已被验证可用.
LoginSolver.onSolveUnsafeDeviceLoginVerify
增加了默认实现
所以在实现
LoginSolver
就不需要覆盖这个已经被弃用的方法了. 请覆盖新增的支持短信验证的onSolveDeviceVerification
替代.
如果你好奇, commit 为 81a09549. 实际上它只会在很少的情况下有影响.
在
Group
类增加了引导等
因为阿里云代理不太稳定. 目前仍然优先尝试速度更快的阿里云代理, 在失败时会使用 Central 仓库.
以解决在 2.13 以前编译的插件的兼容性问题
kotlin.UninitializedPropertyAccessException
的问题 (#2317)
此问题非 2.13 引入
broadcastMsgSyncEvent
增加了 OtherClient
参数
不兼容旧版 (2.13.0-RC, 2.13.0-RC2) 代码
Published by Karlatemp almost 2 years ago
2.13.0-RC2 包含对 2.13 的补充和对 2.13.0-RC 的修复.
Invalid number format: 'msfwifi'
导致的立刻断开连接Bot.close
时出现 StackOverflowError
的问题 (#2266)Could not resolve net.mamoe:mirai-core-api:2.13.0-RC
) (#2270)java.lang.NoClassDefFoundError: okhttp3/Request$Builder
的问题 (#2263)此问题非 2.13 引入
Published by Him188 about 2 years ago
2.13.0-RC 包含:
mirai-core-api
去除了对 kotlinx-coroutines-jdk8
的依赖.nextEvent
和 nextEventOrNull
新增 intercept
参数, 可在满足条件时拦截事件 (#1668, #2177 by @Nambers)好友分组定名为
FriendGroup
.
Friend.friendGroup
获取该好友所属分组.Bot.friendGroups
获取好友分组列表并操作分组.Group.active
获取群的活跃数据.Member.active
获取该成员的活跃数据.AbstractExternalResource.input
的默认实现
在实现自定义
ExternalResource
时可能有帮助
ANDROID_WATCH
和 MACOS
的协议信息 (#2228 by @cssxsh)HeartbeatFailedException
的问题 (#2175)现在不再有循环引用, 而且更简洁
CancellationException
将会被替换为真实原因
此修复也包含在 2.12.3
自 2.13.0-M1
也公开了进度条 API 供插件使用. 见
MiraiConsole.newProcessProgress()
.
/login
登录时使用可用的自动登录配置 (#2209 by @cssxsh)mirai-console-frontend-base
MiraiLogger.Factory
API 创建日志以帮助区分 mirai-console 和 mirai-console-loader
新增 Core 模拟测试框架 mirai-core-mock
. 版本号与 mirai-core
相同. 相关文档 (#1304, #1521)
使用模拟测试框架可以构造虚拟 Bot, 模拟收到各种事件.
Published by Him188 about 2 years ago
Published by Him188 about 2 years ago
2.13.0-M1 包含:
以下内容正在进行中, 将发布在 2.13.0-RC:
将 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 的帮助:
支持修改好友备注 (#554, #2112)
friend.remark
由val
变为var
, 修改时会触发FriendRemarkChangeEvent
.
在 Image
序列化时支持全部属性 (#2036 by @cssxsh)
以前只会输出
imageId
, 现在还会输出width
等全部必要属性. 兼容旧版本, 在读取时会使用默认0
值.
它现在完全支持全平台.
修复了一些元素的序列化可能有不期望行为的问题, 例如在不应该有type
(classDiscriminator
) 的时候有或相反.
正确支持并验证了@Contextual
.这可能导致新的问题, 建议在试用本测试版时测试是否还能正常工作并及时反馈问题以避免正式版本仍有问题
CommandSenderOnMessage
, 修正 CommandSender
的部分扩展的行为 (#2105)OtherClientCommandSenderOnMessageSync
(#1878, #1879 by @cssxsh, #2085)Published by Him188 about 2 years ago
自 2.12.0
Published by Him188 about 2 years ago
新插件版本号为
221-2.13.0-171-1
Published by Him188 over 2 years ago
此问题并非 2.12.0-RC 引入
此问题于 2.11 引入
Published by Him188 over 2 years ago
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 一样重要。更多的信息将帮助调试。
MessageSource
QuoteReply
FileMessage
重写消息协议层与发送消息流程 (#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)