feat: all server support for FindAltsCommand
This commit is contained in:
@@ -1 +1 @@
|
||||
1461
|
||||
1463
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user