Sfoglia il codice sorgente

Support ShortVideo

ryoii 2 anni fa
parent
commit
050d0c4a16

+ 21 - 0
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/adapter/internal/convertor/convertor.kt

@@ -80,6 +80,7 @@ internal suspend fun MessageDTO.toMessage(contact: Contact, cache: Persistence)
     is PokeMessageDTO -> PokeMap[name]
     is DiceDTO -> Dice(value)
     is MusicShareDTO -> MusicShare(MusicKind.valueOf(kind), title, summary, jumpUrl, pictureUrl, musicUrl, brief)
+    is ShortVideoDTO -> videoLikeToMessage(contact)
     is ForwardMessageDTO -> buildForwardMessage(contact) {
         display?.let { displayStrategy = display }
         nodeList.forEach {
@@ -158,4 +159,24 @@ private suspend fun VoiceLikeDTO.voiceLikeToMessage(contact: Contact) = when {
     }
 
     else -> null
+}
+
+private suspend fun VedioLikeDTO.videoLikeToMessage(contact: Contact) = when {
+    contact !is AudioSupported -> null
+    videoUrl != null && thumbnailUrl != null -> withContext(Dispatchers.IO) {
+        thumbnailUrl!!.useUrl { thumb ->
+            videoUrl!!.useUrl { video ->
+                contact.uploadShortVideo(thumb, video, filename)
+            }
+        }
+    }
+    else -> {
+        OfflineShortVideo(
+            videoId,
+            filename,
+            fileFormat,
+            fileMd5.toHexArray(),
+            fileSize,
+        )
+    }
 }

+ 3 - 0
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/adapter/internal/convertor/message.kt

@@ -12,6 +12,7 @@ package net.mamoe.mirai.api.http.adapter.internal.convertor
 import net.mamoe.mirai.api.http.adapter.internal.dto.*
 import net.mamoe.mirai.api.http.util.FaceMap
 import net.mamoe.mirai.api.http.util.PokeMap
+import net.mamoe.mirai.api.http.util.toHexString
 import net.mamoe.mirai.contact.Group
 import net.mamoe.mirai.event.events.*
 import net.mamoe.mirai.message.data.*
@@ -87,5 +88,7 @@ internal suspend fun Message.toDTO() = when (this) {
         ForwardMessageNode(it.senderId, it.time, it.senderName, it.messageChain.toDTO { d -> d != UnknownMessageDTO })
     })
     is FileMessage -> FileDTO(id, name, size)
+    is OnlineShortVideo -> ShortVideoDTO(videoId, fileMd5.toHexString(), fileSize, fileFormat, filename, urlForDownload)
+    is OfflineShortVideo -> ShortVideoDTO(videoId, fileMd5.toHexString(), fileSize, fileFormat, filename, null)
     else -> UnknownMessageDTO
 }

+ 22 - 0
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/adapter/internal/dto/message.kt

@@ -99,6 +99,16 @@ internal interface VoiceLikeDTO {
     val length: Long
 }
 
+internal interface VedioLikeDTO {
+    val videoId: String
+    val fileMd5: String
+    val fileSize: Long
+    val fileFormat: String
+    val filename: String
+    val videoUrl: String?
+    val thumbnailUrl: String?
+}
+
 @Serializable
 @SerialName("Image")
 internal data class ImageDTO(
@@ -230,6 +240,18 @@ internal data class FileDTO(
     val size: Long,
 ) : MessageDTO()
 
+@Serializable
+@SerialName("ShortVideo")
+internal data class ShortVideoDTO(
+    override val videoId: String,
+    override val fileMd5: String,
+    override val fileSize: Long,
+    override val fileFormat: String,
+    override val filename: String,
+    override val videoUrl: String? = null,
+    override val thumbnailUrl: String? = null,
+) : MessageDTO(), VedioLikeDTO
+
 @Serializable
 @SerialName("MiraiCode")
 internal data class MiraiCodeDTO(