From a64c0613776124218596d454537d36be4e43af79 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Sun, 8 Mar 2020 22:14:59 +0800 Subject: [PATCH] Support `LightApp` message --- .../mamoe/mirai/qqandroid/message/messages.kt | 20 ++++++++++++++-- .../net.mamoe.mirai/message/data/Json.kt | 5 +--- .../net.mamoe.mirai/message/data/LightApp.kt | 24 +++++++++++++++++++ .../message/data/MessageChain.kt | 1 + .../message/data/RichMessage.kt | 3 --- .../net.mamoe.mirai/message/data/XML.kt | 2 +- 6 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/LightApp.kt 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<ImMsgB elements.add(ImMsgBody.Elem(text = it.toJceData())) elements.add(ImMsgBody.Elem(text = ImMsgBody.Text(str = " "))) } + is LightApp -> 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<ImMsgB this.forEach(::transformOneMessage) if (this.any<RichMessage>()) { + // 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<ImMsgBody.Elem>.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<JsonMessage> - - 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<LightApp> + + 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 <M : Message> MessageChain.firstOrNull(key: Message.Key<M>): M? = when (key) XmlMessage -> first<XmlMessage>() JsonMessage -> first<JsonMessage>() RichMessage -> first<RichMessage>() + LightApp -> first<LightApp>() 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<RichMessage> - @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<XmlMessage> - override val serviceId: Int get() = 60 + // override val serviceId: Int get() = 60 override fun toString(): String = content }