From 933095e9dd86a7223cc4c8581d1e955c225cd7aa Mon Sep 17 00:00:00 2001 From: ForteScarlet Date: Wed, 10 Jul 2024 16:55:43 +0800 Subject: [PATCH] =?UTF-8?q?optimize(api):=20=E5=A2=9E=E5=8A=A0=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=20UrlAwareMessage=20=E7=94=A8=E4=BB=A5=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E8=83=BD=E5=A4=9F=E8=8E=B7=E5=8F=96=E5=88=B0=20URL=20?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E7=9A=84=E6=B6=88=E6=81=AF=E5=85=83=E7=B4=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildSrc/src/main/kotlin/P.kt | 2 +- simbot-api/api/simbot-api.api | 10 ++++-- .../forte/simbot/message/StandardMessages.kt | 34 +++++++++++++++---- website | 2 +- 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/buildSrc/src/main/kotlin/P.kt b/buildSrc/src/main/kotlin/P.kt index 2c1227b28..f81c153ef 100644 --- a/buildSrc/src/main/kotlin/P.kt +++ b/buildSrc/src/main/kotlin/P.kt @@ -53,7 +53,7 @@ sealed class P(override val group: String) : ProjectDetail() { companion object { const val VERSION = "4.2.0" const val SNAPSHOT_VERSION = "$VERSION-SNAPSHOT" - const val NEXT_VERSION = "4.2.0" + const val NEXT_VERSION = "4.3.0" const val NEXT_SNAPSHOT_VERSION = "$NEXT_VERSION-SNAPSHOT" const val GROUP = "love.forte.simbot" diff --git a/simbot-api/api/simbot-api.api b/simbot-api/api/simbot-api.api index 9dfa60b93..af47d344a 100644 --- a/simbot-api/api/simbot-api.api +++ b/simbot-api/api/simbot-api.api @@ -1830,7 +1830,7 @@ public final class love/forte/simbot/message/AtAll : love/forte/simbot/message/M public fun toString ()Ljava/lang/String; } -public final class love/forte/simbot/message/Emoji : love/forte/simbot/message/EmoticonMessage { +public final class love/forte/simbot/message/Emoji : love/forte/simbot/message/EmoticonMessage, love/forte/simbot/message/StandardMessage { public static final field Companion Llove/forte/simbot/message/Emoji$Companion; public fun (Llove/forte/simbot/common/id/ID;)V public final fun component1 ()Llove/forte/simbot/common/id/ID; @@ -1860,7 +1860,7 @@ public final class love/forte/simbot/message/Emoji$Companion { public abstract interface class love/forte/simbot/message/EmoticonMessage : love/forte/simbot/message/StandardMessage { } -public final class love/forte/simbot/message/Face : love/forte/simbot/message/EmoticonMessage { +public final class love/forte/simbot/message/Face : love/forte/simbot/message/EmoticonMessage, love/forte/simbot/message/StandardMessage { public static final field Companion Llove/forte/simbot/message/Face$Companion; public fun (Llove/forte/simbot/common/id/ID;)V public final fun component1 ()Llove/forte/simbot/common/id/ID; @@ -2319,7 +2319,11 @@ public final class love/forte/simbot/message/Text$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } -public abstract interface class love/forte/simbot/message/UrlAwareImage : love/forte/simbot/message/Image { +public abstract interface class love/forte/simbot/message/UrlAwareImage : love/forte/simbot/message/Image, love/forte/simbot/message/UrlAwareMessage { + public abstract synthetic fun url (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public abstract interface class love/forte/simbot/message/UrlAwareMessage { public fun getUrl ()Ljava/lang/String; public fun getUrlAsync ()Ljava/util/concurrent/CompletableFuture; public fun getUrlReserve ()Llove/forte/simbot/suspendrunner/reserve/SuspendReserve; diff --git a/simbot-api/src/commonMain/kotlin/love/forte/simbot/message/StandardMessages.kt b/simbot-api/src/commonMain/kotlin/love/forte/simbot/message/StandardMessages.kt index 37afc1c59..d823ab005 100644 --- a/simbot-api/src/commonMain/kotlin/love/forte/simbot/message/StandardMessages.kt +++ b/simbot-api/src/commonMain/kotlin/love/forte/simbot/message/StandardMessages.kt @@ -228,7 +228,13 @@ public data object AtAll : MentionMessage /** * 一个图片消息元素类型。 * - * 图片消息可能被分为 [离线图片][OfflineImage] 和 [远端图片][RemoteImage]。 + * 图片消息可能被分为 [离线图片][OfflineImage] + * 和 [远端图片][RemoteImage]。 + * + * 在不同的平台中,图片的表现方式或实现方式千变万化, + * 它们的类型很可能并非标准消息类型中提供的已知类型。 + * 对于实现者,应当尽可能支持 [UrlAwareImage] + * 来表示一个能够得到 URL 信息的图片。 * * @see OfflineImage * @see RemoteImage @@ -250,12 +256,12 @@ public interface IDAwareImage : Image { * 一个可以感知或获取到 url 信息的 [Image]。 * */ -@STP -public interface UrlAwareImage : Image { +public interface UrlAwareImage : Image, UrlAwareMessage { /** - * 获取到这个图片的链接字符串。 + * 获取或查询此图片的链接。 */ - public suspend fun url(): String + @JvmSynthetic + override suspend fun url(): String } @@ -437,13 +443,27 @@ public interface EmoticonMessage : StandardMessage */ @Serializable @SerialName("m.std.emoji") -public data class Emoji(public val id: ID) : EmoticonMessage +public data class Emoji(public val id: ID) : StandardMessage, EmoticonMessage /** * 一个表情。一般代表平台提供的自带系统表情。 */ @Serializable @SerialName("m.std.face") -public data class Face(public val id: ID) : EmoticonMessage +public data class Face(public val id: ID) : StandardMessage, EmoticonMessage //endregion + +/** + * 表示为一个可以得知 URL 地址的消息元素, + * 例如 [UrlAwareImage]。 + * + * @since 4.3.0 + */ +@STP +public interface UrlAwareMessage { + /** + * 获取到链接字符串。 + */ + public suspend fun url(): String +} diff --git a/website b/website index b307a0836..ea9774ca8 160000 --- a/website +++ b/website @@ -1 +1 @@ -Subproject commit b307a08362449a74633cad601609f6a8b62abf69 +Subproject commit ea9774ca8e1d6c09e5fc843e72dc282d82887c00