From 0a28d05bfe1fc578f78f6f453cf8623059779ea5 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Thu, 26 Sep 2024 00:30:25 +0800 Subject: [PATCH] refactor: mcping command --- gradle/libs.versions.toml | 2 +- .../fancybot/commands/lookup/MCPingCommand.kt | 97 ++++++++++++------- .../kotlin/cn/rtast/fancybot/entity/MCPing.kt | 24 ----- 3 files changed, 62 insertions(+), 61 deletions(-) delete mode 100644 src/main/kotlin/cn/rtast/fancybot/entity/MCPing.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e49baa9..45400c1 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.0.1" +motdPingerVersion = "1.1.0" animatedGifLibVersion = "1.4" simpleJavaMailVersion = "8.11.3" jsoupVersion = "1.18.1" diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MCPingCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MCPingCommand.kt index 5a3be4d..22d6426 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MCPingCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MCPingCommand.kt @@ -7,60 +7,85 @@ package cn.rtast.fancybot.commands.lookup -import cn.rtast.fancybot.entity.MCPing -import cn.rtast.fancybot.util.str.fromJson -import cn.rtast.motdpinger.MotdPinger +import cn.rtast.motdpinger.BedrockPing +import cn.rtast.motdpinger.JavaPing 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 +import java.net.SocketException class MCPingCommand : BaseCommand() { override val commandNames = listOf("/mcping", "/mcPing") - private val pingInstance = MotdPinger() - override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { val msg = MessageChain.Builder() .addAt(message.sender.userId) .addNewLine() - .addText("使用方法: /mcping :[port]") + .addText("使用方法: /mcping :[port] [java|be]") .addNewLine() - .addText("仅限Java版服务器哦~") + .addText("不添加平台默认Java版~") .build() listener.sendGroupMessage(message.groupId, msg) return } - val parts = args.first().split(":") - val host: String - val port: Int - if (parts.size == 2) { - host = parts[0] - port = parts[1].toIntOrNull() ?: 25565 - } else { - host = args.first() - port = 25565 - } - try { - val rawResponse = pingInstance.pingServer(host, port) - val jsonResponse = rawResponse?.fromJson()!! - val msg = MessageChain.Builder().addAt(message.sender.userId).addNewLine() - if (jsonResponse.favicon != null) msg.addImage(jsonResponse.favicon, true) - msg.addText("服务器地址: $host:$port") - msg.addNewLine() - msg.addText("协议版本号: ${jsonResponse.version.protocol}/${jsonResponse.version.name}") - msg.addNewLine() - msg.addText("玩家: ${jsonResponse.players.online}/${jsonResponse.players.max}") - listener.sendGroupMessage(message.groupId, msg.build()) - } catch (_: Exception) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("ping失败~") - .addNewLine() - .addText("检查一下地址或者端口是否正确吧~") - .build() - listener.sendGroupMessage(message.groupId, msg) + val platform = if (args.size == 2) args.last() else "java" + when (platform) { + "java", "je", "Java", "JAVA" -> { + val parts = args.first().split(":") + 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) { + message.reply("无法获取服务器的消息请检查输入是否正确 >>> $host:$port") + return + } + val msg = MessageChain.Builder() + response.favicon?.let { + msg.addImage(response.favicon!!.replace("data:image/png;base64,", ""), true) + } + msg.addText("服务器地址: $host:$port | 服务器类型: Java") + .addNewLine() + .addText("服务器版本: ${response.version.name}/${response.version.protocol}") + .addNewLine() + .addText("在线玩家数: ${response.players.online}/${response.players.max}") + message.reply(msg.build()) + } + + "be", "bedrock", "BE", "Bedrock" -> { + val parts = args.first().split(":") + 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") + .addNewLine() + .addText("服务器版本: ${response.version}/${response.protocolVersion}") + .addNewLine() + .addText("在线玩家: ${response.onlinePlayers}/${response.maxPlayers}") + .addNewLine() + .addText("MOTD: ${response.motd}") + .addNewLine() + .addText(response.subTitle) + message.reply(msg.build()) + }catch (_: SocketException) { + message.reply("无法从服务器接收Ping结果请检查服务器地址是否正确 >>> $host:$port") + } + } + + else -> { + message.reply("输入错误请在 `java` 和 `be`中选择 >>> $platform") + } } } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/MCPing.kt b/src/main/kotlin/cn/rtast/fancybot/entity/MCPing.kt deleted file mode 100644 index a439545..0000000 --- a/src/main/kotlin/cn/rtast/fancybot/entity/MCPing.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright © 2024 RTAkland - * Author: RTAkland - * Date: 2024/9/3 - */ - - -package cn.rtast.fancybot.entity - -data class MCPing( - val version: Version, - val players: Players, - val favicon: String? -) { - data class Version( - val protocol: Int, - val name: String, - ) - - data class Players( - val online: Int, - val max: Int, - ) -} \ No newline at end of file