From 92a1b0d4df3d70431e09237ab61728d793894ee3 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Fri, 24 Apr 2020 15:12:33 +0800 Subject: [PATCH] Add imageId regex, fix #262 --- .../net.mamoe.mirai/message/data/Image.kt | 54 ++++++++++++++++--- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Image.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Image.kt index d504c68c1..d8cc19237 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Image.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Image.kt @@ -20,6 +20,7 @@ import net.mamoe.mirai.BotImpl import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.contact.Group import net.mamoe.mirai.utils.MiraiInternalAPI +import net.mamoe.mirai.utils.PlannedRemoval import net.mamoe.mirai.utils.SinceMirai import kotlin.js.JsName import kotlin.jvm.JvmMultifileClass @@ -52,6 +53,44 @@ expect interface Image : Message, MessageContent { val imageId: String } +/** + * 好友图片 ID 正则表达式 + * + * `/f8f1ab55-bf8e-4236-b55e-955848d7069f` + */ +@SinceMirai("0.39.2") +// Java: MessageUtils.FRIEND_IMAGE_ID_REGEX_1 +val FRIEND_IMAGE_ID_REGEX_1 = Regex("""/.{8}-(.{4}-){3}.{12}""") + +/** + * 好友图片 ID 正则表达式 2 + * + * `/000000000-3814297509-BFB7027B9354B8F899A062061D74E206` + * @see FRIEND_IMAGE_ID_REGEX_1 + */ +@SinceMirai("0.39.2") +// Java: MessageUtils.FRIEND_IMAGE_ID_REGEX_2 +val FRIEND_IMAGE_ID_REGEX_2 = Regex("""/[0-9]*-[0-9]*-[0-9a-zA-Z]{32}""") + +/** + * 群图片 ID 正则表达式 + * + * `{01E9451B-70ED-EAE3-B37C-101F1EEBF5B5}.mirai` + */ +@SinceMirai("0.39.2") +// Java: MessageUtils.GROUP_IMAGE_ID_REGEX +val GROUP_IMAGE_ID_REGEX = Regex("""\{.{8}-(.{4}-){3}.{12}}\.mirai""") + +/** + * 在 `0.39.1` 前的图片的正则表示 + */ +@Deprecated("Only for temporal use", + replaceWith = ReplaceWith("GROUP_IMAGE_ID_REGEX", "net.mamoe.mirai.message.data.GROUP_IMAGE_ID_REGEX")) +@SinceMirai("0.39.2") +@PlannedRemoval("1.0.0") +// Java: MessageUtils.GROUP_IMAGE_ID_REGEX_OLD +val GROUP_IMAGE_ID_REGEX_OLD = Regex("""\{.{8}-(.{4}-){3}.{12}}\..*""") + /** * 通过 [Image.imageId] 构造一个 [Image] 以便发送. * 这个图片必须是服务器已经存在的图片. @@ -62,25 +101,24 @@ expect interface Image : Message, MessageContent { * @see Image 获取更多说明 * @see Image.imageId 获取更多说明 */ -@Suppress("FunctionName") +@Suppress("FunctionName", "DEPRECATION") @JsName("newImage") @JvmName("newImage") fun Image(imageId: String): OfflineImage = when { - imageId.startsWith('/') -> OfflineFriendImage(imageId) // /f8f1ab55-bf8e-4236-b55e-955848d7069f - imageId.length == 42 || imageId.startsWith('{') && imageId.endsWith('}') -> OfflineGroupImage(imageId) // {01E9451B-70ED-EAE3-B37C-101F1EEBF5B5}.png + imageId matches FRIEND_IMAGE_ID_REGEX_1 -> OfflineFriendImage(imageId) + imageId matches FRIEND_IMAGE_ID_REGEX_2 -> OfflineFriendImage(imageId) + imageId matches GROUP_IMAGE_ID_REGEX -> OfflineGroupImage(imageId) + imageId matches GROUP_IMAGE_ID_REGEX_OLD -> OfflineGroupImage(imageId) else -> throw IllegalArgumentException("illegal imageId: $imageId. $ILLEGAL_IMAGE_ID_EXCEPTION_MESSAGE") } +@PlannedRemoval("1.0.0") @JvmSynthetic @Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN) @Suppress("FunctionName") @JsName("newImage") @JvmName("newImage") -fun Image2(imageId: String): Image = when { - imageId.startsWith('/') -> OfflineFriendImage(imageId) // /f8f1ab55-bf8e-4236-b55e-955848d7069f - imageId.length == 42 || imageId.startsWith('{') && imageId.endsWith('}') -> OfflineGroupImage(imageId) // {01E9451B-70ED-EAE3-B37C-101F1EEBF5B5}.png - else -> throw IllegalArgumentException("illegal imageId: $imageId. $ILLEGAL_IMAGE_ID_EXCEPTION_MESSAGE") -} +fun Image2(imageId: String): Image = Image(imageId) @MiraiInternalAPI("使用 Image") sealed class AbstractImage : Image {