feat: update lib and fix bug

This commit is contained in:
2024-09-24 00:48:23 +08:00
parent d208472b0a
commit 99c1c44ae0
5 files changed
+63 -81

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
[versions] [versions]
kotlinVersion = "2.0.10" kotlinVersion = "2.0.10"
ronebotVersion = "1.9.2" ronebotVersion = "1.10.0"
shadowVersion = "8.3.0" shadowVersion = "8.3.0"
okhttpVersion = "5.0.0-alpha.14" okhttpVersion = "5.0.0-alpha.14"
exposedVersion = "0.53.0" exposedVersion = "0.53.0"
+15 -25
View File
@@ -75,6 +75,17 @@ class FancyBot : OneBotListener {
calculateResult?.let { message.reply(calculateResult) } 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 { coroutineScope.launch {
message.message.forEach { message.message.forEach {
if (it.type == ArrayMessageType.image) { 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:")) { if (message.rawMessage.startsWith("https://github.com/") || message.rawMessage.startsWith("git@github.com:")) {
GitHubParseCommand.parse(this, message) GitHubParseCommand.parse(this, message)
} }
@@ -117,22 +126,12 @@ class FancyBot : OneBotListener {
} }
BVParseCommand.getShortUrlBVID(shortUrl) BVParseCommand.getShortUrlBVID(shortUrl)
} else { } 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) 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) { override suspend fun onGroupMessageRevoke(message: GroupRevokeMessage) {
@@ -145,15 +144,6 @@ class FancyBot : OneBotListener {
this.sendGroupMessage(message.groupId, msg) 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) { override suspend fun onWebsocketErrorEvent(ex: Exception) {
ex.printStackTrace() ex.printStackTrace()
} }
@@ -209,7 +199,7 @@ val commands = listOf(
AsciiArtCommand(), StatusCommand(), AsciiArtCommand(), StatusCommand(),
JueCommand(), ShortLinkCommand(), JueCommand(), ShortLinkCommand(),
TenSetuCommand(), ShotSelfCommand(), TenSetuCommand(), ShotSelfCommand(),
ShotOtherCommand() ShotOtherCommand(), ReverseGIFCommand()
) )
val START_UP_TIME = Instant.now().epochSecond val START_UP_TIME = Instant.now().epochSecond
@@ -9,41 +9,22 @@ package cn.rtast.fancybot.commands.misc
import cn.rtast.fancybot.configManager import cn.rtast.fancybot.configManager
import cn.rtast.rob.entity.ArrayMessage import cn.rtast.rob.entity.ArrayMessage
import cn.rtast.rob.entity.GetMessage
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.enums.ArrayMessageType import cn.rtast.rob.enums.ArrayMessageType
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain
import cn.rtast.rob.util.ob.OneBotListener import cn.rtast.rob.util.ob.OneBotListener
class AntiRevokeCommand : BaseCommand() { class AntiRevokeCommand : BaseCommand() {
override val commandNames = listOf("/revoke", "/rv", "/防撤回") override val commandNames = listOf("/revoke", "/rv", "/防撤回")
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
if (message.sender.userId !in configManager.admins) { if (message.sender.userId !in configManager.admins) message.reply("你不许用防撤回")
message.reply("你不许用防撤回")
}
val messageId = args.first().toLong() val messageId = args.first().toLong()
listener.getMessage(messageId, "revoke", message.groupId) val getMsg = listener.getMessage(messageId)
val msg = MessageChain.Builder() val msgList = mutableListOf<ArrayMessage>()
.addAt(message.sender.userId) msgList.add(ArrayMessage(ArrayMessageType.at, ArrayMessage.Data(qq = getMsg.sender.userId.toString())))
.addText("正在获取消息中...") msgList.add(ArrayMessage(ArrayMessageType.text, ArrayMessage.Data(text = "\n被撤回的消息如下: \n")))
.build() msgList.addAll(getMsg.message)
listener.sendGroupMessage(message.groupId, msg) listener.sendGroupMessage(message.groupId, msgList)
}
companion object {
suspend fun callback(listener: OneBotListener, message: GetMessage) {
val msgList = mutableListOf<ArrayMessage>()
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)
}
} }
} }
@@ -8,25 +8,23 @@
package cn.rtast.fancybot.commands.parse package cn.rtast.fancybot.commands.parse
import cn.rtast.rob.entity.GetMessage import cn.rtast.rob.entity.GetMessage
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.enums.ArrayMessageType import cn.rtast.rob.enums.ArrayMessageType
import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.MessageChain
import cn.rtast.rob.util.ob.OneBotListener
object ImageURLCommand { object ImageURLCommand {
suspend fun callback(groupMessage: GroupMessage, message: GetMessage.Data) {
suspend fun callback(listener: OneBotListener, message: GetMessage) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addReply(message.data.messageId) .addReply(message.messageId)
.addText("哈哈哈哈图片来咯~") .addText("哈哈哈哈图片来咯~")
.addNewLine() .addNewLine()
val image = message.data.message.find { it.type == ArrayMessageType.image } val image = message.message.find { it.type == ArrayMessageType.image }
if (image == null) { 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!!) msg.addText(gif.data.url!!)
} else { } else {
msg.addText(image.data.file!!) msg.addText(image.data.file!!)
} }
listener.sendGroupMessage(message.data.groupId!!, msg.build()) groupMessage.reply(msg.build())
} }
} }
@@ -9,37 +9,50 @@ package cn.rtast.fancybot.commands.parse
import cn.rtast.fancybot.util.makeGif import cn.rtast.fancybot.util.makeGif
import cn.rtast.fancybot.util.str.encodeToBase64 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.enums.ArrayMessageType
import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.MessageChain
import cn.rtast.rob.util.ob.OneBotListener import cn.rtast.rob.util.ob.OneBotListener
import com.madgag.gif.fmsware.AnimatedGifEncoder
import com.madgag.gif.fmsware.GifDecoder import com.madgag.gif.fmsware.GifDecoder
import java.io.ByteArrayOutputStream
import java.net.URI import java.net.URI
object ReverseGIFCommand { class ReverseGIFCommand : BaseCommand() {
override val commandNames = listOf("倒放")
private fun reverseGif(gifUrl: String): String { companion object {
val gifStream = URI(gifUrl).toURL().openStream() private val waitingList = mutableListOf<Long>()
val decoder = GifDecoder()
decoder.read(gifStream) private fun reverseGif(gifUrl: String): String {
val frames = (0 until decoder.frameCount).map { decoder.getFrame(it) }.reversed() val gifStream = URI(gifUrl).toURL().openStream()
val gifBytes = decoder.makeGif(frames) val decoder = GifDecoder()
return gifBytes.encodeToBase64() 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) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
val gifUrl = if (message.data.message.find { it.type == ArrayMessageType.mface } == null) { if (message.sender.userId !in waitingList) {
message.data.message.find { it.type == ArrayMessageType.image }!!.data.file!! waitingList.add(message.sender.userId)
message.reply("发送一张动图来继续操作")
} else { } 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)
} }
} }