mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-13 06:30:13 +08:00
Ensure sequenceId
available
This commit is contained in:
parent
29a7878ee4
commit
97da6fce60
@ -501,6 +501,8 @@ internal class GroupImpl(
|
||||
checkBotPermissionOperator()
|
||||
}
|
||||
|
||||
source.ensureSequenceIdAvailable()
|
||||
|
||||
bot.network.run {
|
||||
val response = PbMessageSvc.PbMsgWithDraw.Group(bot.client, this@GroupImpl.id, source.sequenceId, source.messageUid.toInt())
|
||||
.sendAndExpect<PbMessageSvc.PbMsgWithDraw.Response>()
|
||||
|
@ -23,6 +23,11 @@ internal inline class MessageSourceFromServer(
|
||||
) : MessageSource {
|
||||
override val time: Long get() = delegate.time.toLong() and 0xFFFFFFFF
|
||||
override val sequenceId: Int get() = delegate.origSeqs?.firstOrNull() ?: error("cannot find sequenceId from ImMsgBody.SourceMsg")
|
||||
|
||||
override suspend fun ensureSequenceIdAvailable() {
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
override val messageUid: Long get() = delegate.pbReserve.loadAs(SourceMsg.ResvAttr.serializer()).origUids!!
|
||||
override val sourceMessage: MessageChain get() = delegate.toMessageChain()
|
||||
override val senderId: Long get() = delegate.senderUin
|
||||
@ -36,6 +41,10 @@ internal inline class MessageSourceFromMsg(
|
||||
) : MessageSource {
|
||||
override val time: Long get() = delegate.msgHead.msgTime.toLong() and 0xFFFFFFFF
|
||||
override val sequenceId: Int get() = delegate.msgHead.msgSeq
|
||||
override suspend fun ensureSequenceIdAvailable() {
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
override val messageUid: Long get() = delegate.msgBody.richText.attr!!.random.toLong()
|
||||
override val sourceMessage: MessageChain get() = delegate.toMessageChain()
|
||||
override val senderId: Long get() = delegate.msgHead.fromUin
|
||||
|
@ -294,6 +294,10 @@ internal class MessageSvc {
|
||||
override val sequenceId: Int
|
||||
get() = sequenceIdDeferred.getCompleted()
|
||||
|
||||
override suspend fun ensureSequenceIdAvailable() {
|
||||
sequenceIdDeferred.join()
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return ""
|
||||
}
|
||||
|
@ -42,11 +42,6 @@ open class MessageReceipt<C : Contact>(
|
||||
|
||||
private val _isRecalled = atomic(false)
|
||||
|
||||
/**
|
||||
* 判断消息是否已被撤回.
|
||||
*/
|
||||
val isRecalled: Boolean get() = _isRecalled.value
|
||||
|
||||
/**
|
||||
* 撤回这条消息. [recall] 或 [recallIn] 只能被调用一次.
|
||||
*
|
||||
|
@ -27,10 +27,17 @@ interface MessageSource : Message {
|
||||
companion object Key : Message.Key<MessageSource>
|
||||
|
||||
/**
|
||||
* 序列号
|
||||
* 序列号. 若是机器人发出去的消息, 请先 [确保 sequenceId 可用][ensureSequenceIdAvailable]
|
||||
*/
|
||||
val sequenceId: Int
|
||||
|
||||
/**
|
||||
* 等待 [sequenceId] 获取, 确保其可用.
|
||||
*
|
||||
* 若原消息发送失败, 这个方法会等待最多 3 秒随后抛出 [IllegalStateException]
|
||||
*/
|
||||
suspend fun ensureSequenceIdAvailable()
|
||||
|
||||
/**
|
||||
* 实际上是个随机数, 但服务器确实是用它当做 uid
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user