Files
FancyBot/src/main/kotlin/cn/rtast/fancybot/commands/parse/ReverseGIFCommand.kt
T

74 lines
2.7 KiB
Kotlin
Raw Normal View History

/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/9/8
*/
2024-09-13 12:44:10 +08:00
package cn.rtast.fancybot.commands.parse
import cn.rtast.fancybot.annotations.CommandDescription
2024-10-09 13:06:43 +08:00
import cn.rtast.fancybot.util.misc.makeGif
import cn.rtast.fancybot.util.str.encodeToBase64
2024-10-17 22:16:27 +08:00
import cn.rtast.rob.entity.GetMessage
2024-09-24 00:48:23 +08:00
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.enums.ArrayMessageType
2024-11-08 20:59:51 +08:00
import cn.rtast.rob.onebot.MessageChain
2024-09-24 00:48:23 +08:00
import cn.rtast.rob.util.BaseCommand
import com.madgag.gif.fmsware.GifDecoder
import java.net.URI
@CommandDescription("倒放GIF")
2024-09-24 00:48:23 +08:00
class ReverseGIFCommand : BaseCommand() {
override val commandNames = listOf("倒放")
2024-09-24 00:48:23 +08:00
companion object {
private val waitingList = mutableListOf<Long>()
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 gifBytes = decoder.makeGif(frames)
return gifBytes.encodeToBase64()
}
suspend fun reverse(message: GroupMessage, getMsg: GetMessage.Message) {
2024-10-17 22:16:27 +08:00
val imageObject = getMsg.message.find { it.type == ArrayMessageType.image }
if (imageObject == null) {
message.reply("这个消息中没有图片呢")
} else {
val url = imageObject.data.file!!
val image = this.reverseGif(url)
val msg = MessageChain.Builder()
.addImage(image, true)
.build()
message.reply(msg)
}
}
2024-09-24 00:48:23 +08:00
suspend fun callback(message: GroupMessage) {
if (message.sender.userId !in waitingList) return
waitingList.removeIf { it == message.sender.userId }
2024-09-24 00:48:23 +08:00
val gifUrl = if (message.message.find { it.type == ArrayMessageType.mface } == null) {
message.message.find { it.type == ArrayMessageType.image }!!.data.file!!
} else {
message.message.find { it.type == ArrayMessageType.mface }!!.data.url!!
}
val base64String = this.reverseGif(gifUrl)
val msg = MessageChain.Builder().addImage(base64String, true).build()
message.reply(msg)
}
}
2024-10-31 14:02:04 +08:00
override suspend fun executeGroup(message: GroupMessage, args: List<String>) {
2024-09-24 00:48:23 +08:00
if (message.sender.userId !in waitingList) {
message.reply("发送一张动图来继续操作")
waitingList.add(message.sender.userId)
2024-09-08 18:02:52 +08:00
} else {
2024-09-24 00:48:23 +08:00
message.reply("发送错误本次操作已取消")
waitingList.removeIf { it == message.sender.userId }
2024-09-08 18:02:52 +08:00
}
}
}