[Review] MiraiCode and message serialization:

- Add extensions for Kotlin callers
This commit is contained in:
Him188 2021-01-10 04:16:59 +08:00
parent ad6e951be8
commit 938cc6dd07
2 changed files with 43 additions and 3 deletions

View File

@ -7,7 +7,7 @@
* https://github.com/mamoe/mirai/blob/master/LICENSE * https://github.com/mamoe/mirai/blob/master/LICENSE
*/ */
@file:Suppress("unused") @file:Suppress("unused", "NOTHING_TO_INLINE")
package net.mamoe.mirai.message.code 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.code.internal.parseMiraiCodeImpl
import net.mamoe.mirai.message.data.Message import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.MessageChain.Companion.parseFromMiraiCode
import net.mamoe.mirai.utils.safeCast import net.mamoe.mirai.utils.safeCast
/** /**
@ -22,11 +23,20 @@ import net.mamoe.mirai.utils.safeCast
*/ */
public object MiraiCode { 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 @JvmOverloads
@JvmStatic @JvmStatic
public fun String.parseMiraiCode(contact: Contact? = null): MessageChain = parseMiraiCodeImpl(contact) public fun parseMiraiCode(code: String, contact: Contact? = null): MessageChain = code.parseMiraiCodeImpl(contact)
/** /**
* 转换得到 mirai . * 转换得到 mirai .

View File

@ -21,10 +21,12 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.event.events.MessageEvent import net.mamoe.mirai.event.events.MessageEvent
import net.mamoe.mirai.message.MessageSerializers import net.mamoe.mirai.message.MessageSerializers
import net.mamoe.mirai.message.code.CodableMessage import net.mamoe.mirai.message.code.CodableMessage
import net.mamoe.mirai.message.code.MiraiCode 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.quote
import net.mamoe.mirai.message.data.MessageSource.Key.recall import net.mamoe.mirai.message.data.MessageSource.Key.recall
import net.mamoe.mirai.utils.MiraiExperimentalApi import net.mamoe.mirai.utils.MiraiExperimentalApi
@ -135,6 +137,26 @@ public interface MessageChain : Message, List<SingleMessage>, RandomAccess, Coda
return json.decodeFromString(Serializer, string) 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 字符串. * [MessageChain] 序列化为 JSON 字符串.
* @see deserializeFromJsonString * @see deserializeFromJsonString
@ -155,6 +177,14 @@ public interface MessageChain : Message, List<SingleMessage>, RandomAccess, Coda
@JvmStatic @JvmStatic
public fun MessageChain.serializeToString(format: StringFormat): String = public fun MessageChain.serializeToString(format: StringFormat): String =
format.encodeToString(Serializer, this) 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)
} }
} }