refactor: optimize getting player IPs from database stuff
This commit is contained in:
@@ -1 +1 @@
|
||||
1693
|
||||
1698
|
||||
@@ -23,6 +23,7 @@ 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 GET_IP = "SELECT JSON_UNQUOTE(JSON_EXTRACT(data, ?)) AS ip FROM players WHERE username = ?;";
|
||||
private static final String FIND_ALTS_SINGLE_SERVER = "SELECT * FROM players WHERE JSON_CONTAINS(data -> '$.ips', JSON_OBJECT(?, ?));";
|
||||
private static final String FIND_ALTS_ALL_SERVERS = "SELECT * FROM players WHERE JSON_SEARCH(data->'$.ips', 'one', ?);"; // 'one' means case-sensitive
|
||||
|
||||
@@ -73,6 +74,30 @@ public class PlayersDatabasePlugin extends PlayersPlugin.Listener {
|
||||
}
|
||||
}
|
||||
|
||||
public String getPlayerIP (String username) {
|
||||
if (bot.database == null || bot.database.connection == null) return null;
|
||||
|
||||
try {
|
||||
final PreparedStatement statement = bot.database.connection.prepareStatement(GET_IP);
|
||||
|
||||
// this may be dangerous but the server address is configured only in the config
|
||||
// so this should still be safe
|
||||
statement.setString(1, "$.ips.\"" + bot.getServerString(true) + "\"");
|
||||
statement.setString(2, username);
|
||||
|
||||
final ResultSet result = statement.executeQuery();
|
||||
|
||||
if (!result.isBeforeFirst()) return null; // no ip for player in this server
|
||||
|
||||
result.next();
|
||||
|
||||
return result.getString("ip");
|
||||
} catch (SQLException e) {
|
||||
bot.logger.error(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, JsonNode> findPlayerAlts (String ip) { return findPlayerAlts(ip, false); }
|
||||
public Map<String, JsonNode> findPlayerAlts (String ip, boolean allServer) {
|
||||
try {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package me.chayapak1.chomens_bot.plugins;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import me.chayapak1.chomens_bot.Bot;
|
||||
import me.chayapak1.chomens_bot.data.player.PlayerEntry;
|
||||
import me.chayapak1.chomens_bot.util.ComponentUtilities;
|
||||
@@ -68,32 +67,18 @@ public class PlayersPlugin extends Bot.Listener {
|
||||
}
|
||||
}
|
||||
|
||||
public String getPlayerIPFromDatabase (PlayerEntry target) {
|
||||
final JsonNode data = bot.playersDatabase.getPlayerData(target.profile.getName());
|
||||
|
||||
if (data == null) return null;
|
||||
|
||||
final JsonNode ipsObject = data.get("ips");
|
||||
|
||||
if (ipsObject == null || ipsObject.isNull() || !ipsObject.isObject()) return null;
|
||||
|
||||
final JsonNode targetIP = ipsObject.get(bot.getServerString(true));
|
||||
|
||||
if (targetIP == null || targetIP.isNull() || !targetIP.isTextual()) return null;
|
||||
|
||||
return targetIP.textValue();
|
||||
}
|
||||
|
||||
public CompletableFuture<String> getPlayerIP (PlayerEntry target) { return getPlayerIP(target, false); }
|
||||
public CompletableFuture<String> getPlayerIP (PlayerEntry target, boolean forceSeen) {
|
||||
final CompletableFuture<String> outputFuture = new CompletableFuture<>();
|
||||
|
||||
DatabasePlugin.executorService.submit(() -> {
|
||||
final String databaseIP = getPlayerIPFromDatabase(target);
|
||||
if (!forceSeen) {
|
||||
final String databaseIP = bot.playersDatabase.getPlayerIP(target.profile.getName());
|
||||
|
||||
if (databaseIP != null && !forceSeen) {
|
||||
outputFuture.complete(databaseIP);
|
||||
return;
|
||||
if (databaseIP != null) {
|
||||
outputFuture.complete(databaseIP);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
final CompletableFuture<Component> trackedCoreFuture = bot.core.runTracked("essentials:seen " + target.profile.getIdAsString());
|
||||
|
||||
Reference in New Issue
Block a user