mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-13 06:30:13 +08:00
Add MessageSource.originalMessage
This commit is contained in:
parent
58b1a4d7e3
commit
bbf991103d
@ -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>
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user