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
import net.mamoe.mirai.LowLevelAPI
import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.contact.nameCardOrNick
import net.mamoe.mirai.message.code.CodableMessage
import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName
import kotlin.jvm.JvmStatic
......@@ -36,8 +37,7 @@ private constructor(
* "@群员名片"
*/
val display: String
) : // don't change
MessageContent {
) : MessageContent, CodableMessage {
/**
* 构造一个 [At] 实例. 这是唯一的公开的构造方式.
......@@ -67,9 +67,9 @@ private constructor(
// 自动为消息补充 " "
override fun followedBy(tail: Message): MessageChain {
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 {
......
......@@ -12,6 +12,7 @@
package net.mamoe.mirai.message.data
import net.mamoe.mirai.message.code.CodableMessage
import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName
......@@ -26,7 +27,7 @@ private const val displayA = "@全体成员"
*/
object AtAll :
Message.Key<AtAll>,
MessageContent {
MessageContent, CodableMessage {
const val display = displayA
override val typeName: String
get() = "AtAll"
......@@ -45,8 +46,8 @@ object AtAll :
// 自动为消息补充 " "
override fun followedBy(tail: Message): MessageChain {
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 @@
package net.mamoe.mirai.message.data
import net.mamoe.mirai.message.code.CodableMessage
import net.mamoe.mirai.utils.PlannedRemoval
import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName
......@@ -21,7 +22,7 @@ import kotlin.jvm.JvmSynthetic
* QQ 自带表情
*/
data class Face(val id: Int) : // used in delegation
MessageContent {
MessageContent, CodableMessage {
override fun toString(): String = "[mirai:face:$id]"
override fun contentToString(): String = "[表情]"
......
......@@ -13,6 +13,7 @@
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.VipFace.Companion
import net.mamoe.mirai.utils.PlannedRemoval
......@@ -49,7 +50,7 @@ data class PokeMessage internal constructor(
val type: Int,
val id: Int
) : HummerMessage() {
) : HummerMessage(), CodableMessage {
@Suppress("DEPRECATION_ERROR", "DEPRECATION", "INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
companion object Types : Message.Key<PokeMessage> {
override val typeName: String
......@@ -159,7 +160,7 @@ data class VipFace internal constructor(
*/
val kind: Kind,
val count: Int
) : HummerMessage() {
) : HummerMessage(), CodableMessage {
data class Kind(
val id: Int,
val name: String
......@@ -238,7 +239,7 @@ data class VipFace internal constructor(
*
* @see Image 查看图片相关信息
*/
sealed class FlashImage : MessageContent, HummerMessage() {
sealed class FlashImage : MessageContent, HummerMessage(), CodableMessage {
companion object Key : Message.Key<FlashImage> {
/**
* 将普通图片转换为闪照.
......
......@@ -25,6 +25,7 @@ import kotlinx.serialization.Serializable
import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.message.code.CodableMessage
import net.mamoe.mirai.utils.*
import kotlin.js.JsName
import kotlin.jvm.JvmMultifileClass
......@@ -57,7 +58,7 @@ import kotlin.jvm.JvmSynthetic
* @see FlashImage 闪照
* @see Image.flash 转换普通图片为闪照
*/
expect interface Image : Message, MessageContent {
expect interface Image : Message, MessageContent, CodableMessage {
companion object Key : Message.Key<Image> {
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