feat: all server support for FindAltsCommand

This commit is contained in:
ChomeNS
2025-01-14 17:18:34 +07:00
parent 72fde45465
commit a1a3be3ee5
3 changed files with 30 additions and 12 deletions

View File

@@ -1 +1 @@
1461
1463

View File

@@ -17,7 +17,7 @@ public class FindAltsCommand extends Command {
super(
"findalts",
"Finds players with the same IP address",
new String[] { "<player>", "<ip>" },
new String[] { "-allserver <player|ip>", "<player|ip>" },
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<String> 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<String> alts = bot.playersDatabase.findPlayerAlts(targetIP);
private Component handle (Bot bot, String targetIP, boolean argumentIsIP, String player, boolean allServer) {
final List<String> alts = bot.playersDatabase.findPlayerAlts(targetIP, allServer);
final Component playerComponent = Component
.text(player)

View File

@@ -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<String> findPlayerAlts (String ip) {
public List<String> findPlayerAlts (String ip) { return findPlayerAlts(ip, false); }
public List<String> findPlayerAlts (String ip, boolean allServer) {
try {
final List<String> 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();