Http api calculate messageId with uid and seq

This commit is contained in:
ryoii 2020-02-22 18:32:00 +08:00
parent 43e0c3b414
commit b92956f112
2 changed files with 5 additions and 2 deletions

View File

@ -99,9 +99,11 @@ fun MessageChain.toDTOChain() = mutableListOf(this[MessageSource].toDTO()).apply
fun MessageChainDTO.toMessageChain(contact: Contact) = fun MessageChainDTO.toMessageChain(contact: Contact) =
MessageChain().apply { this@toMessageChain.forEach { add(it.toMessage(contact)) } } MessageChain().apply { this@toMessageChain.forEach { add(it.toMessage(contact)) } }
internal fun MessageSource.calMessageId() = (messageUid.toLong() shl 32) or (sequenceId.toLong() and 0xFFFFFFFF)
@UseExperimental(ExperimentalUnsignedTypes::class) @UseExperimental(ExperimentalUnsignedTypes::class)
fun Message.toDTO() = when (this) { fun Message.toDTO() = when (this) {
is MessageSource -> MessageSourceDTO(messageUid.toLong() and 0xFFffFFff) is MessageSource -> MessageSourceDTO(calMessageId())
is At -> AtDTO(target, display) is At -> AtDTO(target, display)
is AtAll -> AtAllDTO(0L) is AtAll -> AtAllDTO(0L)
is Face -> FaceDTO(id) is Face -> FaceDTO(id)

View File

@ -11,6 +11,7 @@ package net.mamoe.mirai.api.http.queue
import net.mamoe.mirai.api.http.data.common.EventDTO import net.mamoe.mirai.api.http.data.common.EventDTO
import net.mamoe.mirai.api.http.data.common.IgnoreEventDTO import net.mamoe.mirai.api.http.data.common.IgnoreEventDTO
import net.mamoe.mirai.api.http.data.common.calMessageId
import net.mamoe.mirai.api.http.data.common.toDTO import net.mamoe.mirai.api.http.data.common.toDTO
import net.mamoe.mirai.event.events.BotEvent import net.mamoe.mirai.event.events.BotEvent
import net.mamoe.mirai.message.GroupMessage import net.mamoe.mirai.message.GroupMessage
@ -46,7 +47,7 @@ class MessageQueue : ConcurrentLinkedDeque<BotEvent>() {
} }
private fun addQuoteCache(msg: GroupMessage) { private fun addQuoteCache(msg: GroupMessage) {
quoteCache[msg.message[MessageSource].messageUid.toLong()] = msg quoteCache[msg.message[MessageSource].calMessageId()] = msg
if (quoteCache.size > quoteCacheSize) { if (quoteCache.size > quoteCacheSize) {
quoteCache.remove(quoteCache.firstKey()) quoteCache.remove(quoteCache.firstKey())
} }