mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-24 20:43:33 +08:00
Generalize RichMessageOrigin, add origin and kind. Add RichMessageKind. #950
This commit is contained in:
parent
e381a2b33f
commit
54050523c3
binary-compatibility-validator/api
mirai-core-api/src/commonMain/kotlin/message/data
mirai-core/src/commonMain/kotlin/message
@ -5075,21 +5075,40 @@ public final class net/mamoe/mirai/message/data/RichMessage$Key : net/mamoe/mira
|
||||
public static synthetic fun share$default (Lnet/mamoe/mirai/message/data/RichMessage$Key;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lnet/mamoe/mirai/message/data/ServiceMessage;
|
||||
}
|
||||
|
||||
public final class net/mamoe/mirai/message/data/RichMessageKind : java/lang/Enum {
|
||||
public static final field FORWARD Lnet/mamoe/mirai/message/data/RichMessageKind;
|
||||
public static final field LONG Lnet/mamoe/mirai/message/data/RichMessageKind;
|
||||
public static fun valueOf (Ljava/lang/String;)Lnet/mamoe/mirai/message/data/RichMessageKind;
|
||||
public static fun values ()[Lnet/mamoe/mirai/message/data/RichMessageKind;
|
||||
}
|
||||
|
||||
public final class net/mamoe/mirai/message/data/RichMessageOrigin : net/mamoe/mirai/message/data/ConstrainSingle, net/mamoe/mirai/message/data/MessageMetadata {
|
||||
public static final field Key Lnet/mamoe/mirai/message/data/RichMessageOrigin$Key;
|
||||
public fun <init> (Ljava/lang/String;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun copy (Ljava/lang/String;)Lnet/mamoe/mirai/message/data/RichMessageOrigin;
|
||||
public static synthetic fun copy$default (Lnet/mamoe/mirai/message/data/RichMessageOrigin;Ljava/lang/String;ILjava/lang/Object;)Lnet/mamoe/mirai/message/data/RichMessageOrigin;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public synthetic fun <init> (ILnet/mamoe/mirai/message/data/RichMessage;Ljava/lang/String;Lnet/mamoe/mirai/message/data/RichMessageKind;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
|
||||
public fun <init> (Lnet/mamoe/mirai/message/data/RichMessage;Ljava/lang/String;Lnet/mamoe/mirai/message/data/RichMessageKind;)V
|
||||
public fun contentToString ()Ljava/lang/String;
|
||||
public synthetic fun getKey ()Lnet/mamoe/mirai/message/data/MessageKey;
|
||||
public fun getKey ()Lnet/mamoe/mirai/message/data/RichMessageOrigin$Key;
|
||||
public final fun getKind ()Lnet/mamoe/mirai/message/data/RichMessageKind;
|
||||
public final fun getOrigin ()Lnet/mamoe/mirai/message/data/RichMessage;
|
||||
public final fun getResourceId ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
public static final fun write$Self (Lnet/mamoe/mirai/message/data/RichMessageOrigin;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V
|
||||
}
|
||||
|
||||
public final class net/mamoe/mirai/message/data/RichMessageOrigin$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lnet/mamoe/mirai/message/data/RichMessageOrigin$$serializer;
|
||||
public fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lnet/mamoe/mirai/message/data/RichMessageOrigin;
|
||||
public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lnet/mamoe/mirai/message/data/RichMessageOrigin;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class net/mamoe/mirai/message/data/RichMessageOrigin$Key : net/mamoe/mirai/message/data/AbstractMessageKey {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public abstract interface class net/mamoe/mirai/message/data/ServiceMessage : net/mamoe/mirai/message/code/CodableMessage, net/mamoe/mirai/message/data/RichMessage {
|
||||
|
@ -7,30 +7,86 @@
|
||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
@file:Suppress("MemberVisibilityCanBePrivate", "unused")
|
||||
|
||||
package net.mamoe.mirai.message.data
|
||||
|
||||
import kotlinx.serialization.Polymorphic
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import net.mamoe.mirai.IMirai
|
||||
import net.mamoe.mirai.utils.MiraiExperimentalApi
|
||||
import net.mamoe.mirai.utils.safeCast
|
||||
|
||||
/**
|
||||
* 标识一个长消息.
|
||||
* 标识来源 [RichMessage], 存在于接收的 [MessageChain] 中. 在发送消息时会被忽略.
|
||||
*
|
||||
* 一些 [RichMessage] 会被 mirai 解析成特定的更易使用的类型, 如:
|
||||
* - 长消息会被协议内部转化为 [ServiceMessage] `serviceId=35` 通过独立通道上传和下载并获得一个 [resourceId]. mirai 会自动下载长消息并把他们解析为 [MessageChain].
|
||||
* - 合并转发也使用长消息通道传输, 拥有 [resourceId], mirai 解析为 [ForwardMessage]
|
||||
* - [MusicShare] 也有特殊通道上传, 但会作为 [LightApp] 接收.
|
||||
*
|
||||
* 消息过长后会通过特殊的通道上传和下载, 每条消息都会获得一个 resourceId.
|
||||
* 这些经过转换的类型的来源 [RichMessage] 会被包装为 [RichMessageOrigin] 并加入消息链中.
|
||||
*
|
||||
* 可以通过 resourceId 下载消息 [IMirai.downloadLongMessage].
|
||||
* 但不保证 resourceId 一直有效.
|
||||
* 如一条被 mirai 解析的长消息的消息链组成为, 第一个元素为 [MessageSource], 第二个元素为 [RichMessageOrigin], 随后为长消息内容.
|
||||
*
|
||||
* 又如一条被 mirai 解析的 [MusicShare] 的消息链组成为, 第一个元素为 [MessageSource], 第二个元素为 [RichMessageOrigin], 第三个元素为 [MusicShare].
|
||||
*
|
||||
* @suppress **注意**: 这是实验性 API: 类名, 类的类型, 构造, 属性等所有 API 均不稳定. 可能会在未来任意时刻变更.
|
||||
*
|
||||
* @since 2.3
|
||||
*/
|
||||
@MiraiExperimentalApi
|
||||
public data class RichMessageOrigin(
|
||||
val resourceId: String
|
||||
@Serializable
|
||||
@SerialName("RichMessageOrigin")
|
||||
@MiraiExperimentalApi("RichMessageOrigin 不稳定")
|
||||
public class RichMessageOrigin(
|
||||
/**
|
||||
* 原 [RichMessage].
|
||||
*/
|
||||
public val origin: @Polymorphic RichMessage,
|
||||
/**
|
||||
* 如果来自长消息或转发消息, 则会有 [resourceId], 否则为 `null`.
|
||||
*
|
||||
* - 下载长消息 [IMirai.downloadLongMessage]
|
||||
* - 下载合并转发消息 [IMirai.downloadForwardMessage]
|
||||
*/
|
||||
public val resourceId: String?,
|
||||
/**
|
||||
* 来源类型
|
||||
*/
|
||||
public val kind: RichMessageKind,
|
||||
) : MessageMetadata, ConstrainSingle {
|
||||
override val key: Key get() = Key
|
||||
|
||||
override fun toString(): String = ""
|
||||
override fun toString(): String {
|
||||
val resourceId = resourceId
|
||||
return if (resourceId == null) "[mirai:origin:$kind]"
|
||||
else "[mirai:origin:$kind,$resourceId]"
|
||||
}
|
||||
|
||||
override fun contentToString(): String = ""
|
||||
|
||||
public companion object Key : AbstractMessageKey<RichMessageOrigin>({ it.safeCast() })
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息来源
|
||||
*
|
||||
* @suppress 随着更新, 元素数量会增加. 类名不稳定.
|
||||
*
|
||||
* @since 2.3
|
||||
*/
|
||||
@MiraiExperimentalApi("RichMessageKind 类名不稳定")
|
||||
public enum class RichMessageKind {
|
||||
/**
|
||||
* 长消息
|
||||
*/
|
||||
LONG,
|
||||
|
||||
/**
|
||||
* 合并转发
|
||||
*/
|
||||
FORWARD,
|
||||
|
||||
// TODO: 2021/2/3 MusicShare RichMessageKind
|
||||
}
|
@ -24,7 +24,7 @@ internal data class LongMessageInternal internal constructor(override val conten
|
||||
val bot = contact.bot.asQQAndroidBot()
|
||||
val long = Mirai.downloadLongMessage(bot, resId)
|
||||
|
||||
return RichMessageOrigin(resId) + long
|
||||
return RichMessageOrigin(SimpleServiceMessage(serviceId, content), resId, RichMessageKind.LONG) + long
|
||||
}
|
||||
|
||||
companion object Key :
|
||||
@ -59,7 +59,7 @@ internal data class ForwardMessageInternal(override val content: String, val res
|
||||
val preview = titles
|
||||
val source = xmlFoot.findField("name")
|
||||
|
||||
return RichMessageOrigin(resId) + ForwardMessage(
|
||||
return RichMessageOrigin(SimpleServiceMessage(serviceId, content), resId, RichMessageKind.FORWARD) + ForwardMessage(
|
||||
preview = preview,
|
||||
title = title,
|
||||
brief = brief,
|
||||
|
Loading…
Reference in New Issue
Block a user