Commit d2602cb9 authored by Him188's avatar Him188

Introduce interface CodableMessage

parent 5941605a
/*
* 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.code
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.utils.MiraiExperimentalAPI
import net.mamoe.mirai.utils.SinceMirai
/**
* 可以使用 mirai 码表示的 [Message] 类型.
*
* 使用 `mirai-serialization` 中 `String.parseMiraiCode()` 转回 [Message].
*
* @suppress 警告: 此 API 可能在任何时刻被改变
*/
@MiraiExperimentalAPI
@SinceMirai("1.1.0")
interface CodableMessage : Message {
/**
* 转换为 mirai 码.
*
* @suppress 警告: 此 API 可能在任何时刻被改变
*/
@MiraiExperimentalAPI
fun toMiraiCode(): String = this.toString()
}
\ No newline at end of file
...@@ -17,6 +17,7 @@ package net.mamoe.mirai.message.data ...@@ -17,6 +17,7 @@ package net.mamoe.mirai.message.data
import net.mamoe.mirai.LowLevelAPI import net.mamoe.mirai.LowLevelAPI
import net.mamoe.mirai.contact.Member import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.contact.nameCardOrNick import net.mamoe.mirai.contact.nameCardOrNick
import net.mamoe.mirai.message.code.CodableMessage
import kotlin.jvm.JvmMultifileClass import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
import kotlin.jvm.JvmStatic import kotlin.jvm.JvmStatic
...@@ -36,8 +37,7 @@ private constructor( ...@@ -36,8 +37,7 @@ private constructor(
* "@群员名片" * "@群员名片"
*/ */
val display: String val display: String
) : // don't change ) : MessageContent, CodableMessage {
MessageContent {
/** /**
* 构造一个 [At] 实例. 这是唯一的公开的构造方式. * 构造一个 [At] 实例. 这是唯一的公开的构造方式.
...@@ -67,9 +67,9 @@ private constructor( ...@@ -67,9 +67,9 @@ private constructor(
// 自动为消息补充 " " // 自动为消息补充 " "
override fun followedBy(tail: Message): MessageChain { override fun followedBy(tail: Message): MessageChain {
if (tail is PlainText && tail.content.startsWith(' ')) { if (tail is PlainText && tail.content.startsWith(' ')) {
return super.followedBy(tail) return super<MessageContent>.followedBy(tail)
} }
return super.followedBy(PlainText(" ")) + tail return super<MessageContent>.followedBy(PlainText(" ")) + tail
} }
override fun hashCode(): Int { override fun hashCode(): Int {
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
package net.mamoe.mirai.message.data package net.mamoe.mirai.message.data
import net.mamoe.mirai.message.code.CodableMessage
import kotlin.jvm.JvmMultifileClass import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
...@@ -26,7 +27,7 @@ private const val displayA = "@全体成员" ...@@ -26,7 +27,7 @@ private const val displayA = "@全体成员"
*/ */
object AtAll : object AtAll :
Message.Key<AtAll>, Message.Key<AtAll>,
MessageContent { MessageContent, CodableMessage {
const val display = displayA const val display = displayA
override val typeName: String override val typeName: String
get() = "AtAll" get() = "AtAll"
...@@ -45,8 +46,8 @@ object AtAll : ...@@ -45,8 +46,8 @@ object AtAll :
// 自动为消息补充 " " // 自动为消息补充 " "
override fun followedBy(tail: Message): MessageChain { override fun followedBy(tail: Message): MessageChain {
if (tail is PlainText && tail.content.startsWith(' ')) { if (tail is PlainText && tail.content.startsWith(' ')) {
return super.followedBy(tail) return super<MessageContent>.followedBy(tail)
} }
return super.followedBy(PlainText(" ")) + tail return super<MessageContent>.followedBy(PlainText(" ")) + tail
} }
} }
\ No newline at end of file
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
package net.mamoe.mirai.message.data package net.mamoe.mirai.message.data
import net.mamoe.mirai.message.code.CodableMessage
import net.mamoe.mirai.utils.PlannedRemoval import net.mamoe.mirai.utils.PlannedRemoval
import kotlin.jvm.JvmMultifileClass import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
...@@ -21,7 +22,7 @@ import kotlin.jvm.JvmSynthetic ...@@ -21,7 +22,7 @@ import kotlin.jvm.JvmSynthetic
* QQ 自带表情 * QQ 自带表情
*/ */
data class Face(val id: Int) : // used in delegation data class Face(val id: Int) : // used in delegation
MessageContent { MessageContent, CodableMessage {
override fun toString(): String = "[mirai:face:$id]" override fun toString(): String = "[mirai:face:$id]"
override fun contentToString(): String = "[表情]" override fun contentToString(): String = "[表情]"
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
package net.mamoe.mirai.message.data package net.mamoe.mirai.message.data
import net.mamoe.mirai.message.code.CodableMessage
import net.mamoe.mirai.message.data.PokeMessage.Types import net.mamoe.mirai.message.data.PokeMessage.Types
import net.mamoe.mirai.message.data.VipFace.Companion import net.mamoe.mirai.message.data.VipFace.Companion
import net.mamoe.mirai.utils.PlannedRemoval import net.mamoe.mirai.utils.PlannedRemoval
...@@ -49,7 +50,7 @@ data class PokeMessage internal constructor( ...@@ -49,7 +50,7 @@ data class PokeMessage internal constructor(
val type: Int, val type: Int,
val id: Int val id: Int
) : HummerMessage() { ) : HummerMessage(), CodableMessage {
@Suppress("DEPRECATION_ERROR", "DEPRECATION", "INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") @Suppress("DEPRECATION_ERROR", "DEPRECATION", "INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
companion object Types : Message.Key<PokeMessage> { companion object Types : Message.Key<PokeMessage> {
override val typeName: String override val typeName: String
...@@ -159,7 +160,7 @@ data class VipFace internal constructor( ...@@ -159,7 +160,7 @@ data class VipFace internal constructor(
*/ */
val kind: Kind, val kind: Kind,
val count: Int val count: Int
) : HummerMessage() { ) : HummerMessage(), CodableMessage {
data class Kind( data class Kind(
val id: Int, val id: Int,
val name: String val name: String
...@@ -238,7 +239,7 @@ data class VipFace internal constructor( ...@@ -238,7 +239,7 @@ data class VipFace internal constructor(
* *
* @see Image 查看图片相关信息 * @see Image 查看图片相关信息
*/ */
sealed class FlashImage : MessageContent, HummerMessage() { sealed class FlashImage : MessageContent, HummerMessage(), CodableMessage {
companion object Key : Message.Key<FlashImage> { companion object Key : Message.Key<FlashImage> {
/** /**
* 将普通图片转换为闪照. * 将普通图片转换为闪照.
......
...@@ -25,6 +25,7 @@ import kotlinx.serialization.Serializable ...@@ -25,6 +25,7 @@ import kotlinx.serialization.Serializable
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.message.code.CodableMessage
import net.mamoe.mirai.utils.* import net.mamoe.mirai.utils.*
import kotlin.js.JsName import kotlin.js.JsName
import kotlin.jvm.JvmMultifileClass import kotlin.jvm.JvmMultifileClass
...@@ -57,7 +58,7 @@ import kotlin.jvm.JvmSynthetic ...@@ -57,7 +58,7 @@ import kotlin.jvm.JvmSynthetic
* @see FlashImage 闪照 * @see FlashImage 闪照
* @see Image.flash 转换普通图片为闪照 * @see Image.flash 转换普通图片为闪照
*/ */
expect interface Image : Message, MessageContent { expect interface Image : Message, MessageContent, CodableMessage {
companion object Key : Message.Key<Image> { companion object Key : Message.Key<Image> {
override val typeName: String override val typeName: String
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment