From 99c1c44ae05abe04de47aba81f73f3869c8bbf6f Mon Sep 17 00:00:00 2001 From: RTAkland Date: Tue, 24 Sep 2024 00:48:23 +0800 Subject: [PATCH] feat: update lib and fix bug --- gradle/libs.versions.toml | 2 +- src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 40 +++++--------- .../commands/misc/AntiRevokeCommand.kt | 33 +++-------- .../commands/parse/ImageURLCommand.kt | 14 ++--- .../commands/parse/ReverseGIFCommand.kt | 55 ++++++++++++------- 5 files changed, 63 insertions(+), 81 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3840d7c..502acc5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] kotlinVersion = "2.0.10" -ronebotVersion = "1.9.2" +ronebotVersion = "1.10.0" 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 261a4ce..2b551bf 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -75,6 +75,17 @@ class FancyBot : OneBotListener { calculateResult?.let { message.reply(calculateResult) } } + 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!! + if (command.contains("图来") || command.contains("图链")) { + val getMsg = this.getMessage(replyId.toString().toLong()) + ImageURLCommand.callback(message, getMsg) + } + } + coroutineScope.launch { message.message.forEach { if (it.type == ArrayMessageType.image) { @@ -88,8 +99,6 @@ class FancyBot : OneBotListener { } } - AsciiArtCommand.callback(message) - if (message.rawMessage.startsWith("https://github.com/") || message.rawMessage.startsWith("git@github.com:")) { GitHubParseCommand.parse(this, message) } @@ -117,22 +126,12 @@ class FancyBot : OneBotListener { } BVParseCommand.getShortUrlBVID(shortUrl) } else { - message.rawMessage.split("?").first().split("/").filter { it.isNotEmpty() && it.isNotBlank() }.last() + message.rawMessage.split("?").first() + .split("/") + .last { it.isNotEmpty() && it.isNotBlank() } } BVParseCommand.parse(this, bvid, 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!! - if (command.contains("图来") || command.contains("图链")) { - // get image url - this.getMessage(replyId.toString().toLong(), "imageUrl", message.groupId) - } - if (command.contains("倒放") || command.contains("df")) { - // reverse gif - this.getMessage(replyId.toString().toLong(), "reverseGif", message.groupId) - } - } } override suspend fun onGroupMessageRevoke(message: GroupRevokeMessage) { @@ -145,15 +144,6 @@ class FancyBot : OneBotListener { this.sendGroupMessage(message.groupId, msg) } - - override suspend fun onGetGroupMessageResponse(message: GetMessage) { - when (message.data.id) { - "revoke" -> AntiRevokeCommand.callback(this, message) - "imageUrl" -> ImageURLCommand.callback(this, message) - "reverseGif" -> ReverseGIFCommand.callback(this, message) - } - } - override suspend fun onWebsocketErrorEvent(ex: Exception) { ex.printStackTrace() } @@ -209,7 +199,7 @@ val commands = listOf( AsciiArtCommand(), StatusCommand(), JueCommand(), ShortLinkCommand(), TenSetuCommand(), ShotSelfCommand(), - ShotOtherCommand() + ShotOtherCommand(), ReverseGIFCommand() ) val START_UP_TIME = Instant.now().epochSecond diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/misc/AntiRevokeCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/misc/AntiRevokeCommand.kt index 0dbaf74..56332e0 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/misc/AntiRevokeCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/misc/AntiRevokeCommand.kt @@ -9,41 +9,22 @@ package cn.rtast.fancybot.commands.misc import cn.rtast.fancybot.configManager import cn.rtast.rob.entity.ArrayMessage -import cn.rtast.rob.entity.GetMessage import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.enums.ArrayMessageType import cn.rtast.rob.util.BaseCommand -import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OneBotListener class AntiRevokeCommand : BaseCommand() { override val commandNames = listOf("/revoke", "/rv", "/防撤回") override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { - if (message.sender.userId !in configManager.admins) { - message.reply("你不许用防撤回") - } + if (message.sender.userId !in configManager.admins) message.reply("你不许用防撤回") val messageId = args.first().toLong() - listener.getMessage(messageId, "revoke", message.groupId) - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("正在获取消息中...") - .build() - listener.sendGroupMessage(message.groupId, msg) - } - - companion object { - suspend fun callback(listener: OneBotListener, message: GetMessage) { - val msgList = mutableListOf() - msgList.add( - ArrayMessage( - ArrayMessageType.at, - ArrayMessage.Data(qq = message.data.sender.userId.toString()) - ) - ) - msgList.add(ArrayMessage(ArrayMessageType.text, ArrayMessage.Data(text = "\n被撤回的消息如下: \n"))) - msgList.addAll(message.data.message) - listener.sendGroupMessage(message.data.groupId!!, msgList) - } + val getMsg = listener.getMessage(messageId) + val msgList = mutableListOf() + msgList.add(ArrayMessage(ArrayMessageType.at, ArrayMessage.Data(qq = getMsg.sender.userId.toString()))) + msgList.add(ArrayMessage(ArrayMessageType.text, ArrayMessage.Data(text = "\n被撤回的消息如下: \n"))) + msgList.addAll(getMsg.message) + listener.sendGroupMessage(message.groupId, msgList) } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/parse/ImageURLCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/parse/ImageURLCommand.kt index 6c3edf8..8cc69c6 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/parse/ImageURLCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/parse/ImageURLCommand.kt @@ -8,25 +8,23 @@ package cn.rtast.fancybot.commands.parse import cn.rtast.rob.entity.GetMessage +import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.enums.ArrayMessageType import cn.rtast.rob.util.ob.MessageChain -import cn.rtast.rob.util.ob.OneBotListener object ImageURLCommand { - - suspend fun callback(listener: OneBotListener, message: GetMessage) { + suspend fun callback(groupMessage: GroupMessage, message: GetMessage.Data) { val msg = MessageChain.Builder() - .addReply(message.data.messageId) + .addReply(message.messageId) .addText("哈哈哈哈图片来咯~") .addNewLine() - val image = message.data.message.find { it.type == ArrayMessageType.image } + val image = message.message.find { it.type == ArrayMessageType.image } if (image == null) { - val gif = message.data.message.find { it.type == ArrayMessageType.mface }!! + val gif = message.message.find { it.type == ArrayMessageType.mface }!! msg.addText(gif.data.url!!) } else { msg.addText(image.data.file!!) - } - listener.sendGroupMessage(message.data.groupId!!, msg.build()) + groupMessage.reply(msg.build()) } } \ No newline at end of file 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 374e8d8..c4e5daf 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/parse/ReverseGIFCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/parse/ReverseGIFCommand.kt @@ -9,37 +9,50 @@ package cn.rtast.fancybot.commands.parse import cn.rtast.fancybot.util.makeGif import cn.rtast.fancybot.util.str.encodeToBase64 -import cn.rtast.rob.entity.GetMessage +import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.enums.ArrayMessageType +import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OneBotListener -import com.madgag.gif.fmsware.AnimatedGifEncoder import com.madgag.gif.fmsware.GifDecoder -import java.io.ByteArrayOutputStream import java.net.URI -object ReverseGIFCommand { +class ReverseGIFCommand : BaseCommand() { + override val commandNames = listOf("倒放") - 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() + companion object { + private val waitingList = mutableListOf() + + 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 callback(message: GroupMessage) { + if (message.sender.userId !in waitingList) return + 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) + waitingList.removeIf { it == message.sender.userId } + } } - suspend fun callback(listener: OneBotListener, message: GetMessage) { - val gifUrl = if (message.data.message.find { it.type == ArrayMessageType.mface } == null) { - message.data.message.find { it.type == ArrayMessageType.image }!!.data.file!! + override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { + if (message.sender.userId !in waitingList) { + waitingList.add(message.sender.userId) + message.reply("发送一张动图来继续操作") } else { - message.data.message.find { it.type == ArrayMessageType.mface }!!.data.url!! + message.reply("发送错误本次操作已取消") + waitingList.removeIf { it == message.sender.userId } } - val base64String = this.reverseGif(gifUrl) - val msg = MessageChain.Builder() - .addReply(message.data.messageId) - .addImage(base64String, true) - .build() - listener.sendGroupMessage(message.data.groupId!!, msg) } } \ No newline at end of file