Bot releases are visible (Hide)
此版本为二进制不兼容更新, 全部使用者都需要重新编译.
源码兼容的改变:
@Depreacted
兼容@JvmName
以兼容将来的改变 (新 MPP 模块等级制架构)MessageChain
工具函数源码不兼容的改变:
Group
移动到独立的 GroupSettings
BotFactory
外 mirai-core-qqandroid
中全部 API 改为 internal
消息部分:
SingleMessage
实现接口 CharSequence
和 Comparable<String>
FriendImage
, GroupImage
, OnlineImage
, OfflineImage
增加 companion object Key
RichMessage
, 将所有子类聚合到一个文件XmlMessageHelper
为 RichMessage.Compation
buildXMLMessage
改为 buildXmlMessage
CombinedMessage
中错误的 left
和 element
事件部分:
selectMessages
, 增加回复, 引用回复, 默认值, 超时支持:val message = nextMessageOrNull(10.secondsToMillis) ?: kotlin.run {
quoteReply("请在 10 秒内发送一张图片")
return@case
}
val image = message.getOrNull(OnlineImage) ?: kotlin.run {
reply(message.quote() + "请发送一张图片")
return@case
}
reply(message.quote() + image.originUrl)
使用 selectMessages
DSL:
selectMessagesUnit {
has<OnlineImage>() quoteReply {
message[OnlineImage].originUrl
}
timeout(10.secondsToMillis) quoteReply {
"请在 10 秒内发送图片以获取链接"
}
defaultQuoteReply {
"请发送一张图片"
}
}
whileSelectMessages
, 简化连续监听过程bot.subscribeMessages {
"开启复读模式" `->` {
reply("成功开启")
whileSelectMessages {
"stop" `->` {
reply("已关闭复读")
false // 停止循环
}
default {
reply(message)
true // 继续循环
}
}
reply("复读模式结束")
}
}
selectMessages
, 简化筛选监听过程bot.subscribeMessages {
"test" `->` {
reply("choose option: 'hello', 'hi'")
val value: String = selectMessages {
"hello" `->` { "123" }
"hi" `->` { "222" }
default { "default value" }
}
reply(value)
}
}
infix fun String.->(block)
StatSvc.ReqMSFOffline
(#150)Contact.sendMessage
现在接受 Message
参数, 而不是 MessageChain
以兼容 CombinedMessage
Member.sendMessage
现在返回 MessageReceipt<Member>
而不是 QQ 泛型MessageUtils
中一些方法的可见性 (@JvmSynthetic
)OfflineImage.queryOriginUrl
改为 OfflineImage.queryUrl
Bot
(BotNetworkHandler.init
), 确保重初始化资源释放Java 完全友好: Java 使用者可以同 Kotlin 方式直接阻塞式或异步(Future)调用 API
新增 MessegaSource.originalMessage: MessageChain
以获取源消息内容
群消息的撤回现在已稳定 (Bot.recall
)
现在可以引用回复机器人自己发送的消息: MessageReceipt.quoteReply
新增 MessageRecallEvent
整理 MessageChain
的构造, 优化性能
整理所有网络层代码, 弃用 kotlinx.io
而使用 io.ktor.utils.io
其他杂项优化
支持图片下载: image.channel(): ByteReadChannel
, image.url()
添加 LockFreeLinkedList<E>.iterator
添加 LockFreeLinkedList<E>.forEachNode
并行处理事件监听
添加 nextMessageContaining
和相关可空版本
'撤回' 从 Contact
移动到 Bot
删除 MessageSource.sourceMessage
让 MessageSource 拥有唯一的 long 类型 id, 删除原 uid
和 sequence
结构.
修复 Message.eq
歧义
Group.recall
, MessageReceipt.recall
Group.recallIn
, MessageReceipt.recallIn
sendMessage
返回 MessageReceipt
以实现撤回功能MessageChain.addOrRemove
ContactList.firstOrNull
, ContactList.first
subscribingGetAsync
启动一个协程并从一个事件从获取返回值到 Deferred
.subscribingGet
挂起当前协程并从一个事件从获取返回值.nextMessage
挂起当前协程并等待下一条消息:使用该示例, 发送两条消息, 一条为 "禁言", 另一条包含一个 At
case("禁言") {
val value: At = nextMessage { message.any(At) }[At]
value.member().mute(10)
}
示例 2:
case("复读下一条") {
reply(nextMessage().message)
}
At
无法发送的问题{xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx}.jpg
形式(固定长度 37)MessageSource.time
coroutineContext
operator
的事件添加 .isByBot
的属性扩展Contact
添加 toString()
(#80)Member.muteTimeRemaining
At
的 display
(#73), 同时修复 QuoteReply
无法显示问题 (#54).BotReloginEvent
(#78)MiraiLogger
添加 common property val isEnabled: Boolean
Bot
close 后仍会重连bot.logger
记录 (verbose).info
-> verbose
Bot
的 log 记录Bot
或 NetworkHandler
关闭时取消 job 的逻辑