From 938cc6dd0791ed31e8980551f5b69e834150b337 Mon Sep 17 00:00:00 2001 From: Him188 Date: Sun, 10 Jan 2021 04:16:59 +0800 Subject: [PATCH] [Review] MiraiCode and message serialization: - Add extensions for Kotlin callers --- .../kotlin/message/code/MiraiCode.kt | 16 ++++++++-- .../kotlin/message/data/MessageChain.kt | 30 +++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/mirai-core-api/src/commonMain/kotlin/message/code/MiraiCode.kt b/mirai-core-api/src/commonMain/kotlin/message/code/MiraiCode.kt index d76eb0df5..e76212fd2 100644 --- a/mirai-core-api/src/commonMain/kotlin/message/code/MiraiCode.kt +++ b/mirai-core-api/src/commonMain/kotlin/message/code/MiraiCode.kt @@ -7,7 +7,7 @@ * https://github.com/mamoe/mirai/blob/master/LICENSE */ -@file:Suppress("unused") +@file:Suppress("unused", "NOTHING_TO_INLINE") package net.mamoe.mirai.message.code @@ -15,6 +15,7 @@ import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.message.code.internal.parseMiraiCodeImpl import net.mamoe.mirai.message.data.Message import net.mamoe.mirai.message.data.MessageChain +import net.mamoe.mirai.message.data.MessageChain.Companion.parseFromMiraiCode import net.mamoe.mirai.utils.safeCast /** @@ -22,11 +23,20 @@ import net.mamoe.mirai.utils.safeCast */ public object MiraiCode { /** - * 解析形如 "[mirai:]" 的 mirai 码, 即 [Message.toString] 返回的内容. + * 解析形如 "[mirai:]" 的 mirai 码, 即 [CodableMessage.toMiraiCode] 返回的内容. + * @see MessageChain.parseFromMiraiCode + */ + @JvmName("parseMiraiCode1") + @JvmSynthetic + public inline fun String.parseMiraiCode(contact: Contact? = null): MessageChain = parseMiraiCode(this, contact) + + /** + * 解析形如 "[mirai:]" 的 mirai 码, 即 [CodableMessage.toMiraiCode] 返回的内容. + * @see MessageChain.parseFromMiraiCode */ @JvmOverloads @JvmStatic - public fun String.parseMiraiCode(contact: Contact? = null): MessageChain = parseMiraiCodeImpl(contact) + public fun parseMiraiCode(code: String, contact: Contact? = null): MessageChain = code.parseMiraiCodeImpl(contact) /** * 转换得到 mirai 码. diff --git a/mirai-core-api/src/commonMain/kotlin/message/data/MessageChain.kt b/mirai-core-api/src/commonMain/kotlin/message/data/MessageChain.kt index 9e856436e..29c2fcbac 100644 --- a/mirai-core-api/src/commonMain/kotlin/message/data/MessageChain.kt +++ b/mirai-core-api/src/commonMain/kotlin/message/data/MessageChain.kt @@ -21,10 +21,12 @@ import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.Json +import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.event.events.MessageEvent import net.mamoe.mirai.message.MessageSerializers import net.mamoe.mirai.message.code.CodableMessage import net.mamoe.mirai.message.code.MiraiCode +import net.mamoe.mirai.message.code.MiraiCode.parseMiraiCode import net.mamoe.mirai.message.data.MessageSource.Key.quote import net.mamoe.mirai.message.data.MessageSource.Key.recall import net.mamoe.mirai.utils.MiraiExperimentalApi @@ -135,6 +137,26 @@ public interface MessageChain : Message, List, RandomAccess, Coda return json.decodeFromString(Serializer, string) } + /** + * 从 JSON 字符串解析 [MessageChain] + * @param json 需要包含 [MessageSerializers.serializersModule] + * @see deserializeFromJsonString + * @see serializeToJsonString + */ + @JvmSynthetic + @JvmStatic + public inline fun String.deserializeJsonToMessageChain(json: Json): MessageChain = + deserializeFromJsonString(this, json) + + /** + * 从 JSON 字符串解析 [MessageChain] + * @see serializeToJsonString + * @see deserializeFromJsonString + */ + @JvmSynthetic + @JvmStatic + public inline fun String.deserializeJsonToMessageChain(): MessageChain = deserializeFromJsonString(this) + /** * 将 [MessageChain] 序列化为 JSON 字符串. * @see deserializeFromJsonString @@ -155,6 +177,14 @@ public interface MessageChain : Message, List, RandomAccess, Coda @JvmStatic public fun MessageChain.serializeToString(format: StringFormat): String = format.encodeToString(Serializer, this) + + /** + * 解析形如 "[mirai:]" 的 mirai 码, 即 [CodableMessage.toMiraiCode] 返回的内容. + * @see MiraiCode.parseMiraiCode + */ + @JvmStatic + public fun MessageChain.parseFromMiraiCode(miraiCode: String, contact: Contact? = null): MessageChain = + miraiCode.parseMiraiCode(contact) } }