From 90225ae1470e92ec71a01547b1cb333f85f2ed36 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Thu, 10 Oct 2024 16:03:51 +0800 Subject: [PATCH] feat: add idiom explain and add mcping latency --- gradle/libs.versions.toml | 2 +- src/main/kotlin/cn/rtast/fancybot/Const.kt | 5 +- .../commands/lookup/MinecraftCommand.kt | 29 +++++------ .../commands/misc/IdiomExplainCommand.kt | 49 +++++++++++++++++++ .../kotlin/cn/rtast/fancybot/entity/Config.kt | 3 +- .../entity/apispace/IdiomExplainResponse.kt | 19 +++++++ .../rtast/fancybot/util/file/ConfigManager.kt | 1 + src/main/resources/config.json | 3 +- 8 files changed, 90 insertions(+), 21 deletions(-) create mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/misc/IdiomExplainCommand.kt create mode 100644 src/main/kotlin/cn/rtast/fancybot/entity/apispace/IdiomExplainResponse.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 99ca3a8..888b0ff 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ shadowVersion = "8.3.0" okhttpVersion = "5.0.0-alpha.14" exposedVersion = "0.53.0" sqliteJDBCVersion = "3.46.1.0" -motdPingerVersion = "1.1.2" +motdPingerVersion = "1.1.4" animatedGifLibVersion = "1.4" simpleJavaMailVersion = "8.12.2" jsoupVersion = "1.18.1" diff --git a/src/main/kotlin/cn/rtast/fancybot/Const.kt b/src/main/kotlin/cn/rtast/fancybot/Const.kt index 8c21d57..38dde72 100644 --- a/src/main/kotlin/cn/rtast/fancybot/Const.kt +++ b/src/main/kotlin/cn/rtast/fancybot/Const.kt @@ -77,7 +77,8 @@ val DEFAULT_CONFIG = Config( cloudflareR2AccessKeyId = "11111", cloudflareR2SecretKey = "222", cloudflareR2BucketName = "fancybot", - cloudflareR2PublicUrl = "https://114514.com" + cloudflareR2PublicUrl = "https://114514.com", + apiSpaceKey = "114514" ) val configManager = ConfigManager() @@ -118,5 +119,5 @@ val commands = listOf( ReactionCommand(), MCSkinCommand(), GithubLatestCommitCommand(), RandomMusicCommand(), ZDJDCommand(), ScanQRCodeCommand(), TTSCommand(), SlimeChunkHelperCommand(), SupportMeCommand(), TheCatCommand(), TheHistoryOfTodayCommand(), MCVersionCommand(), - MinecraftWikiCommand(), GaoKaoDaysRemainCommand() + MinecraftWikiCommand(), GaoKaoDaysRemainCommand(), IdiomExplainCommand() ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MinecraftCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MinecraftCommand.kt index fcc7383..a4d7c6f 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MinecraftCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MinecraftCommand.kt @@ -31,7 +31,6 @@ import cn.rtast.fancybot.util.str.fromJson import cn.rtast.fancybot.util.str.uriEncode import cn.rtast.motdpinger.BedrockPing import cn.rtast.motdpinger.JavaPing -import cn.rtast.motdpinger.removeColorCodes import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.ob.MessageChain @@ -310,6 +309,10 @@ class MCSkinCommand : BaseCommand() { class MCPingCommand : BaseCommand() { override val commandNames = listOf("/mcping") + private fun String.removeColorCodes(): String { + return this.replace(Regex("§."), "") + } + override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { val msg = MessageChain.Builder() @@ -324,11 +327,7 @@ class MCPingCommand : BaseCommand() { when (platform) { "java", "je", "Java", "JAVA" -> { val parts = args.first().split(":") - val port = if (parts.size == 1) { - 25565 - } else { - parts.last().toInt() - } + val port = if (parts.size == 1) 25565 else parts.last().toInt() val host = parts.first() val response = JavaPing().ping(host, port, 10000) if (response == null) { @@ -336,10 +335,10 @@ class MCPingCommand : BaseCommand() { return } val msg = MessageChain.Builder() - response.favicon?.let { - msg.addImage(response.favicon!!.replace("data:image/png;base64,", ""), true) - } - msg.addText("服务器地址: $host:$port | 服务器类型: Java") + response.favicon?.let { msg.addImage(response.favicon!!.replace("data:image/png;base64,", ""), true) } + msg.addText("服务器地址: $host:$port") + .addNewLine() + .addText("服务器类型: Java | 延迟: ${response.latency}ms") .addNewLine() .addText("服务器版本: ${response.version.name}/${response.version.protocol}") .addNewLine() @@ -349,16 +348,14 @@ class MCPingCommand : BaseCommand() { "be", "bedrock", "BE", "Bedrock" -> { val parts = args.first().split(":") - val port = if (parts.size == 1) { - 19132 - } else { - parts.last().toInt() - } + val port = if (parts.size == 1) 19132 else parts.last().toInt() val host = parts.first() try { val response = BedrockPing().ping(host, port, 10000) val msg = MessageChain.Builder() - .addText("服务器地址: $host:$port | 服务器类型: Bedrock") + .addText("服务器地址: $host:$port") + .addNewLine() + .addText("服务器类型: Bedrock(基岩版) | 延迟: ${response.latency}ms") .addNewLine() .addText("服务器版本: ${response.version}/${response.protocolVersion}") .addNewLine() diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/misc/IdiomExplainCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/misc/IdiomExplainCommand.kt new file mode 100644 index 0000000..1bea9b0 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/misc/IdiomExplainCommand.kt @@ -0,0 +1,49 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/10/10 + */ + + +package cn.rtast.fancybot.commands.misc + +import cn.rtast.fancybot.configManager +import cn.rtast.fancybot.entity.apispace.IdiomExplainResponse +import cn.rtast.fancybot.util.Http +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.OneBotListener + +class IdiomExplainCommand : BaseCommand() { + override val commandNames = listOf("成语解释") + + private val apiSpaceUrl = "https://eolink.o.apispace.com/cyudac/api/v1/idioms/SearchIdiomsByPinyin/search" + + override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { + if (args.isEmpty()) { + message.reply("发送`成语解释 <成语>`就能解释这个成语的意思了") + return + } + try { + val idiom = args.joinToString(" ").trim() + val response = Http.get( + apiSpaceUrl, + mapOf("name" to idiom, "search_type" to "name"), + mapOf("X-APISpace-Token" to configManager.apiSpaceKey) + ).data.first() + val msg = MessageChain.Builder() + .addText("成语: ${response.name} 的解释如下") + .addNewLine() + .addText("解释: ${response.explanation}") + .addNewLine(2) + .addText("出处: ${response.provenance}") + .addNewLine(2) + .addText("发音: ${response.sound}") + .build() + message.reply(msg) + } catch (_: Exception) { + message.reply("这个词似乎不是一个成语呢~~") + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt b/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt index 65173e9..0106aa2 100644 --- a/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt +++ b/src/main/kotlin/cn/rtast/fancybot/entity/Config.kt @@ -44,5 +44,6 @@ data class Config( val cloudflareR2AccessKeyId: String, val cloudflareR2SecretKey: String, val cloudflareR2BucketName: String, - val cloudflareR2PublicUrl: String + val cloudflareR2PublicUrl: String, + val apiSpaceKey: String, ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/apispace/IdiomExplainResponse.kt b/src/main/kotlin/cn/rtast/fancybot/entity/apispace/IdiomExplainResponse.kt new file mode 100644 index 0000000..e55a40a --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/entity/apispace/IdiomExplainResponse.kt @@ -0,0 +1,19 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/10/10 + */ + + +package cn.rtast.fancybot.entity.apispace + +data class IdiomExplainResponse( + val data: List +) { + data class Data( + val name: String, + val sound: String, + val explanation: String, + val provenance: String, + ) +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt b/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt index 86275c7..55205f7 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/file/ConfigManager.kt @@ -46,4 +46,5 @@ class ConfigManager : JsonFileHandler("config.json") { val cloudflareR2SecretKey = config.cloudflareR2SecretKey val cloudflareR2BucketName = config.cloudflareR2BucketName val cloudflareR2PublicUrl = config.cloudflareR2PublicUrl + val apiSpaceKey = config.apiSpaceKey } \ No newline at end of file diff --git a/src/main/resources/config.json b/src/main/resources/config.json index f805003..b27a920 100644 --- a/src/main/resources/config.json +++ b/src/main/resources/config.json @@ -36,5 +36,6 @@ "cloudflareR2AccessKeyId": "11111", "cloudflareR2SecretKey": "222", "cloudflareR2BucketName": "fancybot", - "cloudflareR2PublicUrl": "https://pub-2df243c8ff83452c9dcdd42c87b662a7.r2.dev" + "cloudflareR2PublicUrl": "https://114514.com", + "apiSpaceKey": "114514" } \ No newline at end of file