Bot releases are visible (Hide)
二进制不兼容的修改: Bot.instances
现在返回 List<Bot>
, 而不是 List<WeakRef<Bot>>
由于他们在 JVM 签名相同, 无法做兼容.
原有 Member
继承 QQ
, QQ
继承 Contact
架构改变.
新架构为:
QQ
命名 (二进制兼容到 1.0.0)User
继承 Contact
, 作为 Member
和 Friend
的父类Member
继承 User
Friend
继承 User
由于 Member
不再是 QQ
子类, 而原本表示 '好友' 意义的 QQ
删除,
需要根据实际情况替换 QQ
的引用为 Friend
或 Group
因修改, 新增以下 API:
fun Member.asFriend(): Friend
: 得到此成员作为好友的对象或抛出异常fun Member.asFriendOrNull(): Friend
: 得到此成员作为好友的对象或返回 null
inline val Member.isFriend: Boolean
: 判断此成员是否为好友同时有以下修改:
val User.nameCardOrNick
: 获取非空群名片 (如果是群员) 或昵称fun Member.isMuted()
而改为属性 val Member.isMuted
imageId: String
.imageId: String
(以前可以获取长宽等数据)BufferedImage.toExternalImage
的性能{ ... }.mirai
新增合并转发及其 DSL
新增 OfflineMessageSource
构造
新增 MessageSource
修改: MessageSource.copyAmend(block)
修复 'sequence not yet available' 问题 (#)
修复好友消息的消息源 id 错误的问题 (#247)
如果群成员是好友, 则发送好友消息, 而不是临时会话消息.
添加 MessageSource.internalId
以便将来使用
添加 OnlineMessageSource.toOffline
添加 ContactMessage.time
添加 ContactMessage.senderName
OfflineMessageSource
构造可使用 DSL 构造离线消息, 修改其发送人, 发送时间, 发送内容等. 这对于跨群转发等情况十分有用.
OfflineMessageSource.kt: Line 90
DSL 总览:
val source: OfflineMessageSource = bot.buildMessageSource {
bot sendTo target // 指定发送人和发送目标
metadata(source) // 从另一个消息源复制 id, internalId, time
messages { // 指定消息内容
+"hi"
}
}
合并转发: ForwardMessage
DSL: ForwardMessageBuilder
DSL 总览:
buildForwardMessage {
123456789 named "鸽子 A" says "咕"
100200300 named "鸽子 C" at 1582315452 says "咕咕咕" // at 设置时间
987654321 named "鸽子 B" says "咕"
myFriend says "咕"
bot says { // 构造消息链, 同 `buildMessageChain`
+"发个图片试试"
+Image("{90CCED1C-2D64-313B-5D66-46625CAB31D7}.jpg")
}
}
不支持解析别人的转发.
Identified
到 ContactOrBot
, 去掉其 '实验性' 注解Bot.instances
现在返回 List<Bot>
, 而不是 List<WeakRef<Bot>>
(二进制兼容)subscribingGet
到 syncFromEvent
, 并将其定义为稳定 API.subscribingGetAsync
到 asyncFromEvent
, 并将其定义为稳定 API.eventClass: KClass<Event>
参数的事件监听 subscribe
MessageSubscribersBuilder
添加 sentBy(User)
, sentFrom(Group)
, atAll
, at
DSLBotOfflineEvent.Force
的问题CustomMessage
MessageChain.contentEquals
Message.isPlain
, Message.isNotPlain
MessageChain.allContent
, MessageChain.noneContent
CombinedMessage.toString
顺序错误, 添加缓存BotConfiguration.inheritCoroutineContext
MessageChain.getOrNull
更名为 MessageChain.firstOrNull
MessageChain.get
更名为 MessageChain.first
MessageReceipt.recall(long)
更名为 MessageReceipt.recallIn(long)
以与其他 API 保持一致MessageChainBuilder
构建逻辑新增:
MemberCardChangeEvent
)中支持获取操作人ServiceMessage
作为 JsonMessage
, XmlMessage
的父类并处理所有类型富文本消息解析RichMessage
标注 MiraiExperimentalAPI
以警告将来改动问题修复:
MessageSubscriberBuilder
DSL, 整理 linear.kt
, subscribers.kt
LoginFailedException
中断从 0.37.1
起 JVM 平台依赖无需带 "-jvm" 模块名
即原 "mirai-core-jvm" 和 "mirai-core-qqandroid-jvm" 依赖均需去掉 "-jvm", 变为 "mirai-core" 和 "mirai-core-qqandroid"
QuoteReply
时的消息长度估算MessageChainBuilder.build
, 效果同 asMessageChain
ContactMessage
中添加 At.isBot
MessageSubscribersBuilder
中添加 String.invoke
, atBot
DSLTempMessage
(#16 )MemberJoinEvent.Active
subscribeTempMessages
等相关 DSLFriendAddEvent
, FriendDeleteEvent
(#216)OfflineMessageSource.id
Member.kick
selectMessages
, selectMessagesUnit
添加可选筛选 context 的参数: filterContext: Boolean
Message
改动 (二进制兼容):
Message.contentToString
以转换为最接近官方消息的字符串ConstrainSingle
的 Message
类型以保证一个消息链中只存在一个 QuoteReply
和一个 MessageSource
CombinedMessage
现在实现接口 MessageChian
并变为 internal
以降低复杂度 (使用 MessageChain
替换 CombinedMessage
的引用).Message.plus
现在返回 MessageChain
而不是 CombinedMessage
NullMessageChain
(使用 null
替代)Message
中 eq
, contains
等函数移动至 SingleMessage
以避免歧义.MessageChain.any<reified M>
到 MessageChain.anyInInstance<reified M>
以与标准库的 Iterable.any
区分MessageChain.first<reified M>
到 MessageChain.firstIsInstance<reified M>
以与标准库的 Iterable.first
区分MessageChain.firstOrNull<reified M>
到 MessageChain.firstIsInstanceOrNull<reified M>
以与标准库的 Iterable.firstOrNull
区分MessageSource
, 支持直接获取相关对象, 支持所有类型的引用.source.quote()
即可创建引用 (而不需要 sender
参数)QuoteReply.source
获取源消息, 且可以撤回该消息或再次引用.Image.flash()
将普通图片转为闪照.Bot.nick
(#93)SystemDeviceInfo.imei
可能会抛出 NPE 的问题GroupNameChangeEvent
重复广播的问题ContactMessage.nextMessageContaining
selectMessage
时无法正常完结, 和 timeout 没有被取消的问题BotConfiguration
, 去掉 DSL 操作, 使用 fileBasedDeviceInfo(filename)
等函数替代. (兼容原操作方式, 计划于 0.34.0
删除)ContactMessage
以替代 MessagePacket<*, *>
的情况MessageTooLargeException
Bot.id
替代 Bot.uin
Dispatchers.IO
协程调度器中执行 Java API 创建的事件处理.Member.kick
参数 message
没有正常传递的问题mirai-core
移至 mirai-core-qqandroid