diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt index bed9a11b5..53b1486b8 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt @@ -239,10 +239,21 @@ internal fun MessageChain.toRichTextElems(forGroup: Boolean): MutableList elements.add( + ImMsgBody.Elem( + lightApp = ImMsgBody.LightAppElem( + data = byteArrayOf(1) + MiraiPlatformUtils.zip(it.content.toByteArray()) + ) + ) + ) is RichMessage -> elements.add( ImMsgBody.Elem( richMsg = ImMsgBody.RichMsg( - serviceId = it.serviceId, + serviceId = when (it) { + is XmlMessage -> 60 + is JsonMessage -> 1 + else -> error("unsupported RichMessage") + }, template1 = byteArrayOf(1) + MiraiPlatformUtils.zip(it.content.toByteArray()) ) ) @@ -274,6 +285,7 @@ internal fun MessageChain.toRichTextElems(forGroup: Boolean): MutableList()) { + // 08 09 78 00 A0 01 81 DC 01 C8 01 00 F0 01 00 F8 01 00 90 02 00 98 03 00 A0 03 20 B0 03 00 C0 03 00 D0 03 00 E8 03 00 8A 04 02 08 03 90 04 80 80 80 10 B8 04 00 C0 04 00 elements.add(ImMsgBody.Elem(generalFlags = ImMsgBody.GeneralFlags(pbReserve = "08 09 78 00 C8 01 00 F0 01 00 F8 01 00 90 02 00 C8 02 00 98 03 00 A0 03 20 B0 03 00 C0 03 00 D0 03 00 E8 03 00 8A 04 02 08 03 90 04 80 80 80 10 B8 04 00 C0 04 00".hexToBytes()))) } else elements.add(ImMsgBody.Elem(generalFlags = ImMsgBody.GeneralFlags(pbReserve = "78 00 F8 01 00 C8 02 00".hexToBytes()))) @@ -343,7 +355,7 @@ internal class OnlineFriendImageImpl( internal fun MsgComm.Msg.toMessageChain(): MessageChain { val elements = this.msgBody.richText.elems - if (this.msgHead.fromUin == 1040400290L){ + if (this.msgHead.fromUin == 1040400290L) { println(this._miraiContentToString()) } @@ -408,6 +420,10 @@ internal fun List.joinToMessageChain(message: MessageChainBuilde } } } + it.lightApp != null -> { + val content = MiraiPlatformUtils.unzip(it.lightApp.data, 1).encodeToString() + message.add(LightApp(content)) + } it.richMsg != null -> { println(this._miraiContentToString()) val content = MiraiPlatformUtils.unzip(it.richMsg.template1, 1).encodeToString() diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Json.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Json.kt index 98407774c..cb8619ca7 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Json.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Json.kt @@ -16,9 +16,6 @@ import net.mamoe.mirai.utils.SinceMirai @OptIn(MiraiExperimentalAPI::class) class JsonMessage(override val content: String) : RichMessage { companion object Key : Message.Key - - override val serviceId: Int - get() = 1 - + // serviceId = 1 override fun toString(): String = content } \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/LightApp.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/LightApp.kt new file mode 100644 index 000000000..f5b187b38 --- /dev/null +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/LightApp.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2020 Mamoe Technologies and contributors. + * + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. + * + * https://github.com/mamoe/mirai/blob/master/LICENSE + */ + +package net.mamoe.mirai.message.data + +import net.mamoe.mirai.utils.MiraiExperimentalAPI +import net.mamoe.mirai.utils.SinceMirai + +/** + * 小程序, 如音乐分享 + */ +@OptIn(MiraiExperimentalAPI::class) +@SinceMirai("0.27.0") +class LightApp constructor(override val content: String) : RichMessage { + companion object Key : Message.Key + + override fun toString(): String = content +} \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt index ea61fa3ed..a12e28029 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt @@ -133,6 +133,7 @@ fun MessageChain.firstOrNull(key: Message.Key): M? = when (key) XmlMessage -> first() JsonMessage -> first() RichMessage -> first() + LightApp -> first() else -> null } as M? diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/RichMessage.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/RichMessage.kt index 27601e147..2363e3dcb 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/RichMessage.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/RichMessage.kt @@ -21,9 +21,6 @@ import net.mamoe.mirai.utils.SinceMirai interface RichMessage : MessageContent { companion object Key : Message.Key - @MiraiExperimentalAPI - val serviceId: Int - @MiraiExperimentalAPI val content: String } \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/XML.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/XML.kt index 55a55303c..a61c6d535 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/XML.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/XML.kt @@ -29,7 +29,7 @@ import kotlin.jvm.JvmName class XmlMessage constructor(override val content: String) : RichMessage { companion object Key : Message.Key - override val serviceId: Int get() = 60 + // override val serviceId: Int get() = 60 override fun toString(): String = content }