49 lines
1.6 KiB
Kotlin
49 lines
1.6 KiB
Kotlin
/*
|
|
* Copyright © 2024 RTAkland
|
|
* Author: RTAkland
|
|
* Date: 2024/9/8
|
|
*/
|
|
|
|
|
|
package cn.rtast.fancybot.commands.misc
|
|
|
|
import cn.rtast.fancybot.util.str.encodeToBase64
|
|
import cn.rtast.rob.entity.GetMessage
|
|
import cn.rtast.rob.enums.ArrayMessageType
|
|
import cn.rtast.rob.util.ob.MessageChain
|
|
import cn.rtast.rob.util.ob.OBMessage
|
|
import com.madgag.gif.fmsware.AnimatedGifEncoder
|
|
import com.madgag.gif.fmsware.GifDecoder
|
|
import java.io.ByteArrayOutputStream
|
|
import java.net.URI
|
|
|
|
object ReverseGIFCommand {
|
|
|
|
private fun reverseGif(gifUrl: String): String {
|
|
val gifStream = URI(gifUrl).toURL().openStream()
|
|
val decoder = GifDecoder()
|
|
decoder.read(gifStream)
|
|
val frames = (0 until decoder.frameCount).map { decoder.getFrame(it) }.reversed()
|
|
val byteArrayOutputStream = ByteArrayOutputStream()
|
|
val encoder = AnimatedGifEncoder()
|
|
encoder.start(byteArrayOutputStream)
|
|
encoder.setRepeat(0)
|
|
for (i in frames.indices) {
|
|
encoder.setDelay(decoder.getDelay(decoder.frameCount - i - 1))
|
|
encoder.addFrame(frames[i])
|
|
}
|
|
encoder.finish()
|
|
val gifBytes = byteArrayOutputStream.toByteArray()
|
|
return gifBytes.encodeToBase64()
|
|
}
|
|
|
|
suspend fun callback(listener: OBMessage, message: GetMessage) {
|
|
val gifUrl = message.data.message.find { it.type == ArrayMessageType.mface }!!.data.url!!
|
|
val base64String = this.reverseGif(gifUrl)
|
|
val msg = MessageChain.Builder()
|
|
.addReply(message.data.messageId)
|
|
.addImage(base64String, true)
|
|
.build()
|
|
listener.sendGroupMessage(message.data.groupId!!, msg)
|
|
}
|
|
} |