diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9bd43a2..06cac7c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] kotlinVersion = "2.0.10" -ronebotVersion = "1.11.1" +ronebotVersion = "1.11.2" shadowVersion = "8.3.0" okhttpVersion = "5.0.0-alpha.14" exposedVersion = "0.53.0" diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index ba7ed35..dcf9617 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -7,12 +7,7 @@ package cn.rtast.fancybot -import cn.rtast.fancybot.commands.parse.AsciiArtCommand -import cn.rtast.fancybot.commands.parse.BVParseCommand -import cn.rtast.fancybot.commands.parse.CalculateCommand -import cn.rtast.fancybot.commands.parse.GitHubParseCommand -import cn.rtast.fancybot.commands.parse.ImageURLCommand -import cn.rtast.fancybot.commands.parse.ReverseGIFCommand +import cn.rtast.fancybot.commands.parse.* import cn.rtast.fancybot.entity.bili.CardShare import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.util.initDatabase @@ -55,6 +50,7 @@ class FancyBot : OneBotListener { ReverseGIFCommand.callback(message) AsciiArtCommand.callback(message) + if (message.message.any { it.type == ArrayMessageType.reply }) { // Image url parse val command = message.message.reversed().find { it.type == ArrayMessageType.text }!!.data.text!! val replyId = message.message.find { it.type == ArrayMessageType.reply }!!.data.id!! diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/parse/AsciiArtCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/parse/AsciiArtCommand.kt index bc9ca35..2584113 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/parse/AsciiArtCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/parse/AsciiArtCommand.kt @@ -87,41 +87,40 @@ class AsciiArtCommand : BaseCommand() { } suspend fun callback(message: GroupMessage) { - if (message.sender.userId in waitingList) { - if (message.message.any { it.type == ArrayMessageType.image } - || message.message.any { it.type == ArrayMessageType.mface }) { - val url = if (message.message.any { it.type == ArrayMessageType.image }) - message.message.find { it.type == ArrayMessageType.image }!!.data.file!! - else message.message.find { it.type == ArrayMessageType.mface }!!.data.url!! - val gifStream = withContext(Dispatchers.IO) { URI(url).toURL().openStream() } - val decoder = GifDecoder() - try { - decoder.read(gifStream) - if (decoder.frameCount == 0) { - val bufferedImage = withContext(Dispatchers.IO) { ImageIO.read(URI(url).toURL()) } - val imageBase64 = bufferedImage.convertToAscii() - .saveAsciiArtToImage(bufferedImage.width, bufferedImage.height) - .toByteArray().encodeToBase64() - val msg = MessageChain.Builder().addImage(imageBase64, true).build() - message.reply(msg) - } else { - println("Making gif ascii art, frames: ${decoder.frameCount}") - val frames = (0 until decoder.frameCount).map { decoder.getFrame(it) } - val asciiFrames = mutableListOf() - val width = frames.first().width - val height = frames.first().height - frames.forEach { asciiFrames.add(it.convertToAscii().saveAsciiArtToImage(width, height)) } - val gifBytes = decoder.makeGif(asciiFrames) - val gifBase64 = gifBytes.encodeToBase64() - message.reply(MessageChain.Builder().addImage(gifBase64, true).build()) - } - } catch (_: Exception) { - message.reply("处理GIF失败") + if (message.sender.userId !in waitingList) return + waitingList.removeIf { it == message.sender.userId } + if (message.message.any { it.type == ArrayMessageType.image } + || message.message.any { it.type == ArrayMessageType.mface }) { + val url = if (message.message.any { it.type == ArrayMessageType.image }) + message.message.find { it.type == ArrayMessageType.image }!!.data.file!! + else message.message.find { it.type == ArrayMessageType.mface }!!.data.url!! + val gifStream = withContext(Dispatchers.IO) { URI(url).toURL().openStream() } + val decoder = GifDecoder() + try { + decoder.read(gifStream) + if (decoder.frameCount == 0) { + val bufferedImage = withContext(Dispatchers.IO) { ImageIO.read(URI(url).toURL()) } + val imageBase64 = bufferedImage.convertToAscii() + .saveAsciiArtToImage(bufferedImage.width, bufferedImage.height) + .toByteArray().encodeToBase64() + val msg = MessageChain.Builder().addImage(imageBase64, true).build() + message.reply(msg) + } else { + println("Making gif ascii art, frames: ${decoder.frameCount}") + val frames = (0 until decoder.frameCount).map { decoder.getFrame(it) } + val asciiFrames = mutableListOf() + val width = frames.first().width + val height = frames.first().height + frames.forEach { asciiFrames.add(it.convertToAscii().saveAsciiArtToImage(width, height)) } + val gifBytes = decoder.makeGif(asciiFrames) + val gifBase64 = gifBytes.encodeToBase64() + message.reply(MessageChain.Builder().addImage(gifBase64, true).build()) } - } else { - message.reply("回复错误已取消本次操作") + } catch (_: Exception) { + message.reply("处理GIF失败") } - waitingList.removeIf { it == message.sender.userId } + } else { + message.reply("回复错误已取消本次操作") } } } diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/parse/ReverseGIFCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/parse/ReverseGIFCommand.kt index 916334c..5cb9768 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/parse/ReverseGIFCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/parse/ReverseGIFCommand.kt @@ -36,6 +36,7 @@ class ReverseGIFCommand : BaseCommand() { suspend fun callback(message: GroupMessage) { if (message.sender.userId !in waitingList) return + waitingList.removeIf { it == message.sender.userId } val gifUrl = if (message.message.find { it.type == ArrayMessageType.mface } == null) { message.message.find { it.type == ArrayMessageType.image }!!.data.file!! } else { @@ -44,14 +45,13 @@ class ReverseGIFCommand : BaseCommand() { val base64String = this.reverseGif(gifUrl) val msg = MessageChain.Builder().addImage(base64String, true).build() message.reply(msg) - waitingList.removeIf { it == message.sender.userId } } } override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (message.sender.userId !in waitingList) { - waitingList.add(message.sender.userId) message.reply("发送一张动图来继续操作") + waitingList.add(message.sender.userId) } else { message.reply("发送错误本次操作已取消") waitingList.removeIf { it == message.sender.userId }