mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-13 06:30:13 +08:00
senderId, sourceMessage, groupId are now accessible from MessageSource
This commit is contained in:
parent
0d8e481efc
commit
bfc516f350
@ -274,12 +274,30 @@ internal class NotOnlineImageFromServer(
|
||||
|
||||
@UseExperimental(ExperimentalUnsignedTypes::class, MiraiInternalAPI::class)
|
||||
internal fun MsgComm.Msg.toMessageChain(): MessageChain {
|
||||
val elems = this.msgBody.richText.elems
|
||||
val elements = this.msgBody.richText.elems
|
||||
|
||||
val message = MessageChain(initialCapacity = elems.size + 1)
|
||||
val message = MessageChain(initialCapacity = elements.size + 1)
|
||||
message.add(MessageSourceFromMsg(delegate = this))
|
||||
elements.joinToMessageChain(message)
|
||||
return message
|
||||
}
|
||||
|
||||
elems.forEach {
|
||||
// These two functions are not the same.
|
||||
|
||||
@UseExperimental(ExperimentalUnsignedTypes::class, MiraiInternalAPI::class)
|
||||
internal fun ImMsgBody.SourceMsg.toMessageChain(): MessageChain {
|
||||
val elements = this.elems!!
|
||||
|
||||
val message = MessageChain(initialCapacity = elements.size + 1)
|
||||
message.add(MessageSourceFromServer(delegate = this))
|
||||
elements.joinToMessageChain(message)
|
||||
return message
|
||||
}
|
||||
|
||||
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
internal fun List<ImMsgBody.Elem>.joinToMessageChain(message: MessageChain) {
|
||||
this.forEach {
|
||||
when {
|
||||
it.srcMsg != null -> message.add(QuoteReply(MessageSourceFromServer(it.srcMsg)))
|
||||
it.notOnlineImage != null -> message.add(NotOnlineImageFromServer(it.notOnlineImage))
|
||||
@ -296,5 +314,4 @@ internal fun MsgComm.Msg.toMessageChain(): MessageChain {
|
||||
}
|
||||
}
|
||||
|
||||
return message
|
||||
}
|
@ -10,6 +10,7 @@
|
||||
package net.mamoe.mirai.qqandroid.message
|
||||
|
||||
import net.mamoe.mirai.contact.Group
|
||||
import net.mamoe.mirai.message.data.MessageChain
|
||||
import net.mamoe.mirai.message.data.MessageSource
|
||||
import net.mamoe.mirai.qqandroid.io.serialization.loadAs
|
||||
import net.mamoe.mirai.qqandroid.io.serialization.toByteArray
|
||||
@ -20,8 +21,10 @@ import net.mamoe.mirai.qqandroid.network.protocol.data.proto.SourceMsg
|
||||
internal inline class MessageSourceFromServer(
|
||||
val delegate: ImMsgBody.SourceMsg
|
||||
) : MessageSource {
|
||||
override val messageUid: Long
|
||||
get() = delegate.pbReserve.loadAs(SourceMsg.ResvAttr.serializer()).origUids!!
|
||||
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
|
||||
override val groupId: Long get() = Group.calculateGroupCodeByGroupUin(delegate.toUin)
|
||||
|
||||
override fun toString(): String = ""
|
||||
}
|
||||
@ -29,12 +32,14 @@ internal inline class MessageSourceFromServer(
|
||||
internal inline class MessageSourceFromMsg(
|
||||
val delegate: MsgComm.Msg
|
||||
) : MessageSource {
|
||||
override val messageUid: Long
|
||||
get() = delegate.msgBody.richText.attr!!.random.toLong()
|
||||
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
|
||||
override val groupId: Long get() = delegate.msgHead.groupInfo!!.groupCode
|
||||
|
||||
fun toJceData(): ImMsgBody.SourceMsg {
|
||||
|
||||
val groupUin = Group.calculateGroupIdByGroupCode(delegate.msgHead.groupInfo!!.groupCode)
|
||||
val groupUin = Group.calculateGroupUinByGroupCode(delegate.msgHead.groupInfo!!.groupCode)
|
||||
|
||||
return ImMsgBody.SourceMsg(
|
||||
origSeqs = listOf(delegate.msgHead.msgSeq),
|
||||
|
@ -111,21 +111,37 @@ interface Group : Contact, CoroutineScope {
|
||||
/**
|
||||
* by @kar98k
|
||||
*/
|
||||
fun calculateGroupIdByGroupCode(groupCode: Long): Long {
|
||||
fun calculateGroupUinByGroupCode(groupCode: Long): Long {
|
||||
var left: Long = groupCode / 1000000L
|
||||
|
||||
when {
|
||||
left <= 10 -> left += 202
|
||||
left <= 19 -> left += 480 - 11
|
||||
left <= 66 -> left += 2100 - 20
|
||||
left <= 156 -> left += 2010 - 67
|
||||
left <= 209 -> left += 2147 - 157
|
||||
left <= 309 -> left += 4100 - 210
|
||||
left <= 499 -> left += 3800 - 310
|
||||
when (left) {
|
||||
in 0..10 -> left += 202
|
||||
in 11..19 -> left += 480 - 11
|
||||
in 20..66 -> left += 2100 - 20
|
||||
in 67..156 -> left += 2010 - 67
|
||||
in 157..209 -> left += 2147 - 157
|
||||
in 210..309 -> left += 4100 - 210
|
||||
in 310..499 -> left += 3800 - 310
|
||||
}
|
||||
|
||||
return left * 1000000L + groupCode % 1000000L
|
||||
}
|
||||
|
||||
fun calculateGroupCodeByGroupUin(groupUin: Long): Long {
|
||||
var left: Long = groupUin / 1000000L
|
||||
|
||||
when (left) {
|
||||
in 0 + 202..10 + 202 -> left -= 202
|
||||
in 11 + 480 - 11..19 + 480 - 11 -> left -= 480 - 11
|
||||
in 20 + 2100 - 20..66 + 2100 - 20 -> left -= 2100 - 20
|
||||
in 67 + 2010 - 67..156 + 2010 - 67 -> left -= 2010 - 67
|
||||
in 157 + 2147 - 157..209 + 2147 - 157 -> left -= 2147 - 157
|
||||
in 210 + 4100 - 210..309 + 4100 - 210 -> left -= 4100 - 210
|
||||
in 310 + 3800 - 310..499 + 3800 - 310 -> left -= 3800 - 310
|
||||
}
|
||||
|
||||
return left * 1000000L + groupUin % 1000000L
|
||||
}
|
||||
}
|
||||
|
||||
@MiraiExperimentalAPI
|
||||
|
@ -23,6 +23,21 @@ interface MessageSource : Message {
|
||||
*/
|
||||
val messageUid: Long
|
||||
|
||||
/**
|
||||
* 发送人号码
|
||||
*/
|
||||
val senderId: Long
|
||||
|
||||
/**
|
||||
* 群号码
|
||||
*/
|
||||
val groupId: Long
|
||||
|
||||
/**
|
||||
* 原消息内容
|
||||
*/
|
||||
val sourceMessage: MessageChain
|
||||
|
||||
/**
|
||||
* 固定返回空字符串 ("")
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user