[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
*/
@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 .

View File

@ -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<SingleMessage>, 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<SingleMessage>, 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)
}
}