From 8dad298c50dd27a7db3b2c71a991029aaa727fd2 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Thu, 15 May 2025 18:21:39 +0700 Subject: [PATCH] refactor: improve FindAltsCommand a bit --- build-number.txt | 2 +- .../chomens_bot/commands/FindAltsCommand.java | 52 ++++++++----------- .../plugins/PlayersDatabasePlugin.java | 10 ++-- 3 files changed, 27 insertions(+), 37 deletions(-) diff --git a/build-number.txt b/build-number.txt index 81ee1922..45230b8c 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -3195 \ No newline at end of file +3196 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java index b7c17874..f05a7ae7 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java @@ -8,20 +8,20 @@ import me.chayapak1.chomens_bot.command.CommandContext; import me.chayapak1.chomens_bot.command.CommandException; import me.chayapak1.chomens_bot.command.TrustLevel; import me.chayapak1.chomens_bot.data.chat.ChatPacketType; -import me.chayapak1.chomens_bot.data.player.PlayerEntry; import me.chayapak1.chomens_bot.plugins.DatabasePlugin; import net.kyori.adventure.text.Component; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.concurrent.CompletableFuture; public class FindAltsCommand extends Command { // we allow both, since the flag used to be `allserver` private static final String ALL_SERVER_FLAG = "allserver"; private static final String ALL_SERVERS_FLAG = "allservers"; + private static final int LIMIT = 200; + public FindAltsCommand () { super( "findalts", @@ -48,23 +48,13 @@ public class FindAltsCommand extends Command { final String player = context.getString(true, true); - final PlayerEntry playerEntry = bot.players.getEntry(player); - DatabasePlugin.EXECUTOR_SERVICE.submit(() -> { - if (playerEntry == null) { - context.sendOutput(handle(bot, player, true, player, allServer)); - } else if (playerEntry.ip != null) { - context.sendOutput(handle(bot, playerEntry.ip, false, player, allServer)); + final String ipFromUsername = bot.playersDatabase.getPlayerIP(player); + + if (ipFromUsername == null) { + context.sendOutput(handle(bot, player, player, allServer)); } else { - final CompletableFuture future = bot.players.getPlayerIP(playerEntry); - - if (future == null) return null; - - future.thenApply(targetIP -> { - context.sendOutput(handle(bot, targetIP, false, player, allServer)); - - return targetIP; - }); + context.sendOutput(handle(bot, ipFromUsername, player, allServer)); } return null; @@ -73,26 +63,26 @@ public class FindAltsCommand extends Command { return null; } - private Component handle (final Bot bot, final String targetIP, final boolean argumentIsIP, final String player, final boolean allServer) { - final Map altsMap = bot.playersDatabase.findPlayerAlts(targetIP, allServer); + private Component handle (final Bot bot, final String targetIP, final String player, final boolean allServer) { + final Map altsMap = bot.playersDatabase.findPlayerAlts(targetIP, allServer, LIMIT); - final Component playerComponent = Component - .text(player) - .color(bot.colorPalette.username); + final Component playerComponent = Component.text(player, bot.colorPalette.username); + + final boolean isIP = targetIP.equals(player); Component component = Component .translatable("commands.findalts.output", bot.colorPalette.defaultColor) .arguments( - Component.translatable(argumentIsIP ? "commands.findalts.ip" : "commands.findalts.player"), - argumentIsIP ? + Component.translatable(isIP ? "commands.findalts.ip" : "commands.findalts.player"), + isIP ? playerComponent : - Component.translatable("%s (%s)") - .arguments( - playerComponent, - Component - .text(targetIP) - .color(bot.colorPalette.number) - ) + Component.translatable( + "%s (%s)", + playerComponent, + Component + .text(targetIP) + .color(bot.colorPalette.number) + ) ) .appendNewline(); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersDatabasePlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersDatabasePlugin.java index de55145d..72c96964 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersDatabasePlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersDatabasePlugin.java @@ -27,8 +27,8 @@ public class PlayersDatabasePlugin implements Listener { private static final String UPDATE_PLAYER = "UPDATE players SET data = JSON_SET(data, ?, JSON_MERGE_PATCH(JSON_EXTRACT(data, ?), ?)) WHERE username = ?;"; private static final String GET_DATA = "SELECT data FROM players WHERE username = ?;"; private static final String GET_IP = "SELECT JSON_UNQUOTE(JSON_VALUE(data, ?)) AS ip FROM players WHERE username = ?;"; - private static final String FIND_ALTS_SINGLE_SERVER = "SELECT * FROM players WHERE JSON_CONTAINS(JSON_EXTRACT(data, '$.ips'), JSON_OBJECT(?, ?));"; - private static final String FIND_ALTS_ALL_SERVERS = "SELECT * FROM players WHERE JSON_SEARCH(JSON_EXTRACT(data, '$.ips'), 'one', ?) IS NOT NULL;"; + private static final String FIND_ALTS_SINGLE_SERVER = "SELECT * FROM players WHERE JSON_CONTAINS(JSON_EXTRACT(data, '$.ips'), JSON_OBJECT(?, ?)) LIMIT ?;"; + private static final String FIND_ALTS_ALL_SERVERS = "SELECT * FROM players WHERE JSON_SEARCH(JSON_EXTRACT(data, '$.ips'), 'one', ?) IS NOT NULL LIMIT ?;"; private static final ObjectMapper objectMapper = new ObjectMapper(); @@ -101,9 +101,7 @@ public class PlayersDatabasePlugin implements Listener { } } - public Map findPlayerAlts (final String ip) { return findPlayerAlts(ip, false); } - - public Map findPlayerAlts (final String ip, final boolean allServer) { + public Map findPlayerAlts (final String ip, final boolean allServer, final int limit) { try { final Map output = new HashMap<>(); @@ -113,11 +111,13 @@ public class PlayersDatabasePlugin implements Listener { statement = Main.database.connection.prepareStatement(FIND_ALTS_ALL_SERVERS); statement.setString(1, ip); + statement.setInt(2, limit); } else { statement = Main.database.connection.prepareStatement(FIND_ALTS_SINGLE_SERVER); statement.setString(1, bot.getServerString(true)); statement.setString(2, ip); + statement.setInt(3, limit); } final ResultSet result = statement.executeQuery();