From d12a581de3d6ccb4ed2860efe0e678b67310246b Mon Sep 17 00:00:00 2001 From: Roman Makeev Date: Sat, 1 Nov 2025 17:21:13 +0300 Subject: [PATCH] update commands --- gradle.properties | 2 +- gradle/libs.versions.toml | 34 ++-- .../astrarating/command/di/CommandsModule.kt | 1 - .../exception/CommandExceptionHandler.kt | 4 +- .../command/rating/RatingCommandNode.kt | 183 ++++++++---------- 5 files changed, 103 insertions(+), 121 deletions(-) diff --git a/gradle.properties b/gradle.properties index 898ecf4..19df81f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ makeevrserg.java.ktarget=21 # Project makeevrserg.project.name=AstraRating makeevrserg.project.group=ru.astrainteractive.astrarating -makeevrserg.project.version.string=1.25.0 +makeevrserg.project.version.string=1.26.0 makeevrserg.project.description=Rating plugin for EmpireProjekt makeevrserg.project.developers=makeevrserg|Makeev Roman|makeevrserg@gmail.com makeevrserg.project.url=https://empireprojekt.ru diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f4be74b..4244158 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] cache4k = "0.14.0" -discordsrv = "1.30.1" +discordsrv = "1.30.2" driver-h2 = "2.4.240" driver-jdbc = "3.50.3.0" driver-mariadb = "3.5.6" @@ -12,35 +12,35 @@ gradle-ftp = "0.1.2" gradle-shadow = "9.2.2" gson = "2.13.2" guava = "33.5.0-jre" -jda = "6.0.0-preview" +jda = "6.1.0" jda-webhook = "0.8.4" klibs-gradleplugin = "1.11.1" klibs-kdi = "1.4.8" -klibs-kstorage = "4.2.3" -klibs-mikro = "1.14.2" +klibs-kstorage = "4.4.1" +klibs-mikro = "1.16.0" kotlin-benchmark = "0.4.14" kotlin-coroutines = "1.10.2" kotlin-datetime = "0.7.1-0.6.x-compat" kotlin-json = "1.9.0" -kotlin-serialization-kaml = "0.98.0" +kotlin-serialization-kaml = "0.102.0" kotlin-serialization = "1.9.0" kotlin-version = "2.2.0" -ktor = "3.3.0" -kyori = "4.24.0" -kyori-adventure = "4.24.0" +ktor = "3.3.1" +kyori = "4.25.0" +kyori-adventure = "4.25.0" mcprotocollib = "1.21.7-SNAPSHOT" -minecraft-astralibs = "3.26.1" +minecraft-astralibs = "3.28.4" minecraft-bstats = "3.1.0" minecraft-bungee = "1.21-R0.5-SNAPSHOT" minecraft-essentialsx = "2.21.2" -minecraft-fabric-api = "0.134.1+" -minecraft-fabric-kotlin = "1.13.1+" -minecraft-fabric-loader = "0.17.2" -minecraft-fabric-loom = "1.11.8" +minecraft-fabric-api = "0.136.3+" +minecraft-fabric-kotlin = "1.13.7+" +minecraft-fabric-loader = "0.17.3" +minecraft-fabric-loom = "1.12.5" minecraft-luckperms = "5.5" minecraft-mockbukkit = "4.33.2" minecraft-mojang-version = "1.20.1" -minecraft-packetevents = "2.9.5" +minecraft-packetevents = "2.10.0" minecraft-papi = "2.11.6" minecraft-protocollib = "5.3.0" minecraft-spigot = "1.21.9-R0.1-SNAPSHOT" @@ -48,9 +48,9 @@ minecraft-towny = "0.101.2.1" minecraft-vault = "1.7.1" minecraft-velocity = "4.0.0-SNAPSHOT" shadow = "8.1.8" -telegrambots = "9.1.0" -tests-junit-bom = "6.0.0" -tests-junit-jupiter-api = "6.0.0" +telegrambots = "9.2.0" +tests-junit-bom = "6.0.1" +tests-junit-jupiter-api = "6.0.1" tests-mockito = "5.20.0" tests-org-testing = "7.11.0" turbine = "1.2.1" diff --git a/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/di/CommandsModule.kt b/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/di/CommandsModule.kt index ae50dcf..9c6ffab 100644 --- a/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/di/CommandsModule.kt +++ b/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/di/CommandsModule.kt @@ -28,7 +28,6 @@ class CommandsModule( ) bukkitModule.commandRegistrarContext.registerWhenReady( node = createRatingCommandNode( - kyoriKrate = bukkitModule.kyoriKrate, commandExceptionHandler = CommandExceptionHandler( translationKrate = coreModule.translationKrate, kyoriKrate = bukkitModule.kyoriKrate diff --git a/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/exception/CommandExceptionHandler.kt b/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/exception/CommandExceptionHandler.kt index 209c11e..6107534 100644 --- a/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/exception/CommandExceptionHandler.kt +++ b/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/exception/CommandExceptionHandler.kt @@ -2,7 +2,7 @@ package ru.astrainteractive.astrarating.command.exception import com.mojang.brigadier.context.CommandContext import io.papermc.paper.command.brigadier.CommandSourceStack -import ru.astrainteractive.astralibs.command.api.exception.ArgumentTypeException +import ru.astrainteractive.astralibs.command.api.exception.ArgumentConverterException import ru.astrainteractive.astralibs.command.api.exception.BadArgumentException import ru.astrainteractive.astralibs.command.api.exception.NoPermissionException import ru.astrainteractive.astralibs.command.api.exception.NoPlayerException @@ -26,7 +26,7 @@ class CommandExceptionHandler( val desc = when (t) { is StringDescCommandException -> t.stringDesc is BadArgumentException -> translation.general.wrongUsage - is ArgumentTypeException -> translation.general.wrongUsage + is ArgumentConverterException -> translation.general.wrongUsage is NoPermissionException -> translation.general.noPermission is UnknownPlayerCommandException, is NoPlayerException -> translation.general.playerNotExist diff --git a/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/rating/RatingCommandNode.kt b/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/rating/RatingCommandNode.kt index affc9db..7fa19a0 100644 --- a/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/rating/RatingCommandNode.kt +++ b/modules/command-bukkit/src/main/kotlin/ru/astrainteractive/astrarating/command/rating/RatingCommandNode.kt @@ -1,26 +1,24 @@ package ru.astrainteractive.astrarating.command.rating -import com.mojang.brigadier.builder.RequiredArgumentBuilder +import com.mojang.brigadier.arguments.StringArgumentType import com.mojang.brigadier.context.CommandContext import com.mojang.brigadier.tree.LiteralCommandNode import io.papermc.paper.command.brigadier.CommandSourceStack import org.bukkit.Bukkit import org.bukkit.entity.Player import ru.astrainteractive.astralibs.command.api.argumenttype.OfflinePlayerArgument -import ru.astrainteractive.astralibs.command.api.argumenttype.StringArgumentType +import ru.astrainteractive.astralibs.command.api.argumenttype.StringArgumentConverter +import ru.astrainteractive.astralibs.command.api.util.argument import ru.astrainteractive.astralibs.command.api.util.command -import ru.astrainteractive.astralibs.command.api.util.findArgument import ru.astrainteractive.astralibs.command.api.util.hints import ru.astrainteractive.astralibs.command.api.util.literal +import ru.astrainteractive.astralibs.command.api.util.requireArgument +import ru.astrainteractive.astralibs.command.api.util.requirePlayer import ru.astrainteractive.astralibs.command.api.util.runs -import ru.astrainteractive.astralibs.command.api.util.stringArgument -import ru.astrainteractive.astralibs.kyori.KyoriComponentSerializer import ru.astrainteractive.astrarating.command.exception.CommandExceptionHandler import ru.astrainteractive.astrarating.command.exception.OnlyPlayerCommandException import ru.astrainteractive.astrarating.command.exception.UnknownPlayerCommandException import ru.astrainteractive.astrarating.command.exception.UsageCommandException -import ru.astrainteractive.klibs.kstorage.api.CachedKrate -import ru.astrainteractive.klibs.kstorage.util.getValue private fun openRating( ctx: CommandContext, @@ -41,105 +39,40 @@ private fun openRating( @Suppress("LongMethod") internal fun createRatingCommandNode( - kyoriKrate: CachedKrate, ratingCommandExecutor: RatingCommandExecutor, commandExceptionHandler: CommandExceptionHandler ): LiteralCommandNode { - val kyori by kyoriKrate - return with(kyori) { - command("arating") { - literal("player") { - stringArgument("player") { - hints(Bukkit.getOnlinePlayers().map(Player::getName)) - runs { ctx -> - val player = ctx.source.sender as? Player - if (player == null) { - commandExceptionHandler.handle(ctx, OnlyPlayerCommandException()) - return@runs - } - val targetPlayer = ctx.findArgument("player", OfflinePlayerArgument) - val targetPlayerUuid = targetPlayer?.uniqueId - val targetPlayerName = targetPlayer?.name - if (targetPlayerUuid == null || targetPlayerName == null) { - commandExceptionHandler.handle(ctx, UnknownPlayerCommandException()) - return@runs - } - if (!targetPlayer.hasPlayedBefore()) { - commandExceptionHandler.handle(ctx, UnknownPlayerCommandException()) - return@runs - } - ratingCommandExecutor.execute( - RatingCommand.Result.OpenPlayerRatingGui( - player = player, - selectedPlayerName = targetPlayerName, - selectedPlayerUUID = targetPlayerUuid - ) - ) - } - } - } - literal("rating") { + return command("arating") { + literal("player") { + argument("player", StringArgumentType.string()) { playerArg -> + hints { Bukkit.getOnlinePlayers().map(Player::getName) } runs { ctx -> - openRating( - ctx = ctx, - commandExceptionHandler = commandExceptionHandler, - ratingCommandExecutor = ratingCommandExecutor - ) - } - stringArgument("like_dislike") { - hints(listOf("like", "dislike", "+", "-")) - stringArgument("player") player@{ - hints { Bukkit.getOnlinePlayers().map(Player::getName) } - fun RequiredArgumentBuilder.messageArgument( - sizeLeft: Int, - maxSize: Int - ) { - if (sizeLeft < 0) return - stringArgument("message_$sizeLeft") message@{ - hints(listOf("...")) - messageArgument(sizeLeft - 1, maxSize) - runs { ctx -> - val executor = ctx.source.sender as? Player - if (executor == null) { - commandExceptionHandler.handle(ctx, OnlyPlayerCommandException()) - return@runs - } - val value = when (ctx.findArgument("like_dislike", StringArgumentType)) { - "like", "+" -> 1 - "dislike", "-" -> -1 - else -> { - commandExceptionHandler.handle(ctx, UsageCommandException()) - return@runs - } - } - val ratedPlayer = ctx.findArgument("player", OfflinePlayerArgument) - if (ratedPlayer == null) { - commandExceptionHandler.handle(ctx, UnknownPlayerCommandException()) - return@runs - } - if (!ratedPlayer.hasPlayedBefore()) { - commandExceptionHandler.handle(ctx, UnknownPlayerCommandException()) - return@runs - } - ratingCommandExecutor.execute( - RatingCommand.Result.ChangeRating( - value = value, - message = (sizeLeft..maxSize) - .reversed() - .mapNotNull { i -> ctx.findArgument("message_$i", StringArgumentType) } - .joinToString(" "), - executor = executor, - ratedPlayer = ratedPlayer - ) - ) - } - } - } - messageArgument(300, 300) + val player = ctx.requirePlayer() + val targetPlayer = runCatching { + ctx.requireArgument(playerArg, OfflinePlayerArgument) + }.getOrNull() + val targetPlayerUuid = targetPlayer?.uniqueId + val targetPlayerName = targetPlayer?.name + if (targetPlayerUuid == null || targetPlayerName == null) { + commandExceptionHandler.handle(ctx, UnknownPlayerCommandException()) + return@runs + } + if (!targetPlayer.hasPlayedBefore()) { + commandExceptionHandler.handle(ctx, UnknownPlayerCommandException()) + return@runs } + ratingCommandExecutor.execute( + RatingCommand.Result.OpenPlayerRatingGui( + player = player, + selectedPlayerName = targetPlayerName, + selectedPlayerUUID = targetPlayerUuid + ) + ) } } + } + literal("rating") { runs { ctx -> openRating( ctx = ctx, @@ -147,6 +80,56 @@ internal fun createRatingCommandNode( ratingCommandExecutor = ratingCommandExecutor ) } - }.build() - } + argument("like_dislike", StringArgumentType.string()) { ratingTypeArg -> + hints { listOf("like", "dislike", "+", "-") } + argument("player", StringArgumentType.string()) player@{ playerArg -> + hints { Bukkit.getOnlinePlayers().map(Player::getName) } + argument("message", StringArgumentType.greedyString()) message@{ messageArg -> + hints { listOf("...") } + runs { ctx -> + val executor = ctx.source.sender as? Player + if (executor == null) { + commandExceptionHandler.handle(ctx, OnlyPlayerCommandException()) + return@runs + } + val value = when (ctx.requireArgument(ratingTypeArg, StringArgumentConverter)) { + "like", "+" -> 1 + "dislike", "-" -> -1 + else -> { + commandExceptionHandler.handle(ctx, UsageCommandException()) + return@runs + } + } + val ratedPlayer = runCatching { + ctx.requireArgument(playerArg, OfflinePlayerArgument) + }.getOrNull() + if (ratedPlayer == null) { + commandExceptionHandler.handle(ctx, UnknownPlayerCommandException()) + return@runs + } + if (!ratedPlayer.hasPlayedBefore()) { + commandExceptionHandler.handle(ctx, UnknownPlayerCommandException()) + return@runs + } + ratingCommandExecutor.execute( + RatingCommand.Result.ChangeRating( + value = value, + message = ctx.requireArgument(messageArg, StringArgumentConverter), + executor = executor, + ratedPlayer = ratedPlayer + ) + ) + } + } + } + } + } + runs { ctx -> + openRating( + ctx = ctx, + commandExceptionHandler = commandExceptionHandler, + ratingCommandExecutor = ratingCommandExecutor + ) + } + }.build() }