From 8bbb493afaa04183e1970225e421cb9838bc8bbb Mon Sep 17 00:00:00 2001 From: RTAkland Date: Mon, 2 Sep 2024 11:30:58 +0800 Subject: [PATCH] feat: add anti revoke command --- build.gradle.kts | 1 + gradle/libs.versions.toml | 2 +- src/main/kotlin/cn/rtast/fancybot/Const.kt | 1 - src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 30 +++++++++++-- .../fancybot/commands/AntiRevokeCommand.kt | 42 +++++++++++++++++++ .../rtast/fancybot/commands/FKXQSCommand.kt | 2 +- .../fancybot/commands/HitokotoCommand.kt | 2 +- .../cn/rtast/fancybot/commands/JrrpCommand.kt | 2 +- .../rtast/fancybot/commands/MusicCommand.kt | 2 +- .../rtast/fancybot/commands/QRCodeCommand.kt | 2 +- .../cn/rtast/fancybot/commands/SignCommand.kt | 26 ++++++++---- .../kotlin/cn/rtast/fancybot/util/DateUtil.kt | 9 ++-- 12 files changed, 98 insertions(+), 23 deletions(-) create mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/AntiRevokeCommand.kt diff --git a/build.gradle.kts b/build.gradle.kts index 056b52c..123c467 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,6 +12,7 @@ version = fancyBotVersion repositories { mavenCentral() + mavenLocal() maven { name = "repo.rtast.cn" url = uri("https://repo.rtast.cn/api/v4/projects/33/packages/maven") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2b7c58e..60a0178 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] kotlinVersion = "2.0.10" -ronebotVersion = "1.4.1" +ronebotVersion = "1.4.9" shadowVersion = "8.3.0" okhttpVersion = "5.0.0-alpha.14" exposedVersion = "0.53.0" diff --git a/src/main/kotlin/cn/rtast/fancybot/Const.kt b/src/main/kotlin/cn/rtast/fancybot/Const.kt index b5764a4..8c29abd 100644 --- a/src/main/kotlin/cn/rtast/fancybot/Const.kt +++ b/src/main/kotlin/cn/rtast/fancybot/Const.kt @@ -15,7 +15,6 @@ import com.google.gson.GsonBuilder val gson: Gson = GsonBuilder() .setPrettyPrinting() .disableHtmlEscaping() - .serializeNulls() .create() const val ROOT_PATH = "./data" diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index 975b5d6..47e963d 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -7,6 +7,7 @@ package cn.rtast.fancybot +import cn.rtast.fancybot.commands.AntiRevokeCommand import cn.rtast.fancybot.commands.EchoCommand import cn.rtast.fancybot.commands.FKXQSCommand import cn.rtast.fancybot.commands.HitokotoCommand @@ -20,17 +21,37 @@ import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.util.file.ConfigManager import cn.rtast.fancybot.util.initDatabase import cn.rtast.rob.ROneBotFactory +import cn.rtast.rob.entity.GetMessage import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.entity.GroupRevokeMessage +import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OBMessage import org.java_websocket.WebSocket class FancyBot : OBMessage { - override suspend fun onGroupMessage(websocket: WebSocket, message: GroupMessage, json: String) { + + override suspend fun onGroupMessage(ws: WebSocket, message: GroupMessage, json: String) { println(message.rawMessage) } - override suspend fun onWebsocketError(webSocket: WebSocket, ex: Exception) { - println(ex.printStackTrace()) + override suspend fun onGroupMessageRevoke(ws: WebSocket, message: GroupRevokeMessage) { + val msg = MessageChain.Builder() + .addText("用户: ${message.userId} 被: ${message.operatorId} 撤回了一条消息") + .addNewLine() + .addText("使用/revoke ${message.messageId} 来获取被撤回的消息") + .build() + this.sendGroupMessage(message.groupId, msg) + } + + + override suspend fun onGetGroupMessageResponse(ws: WebSocket, message: GetMessage) { + if (message.data.id == "revoke") { + AntiRevokeCommand.getMessageCallback(this, message) + } + } + + override suspend fun onWebsocketErrorEvent(ws: WebSocket, ex: Exception) { + ex.printStackTrace() } } @@ -41,7 +62,8 @@ val commands = listOf( SignCommand(), RedeemCommand(), MyPointCommand(), HitokotoCommand(), FKXQSCommand(), - QRCodeCommand() + QRCodeCommand(), + AntiRevokeCommand() ) val configManager = ConfigManager() diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/AntiRevokeCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/AntiRevokeCommand.kt new file mode 100644 index 0000000..a5c5de7 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/AntiRevokeCommand.kt @@ -0,0 +1,42 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/1 + */ + + +package cn.rtast.fancybot.commands + +import cn.rtast.fancybot.util.toJson +import cn.rtast.rob.entity.GetMessage +import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.util.BaseCommand +import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.OBMessage + +class AntiRevokeCommand : BaseCommand() { + override val commandNames = listOf("/revoke", "/rv", "/防撤回") + + override suspend fun executeGroup(listener: OBMessage, message: GroupMessage, args: List) { + 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 getMessageCallback(listener: OBMessage, message: GetMessage) { + val msg = MessageChain.Builder() + .addAt(message.data.sender.userId) + .addNewLine() + .addText("被撤回的消息如下: ") + .addNewLine() + .addText(message.data.message.toJson()) + .build() + listener.sendGroupMessage(message.data.groupId!!, msg) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/FKXQSCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/FKXQSCommand.kt index 768c8ae..b7401e7 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/FKXQSCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/FKXQSCommand.kt @@ -11,7 +11,7 @@ import cn.rtast.fancybot.entity.FKXQS import cn.rtast.fancybot.util.Http import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.util.BaseCommand -import cn.rtast.rob.util.message.MessageChain +import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OBMessage class FKXQSCommand: BaseCommand() { diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/HitokotoCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/HitokotoCommand.kt index fa5d83b..9c32453 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/HitokotoCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/HitokotoCommand.kt @@ -10,7 +10,7 @@ package cn.rtast.fancybot.commands import cn.rtast.fancybot.util.Http import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.util.BaseCommand -import cn.rtast.rob.util.message.MessageChain +import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OBMessage class HitokotoCommand : BaseCommand() { diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/JrrpCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/JrrpCommand.kt index 6e89980..200b6a7 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/JrrpCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/JrrpCommand.kt @@ -10,7 +10,7 @@ package cn.rtast.fancybot.commands import cn.rtast.fancybot.util.file.JrrpManager import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.util.BaseCommand -import cn.rtast.rob.util.message.MessageChain +import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OBMessage class JrrpCommand : BaseCommand() { diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/MusicCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/MusicCommand.kt index 9b9a9ce..60401d6 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/MusicCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/MusicCommand.kt @@ -14,7 +14,7 @@ import cn.rtast.fancybot.entity.music.SongUrl import cn.rtast.fancybot.util.Http import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.util.BaseCommand -import cn.rtast.rob.util.message.MessageChain +import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OBMessage import java.time.Instant diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/QRCodeCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/QRCodeCommand.kt index 09e8e64..e832dd4 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/QRCodeCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/QRCodeCommand.kt @@ -9,7 +9,7 @@ package cn.rtast.fancybot.commands import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.util.BaseCommand -import cn.rtast.rob.util.message.MessageChain +import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OBMessage class QRCodeCommand : BaseCommand() { diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/SignCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/SignCommand.kt index 35787de..375466d 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/SignCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/SignCommand.kt @@ -14,16 +14,11 @@ import cn.rtast.fancybot.util.file.SignManager import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.enums.UserRole import cn.rtast.rob.util.BaseCommand -import cn.rtast.rob.util.message.MessageChain +import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OBMessage private val signManager = SignManager() -private val items = mapOf( - "色图" to 50, - "黑丝" to 60 -) - class SignCommand : BaseCommand() { override val commandNames = listOf("/签到", "/sign") @@ -83,6 +78,12 @@ class MyPointCommand : BaseCommand() { } } +private val items = mapOf( + "色图" to 50, + "黑丝" to 60, + "白丝" to 70 +) + class RedeemCommand : BaseCommand() { override val commandNames = listOf("/redeem", "/兑换", "/rdm") @@ -128,7 +129,7 @@ class RedeemCommand : BaseCommand() { .build() listener.sendGroupMessage(message.groupId, msg) when (selectedItemKey) { - "黑丝", "hs", "heisi" -> { + "黑丝" -> { val url = Http.get("https://v2.api-m.com/api/heisi").data val msg = MessageChain.Builder() .addAt(message.sender.userId) @@ -137,13 +138,22 @@ class RedeemCommand : BaseCommand() { listener.sendGroupMessage(message.groupId, msg) } - "色图", "st", "setu" -> { + "色图" -> { val msg = MessageChain.Builder() .addAt(message.sender.userId) .addImage("https://moe.jitsu.top/img/?sort=r18&size=small") .build() listener.sendGroupMessage(message.groupId, msg) } + + "白丝" -> { + val url = Http.get("https://v2.api-m.com/api/baisi").data + val msg = MessageChain.Builder() + .addAt(message.sender.userId) + .addImage(url) + .build() + listener.sendGroupMessage(message.groupId, msg) + } } } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/DateUtil.kt b/src/main/kotlin/cn/rtast/fancybot/util/DateUtil.kt index fc8c6cd..6c96dd0 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/DateUtil.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/DateUtil.kt @@ -10,8 +10,9 @@ package cn.rtast.fancybot.util import java.time.Instant import java.time.ZoneId -fun Long.isSameDay(otherTimestamp: Long, zoneId: ZoneId = ZoneId.systemDefault()): Boolean { - val thisDate = Instant.ofEpochMilli(this).atZone(zoneId).toLocalDate() - val otherDate = Instant.ofEpochMilli(otherTimestamp).atZone(zoneId).toLocalDate() - return thisDate == otherDate +fun Long.isSameDay(timestamp2: Long): Boolean { + val zoneId = ZoneId.of("Asia/Shanghai") + val date1 = Instant.ofEpochSecond(this).atZone(zoneId).toLocalDate() + val date2 = Instant.ofEpochSecond(timestamp2).atZone(zoneId).toLocalDate() + return date1 == date2 }