From a1a3be3ee5f4548e6ec257caa72017ac754580aa Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Tue, 14 Jan 2025 17:18:34 +0700 Subject: [PATCH] feat: all server support for FindAltsCommand --- build-number.txt | 2 +- .../chomens_bot/commands/FindAltsCommand.java | 20 +++++++++++++------ .../plugins/PlayersDatabasePlugin.java | 20 ++++++++++++++----- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/build-number.txt b/build-number.txt index 7aba66c1..b53e2759 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -1461 \ No newline at end of file +1463 \ 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 f1706bc8..ed0e8cf2 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java @@ -17,7 +17,7 @@ public class FindAltsCommand extends Command { super( "findalts", "Finds players with the same IP address", - new String[] { "", "" }, + new String[] { "-allserver ", "" }, new String[] { "alts", "sameip" }, TrustLevel.PUBLIC, false @@ -30,18 +30,26 @@ public class FindAltsCommand extends Command { if (bot.database == null) throw new CommandException(Component.text("Database is not enabled in the bot's config")); - final String player = context.getString(true, true); + final String flag = context.getString(false, true); + + final boolean allServer = flag.equals("-allserver"); + + String player = !allServer ? flag : ""; // adds the first argument if no flag + + player += context.getString(true, false); final PlayerEntry playerEntry = bot.players.getEntry(player); - if (playerEntry == null) return handle(bot, player, true, player); + if (playerEntry == null) return handle(bot, player, true, player, allServer); else { final CompletableFuture future = bot.players.getPlayerIP(playerEntry); if (future == null) return null; + final String tempFinalPlayer = player; + future.thenApplyAsync(targetIP -> { - context.sendOutput(handle(bot, targetIP, false, player)); + context.sendOutput(handle(bot, targetIP, false, tempFinalPlayer, allServer)); return targetIP; }); @@ -50,8 +58,8 @@ public class FindAltsCommand extends Command { return null; } - private Component handle (Bot bot, String targetIP, boolean argumentIsIP, String player) { - final List alts = bot.playersDatabase.findPlayerAlts(targetIP); + private Component handle (Bot bot, String targetIP, boolean argumentIsIP, String player, boolean allServer) { + final List alts = bot.playersDatabase.findPlayerAlts(targetIP, allServer); final Component playerComponent = Component .text(player) 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 037b2f96..b9c88bc6 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersDatabasePlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersDatabasePlugin.java @@ -23,7 +23,8 @@ public class PlayersDatabasePlugin extends PlayersPlugin.Listener { private static final String INSERT_PLAYER = "INSERT IGNORE INTO players (username, data) VALUES (?, ?);"; private static final String UPDATE_PLAYER = "UPDATE players SET data = JSON_SET(data, ?, JSON_MERGE_PATCH(data -> ?, ?)) WHERE username = ?;"; private static final String GET_DATA = "SELECT data FROM players WHERE username = ?;"; - private static final String FIND_ALTS = "SELECT username FROM players WHERE JSON_CONTAINS(data -> '$.ips', JSON_OBJECT(?, ?));"; + private static final String FIND_ALTS_SINGLE_SERVER = "SELECT username FROM players WHERE JSON_CONTAINS(data -> '$.ips', JSON_OBJECT(?, ?));"; + private static final String FIND_ALTS_ALL_SERVERS = "SELECT username FROM players WHERE JSON_SEARCH(data->'$.ips', 'one', ?);"; // 'one' means case-sensitive private static final ObjectMapper objectMapper = new ObjectMapper(); @@ -72,14 +73,23 @@ public class PlayersDatabasePlugin extends PlayersPlugin.Listener { } } - public List findPlayerAlts (String ip) { + public List findPlayerAlts (String ip) { return findPlayerAlts(ip, false); } + public List findPlayerAlts (String ip, boolean allServer) { try { final List output = new ArrayList<>(); - final PreparedStatement statement = bot.database.connection.prepareStatement(FIND_ALTS); + PreparedStatement statement; - statement.setString(1, bot.host + ":" + bot.port); - statement.setString(2, ip); + if (allServer) { + statement = bot.database.connection.prepareStatement(FIND_ALTS_ALL_SERVERS); + + statement.setString(1, ip); + } else { + statement = bot.database.connection.prepareStatement(FIND_ALTS_SINGLE_SERVER); + + statement.setString(1, bot.host + ":" + bot.port); + statement.setString(2, ip); + } final ResultSet result = statement.executeQuery();