Add MessageSource.originalMessage

This commit is contained in:
Him188 2020-03-01 14:40:51 +08:00
parent 58b1a4d7e3
commit bbf991103d
3 changed files with 32 additions and 18 deletions

View File

@ -26,11 +26,15 @@ import net.mamoe.mirai.qqandroid.network.protocol.data.proto.SourceMsg
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.OnlinePush
import net.mamoe.mirai.utils.MiraiExperimentalAPI
internal inline class MessageSourceFromServer(
internal class MessageSourceFromServer(
val delegate: ImMsgBody.SourceMsg
) : MessageSource {
override val time: Long get() = delegate.time.toLong() and 0xFFFFFFFF
override val originalMessage: MessageChain by lazy {
delegate.toMessageChain()
}
override val id: Long
get() = (delegate.origSeqs?.firstOrNull()
?: error("cannot find sequenceId from ImMsgBody.SourceMsg")).toLong().shl(32) or
@ -49,12 +53,12 @@ internal inline class MessageSourceFromServer(
override fun toString(): String = ""
}
internal inline class MessageSourceFromMsg(
internal class MessageSourceFromMsg(
val delegate: MsgComm.Msg
) : MessageSource {
override val time: Long get() = delegate.msgHead.msgTime.toLong() and 0xFFFFFFFF
override val id: Long
get() = delegate.msgHead.msgSeq.toLong().shl(32) or
override val id: Long =
delegate.msgHead.msgSeq.toLong().shl(32) or
delegate.msgBody.richText.attr!!.random.toLong().and(0xFFFFFFFF)
override suspend fun ensureSequenceIdAvailable() {
@ -64,6 +68,9 @@ internal inline class MessageSourceFromMsg(
override val toUin: Long get() = delegate.msgHead.toUin
override val senderId: Long get() = delegate.msgHead.fromUin
override val groupId: Long get() = delegate.msgHead.groupInfo?.groupCode ?: 0
override val originalMessage: MessageChain by lazy {
delegate.toMessageChain()
}
fun toJceData(): ImMsgBody.SourceMsg {
return if (groupId == 0L) {
@ -71,6 +78,12 @@ internal inline class MessageSourceFromMsg(
} else toJceDataImplForGroup()
}
val elems by lazy {
delegate.msgBody.richText.elems.toMutableList().also {
if (it.last().elemFlags2 == null) it.add(ImMsgBody.Elem(elemFlags2 = ImMsgBody.ElemFlags2()))
}
}
private fun toJceDataImplForFriend(): ImMsgBody.SourceMsg {
return ImMsgBody.SourceMsg(
origSeqs = listOf(delegate.msgHead.msgSeq),
@ -97,9 +110,7 @@ internal inline class MessageSourceFromMsg(
),
msgBody = ImMsgBody.MsgBody(
richText = ImMsgBody.RichText(
elems = delegate.msgBody.richText.elems.also {
if (it.last().elemFlags2 == null) it.add(ImMsgBody.Elem(elemFlags2 = ImMsgBody.ElemFlags2()))
}
elems = elems
)
)
).toByteArray(MsgComm.Msg.serializer())
@ -135,9 +146,7 @@ internal inline class MessageSourceFromMsg(
),
msgBody = ImMsgBody.MsgBody(
richText = ImMsgBody.RichText(
elems = delegate.msgBody.richText.elems.also {
if (it.last().elemFlags2 == null) it.add(ImMsgBody.Elem(elemFlags2 = ImMsgBody.ElemFlags2()))
}
elems = elems
)
)
).toByteArray(MsgComm.Msg.serializer())
@ -149,7 +158,7 @@ internal inline class MessageSourceFromMsg(
internal abstract class MessageSourceFromSend : MessageSource {
abstract val sourceMessage: MessageChain
abstract override val originalMessage: MessageChain
fun toJceData(): ImMsgBody.SourceMsg {
return if (groupId == 0L) {
@ -158,7 +167,7 @@ internal abstract class MessageSourceFromSend : MessageSource {
}
private val elems by lazy {
sourceMessage.toRichTextElems(groupId != 0L)
originalMessage.toRichTextElems(groupId != 0L)
}
private fun toJceDataImplForFriend(): ImMsgBody.SourceMsg {
@ -242,7 +251,7 @@ internal class MessageSourceFromSendFriend(
override val toUin: Long,
override val groupId: Long,
val sequenceId: Int,
override val sourceMessage: MessageChain
override val originalMessage: MessageChain
) : MessageSourceFromSend() {
@UseExperimental(ExperimentalCoroutinesApi::class)
override val id: Long
@ -264,7 +273,7 @@ internal class MessageSourceFromSendGroup(
override val senderId: Long,
override val toUin: Long,
override val groupId: Long,
override val sourceMessage: MessageChain
override val originalMessage: MessageChain
) : MessageSourceFromSend() {
private lateinit var sequenceIdDeferred: Deferred<Int>

View File

@ -289,7 +289,7 @@ internal class MessageSvc {
time = currentTimeSeconds + client.timeDifference,
groupId = 0,
sequenceId = client.atomicNextMessageSequenceId(),
sourceMessage = message
originalMessage = message
)
sourceCallback(source)
return ToFriend(client, toUin, message, source)
@ -339,7 +339,7 @@ internal class MessageSvc {
toUin = Group.calculateGroupUinByGroupCode(groupCode),
time = currentTimeSeconds + client.timeDifference,
groupId = groupCode,
sourceMessage = message//,
originalMessage = message//,
// sourceMessage = message
)
sourceCallback(source)

View File

@ -14,6 +14,7 @@ package net.mamoe.mirai.message.data
import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.utils.LazyProperty
import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName
@ -64,14 +65,18 @@ interface MessageSource : Message, MessageMetadata {
*/
val groupId: Long
/**
* 原消息内容
*/
@LazyProperty
val originalMessage: MessageChain
/**
* 固定返回空字符串 ("")
*/
override fun toString(): String
}
interface GroupMessageSource : MessageSource
/**
* 序列号. 若是机器人发出去的消息, 请先 [确保 sequenceId 可用][MessageSource.ensureSequenceIdAvailable]
* @see MessageSource.id