diff --git a/mirai-core-utils/src/commonMain/kotlin/Bytes.kt b/mirai-core-utils/src/commonMain/kotlin/Bytes.kt index aaca3c307..a8f42cc29 100644 --- a/mirai-core-utils/src/commonMain/kotlin/Bytes.kt +++ b/mirai-core-utils/src/commonMain/kotlin/Bytes.kt @@ -27,11 +27,25 @@ public fun generateImageId(md5: ByteArray, format: String = "mirai"): String { @JvmOverloads public fun generateImageIdFromResourceId(resourceId: String, format: String = "mirai"): String? { - // friend image id: /1040400290-3666252994-EFF4427CE3D27DB6B1D9A8AB72E7A29C - // friend image id: /1040400290-3666252994-EFF4427C E3D2 7DB6 B1D9 A8AB72E7A29C + // friend image id: /f8f1ab55-bf8e-4236-b55e-955848d7069f + // friend image id: / f8f1ab55-bf8e-4236-b55e-955848d7069f + + // friend image id: /0000000000-3666252994-EFF4427CE3D27DB6B1D9A8AB72E7A29C + // friend image id: /0000000000-3666252994-EFF4427C E3D2 7DB6 B1D9 A8AB72E7A29C // group image id: {EF42A82D-8DB6-5D0F-4F11-68961D8DA5CB}.png - val md5String = resourceId.substringAfterLast("-").substringAfter("/").takeIf { it.length == 32 } ?: return null + if (resourceId.isNotEmpty()) { + if (resourceId[0] == '{') { + // {EF42A82D-8DB6-5D0F-4F11-68961D8DA5CB + if (resourceId.substringBefore('}', "").length == 37) { + return resourceId + } + } + } + + val md5String = resourceId.substringAfterLast("-").substringAfter("/").takeIf { it.length == 32 } + ?: resourceId.replace("-", "").substringAfter('/').takeIf { it.length == 32 } + ?: return null return "{${generateUUID(md5String)}}.$format" } diff --git a/mirai-core-utils/src/commonTest/kotlin/net/mamoe/mirai/utils/ImageIdConversionTest.kt b/mirai-core-utils/src/commonTest/kotlin/net/mamoe/mirai/utils/ImageIdConversionTest.kt new file mode 100644 index 000000000..ffe4cb0de --- /dev/null +++ b/mirai-core-utils/src/commonTest/kotlin/net/mamoe/mirai/utils/ImageIdConversionTest.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2019-2021 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.utils + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals + +internal class ImageIdConversionTest { + @Test + fun testConversions() { + assertEquals( + "{f8f1ab55-bf8e-4236-b55e-955848d7069f}.mirai", + generateImageIdFromResourceId("/f8f1ab55-bf8e-4236-b55e-955848d7069f"), + ) + assertEquals( + "{EFF4427C-E3D2-7DB6-B1D9-A8AB72E7A29C}.mirai", + generateImageIdFromResourceId("/000000000-3666252994-EFF4427CE3D27DB6B1D9A8AB72E7A29C"), + ) + assertEquals( + "{EF42A82D-8DB6-5D0F-4F11-68961D8DA5CB}.png", + generateImageIdFromResourceId("{EF42A82D-8DB6-5D0F-4F11-68961D8DA5CB}.png"), + ) + } +} \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/message/imagesImpl.kt b/mirai-core/src/commonMain/kotlin/message/imagesImpl.kt index 75a0d1814..04b736eff 100644 --- a/mirai-core/src/commonMain/kotlin/message/imagesImpl.kt +++ b/mirai-core/src/commonMain/kotlin/message/imagesImpl.kt @@ -138,7 +138,7 @@ internal fun ImMsgBody.NotOnlineImage.toCustomFace(): ImMsgBody.CustomFace { bigUrl = bigUrl, origUrl = origUrl, //_400Height = 235, - //_400Url = "/gchatpic_new/1040400290/1041235568-2195821338-01E9451B70EDEAE3B37C101F1EEBF5B5/400?term=2", + //_400Url = "/gchatpic_new/000000000/1041235568-2195821338-01E9451B70EDEAE3B37C101F1EEBF5B5/400?term=2", //_400Width = 351, oldData = this.oldVerSendFile ) @@ -182,7 +182,7 @@ internal fun OfflineGroupImage.toJceData(): ImMsgBody.CustomFace { picMd5 = this.md5, flag = ByteArray(4), //_400Height = 235, - //_400Url = "/gchatpic_new/1040400290/1041235568-2195821338-01E9451B70EDEAE3B37C101F1EEBF5B5/400?term=2", + //_400Url = "/gchatpic_new/000000000/1041235568-2195821338-01E9451B70EDEAE3B37C101F1EEBF5B5/400?term=2", //_400Width = 351, oldData = oldData )