refactor: some alts refactoring and maybe fixes
This commit is contained in:
@@ -1 +1 @@
|
||||
1471
|
||||
1477
|
||||
@@ -1,5 +1,6 @@
|
||||
package me.chayapak1.chomens_bot.commands;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import me.chayapak1.chomens_bot.Bot;
|
||||
import me.chayapak1.chomens_bot.command.Command;
|
||||
import me.chayapak1.chomens_bot.command.CommandContext;
|
||||
@@ -10,6 +11,7 @@ import me.chayapak1.chomens_bot.util.ColorUtilities;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class FindAltsCommand extends Command {
|
||||
@@ -59,7 +61,7 @@ public class FindAltsCommand extends Command {
|
||||
}
|
||||
|
||||
private Component handle (Bot bot, String targetIP, boolean argumentIsIP, String player, boolean allServer) {
|
||||
final List<String> alts = bot.playersDatabase.findPlayerAlts(targetIP, allServer);
|
||||
final Map<String, JsonNode> altsMap = bot.playersDatabase.findPlayerAlts(targetIP, allServer);
|
||||
|
||||
final Component playerComponent = Component
|
||||
.text(player)
|
||||
@@ -82,8 +84,36 @@ public class FindAltsCommand extends Command {
|
||||
)
|
||||
.appendNewline();
|
||||
|
||||
final List<String> sorted = altsMap.entrySet().stream()
|
||||
.limit(200) // only find 200 alts because more than this is simply too many
|
||||
.sorted((a, b) -> {
|
||||
// a
|
||||
|
||||
final JsonNode aLastSeen = a.getValue().get("lastSeen");
|
||||
|
||||
if (aLastSeen == null || aLastSeen.isNull()) return 0;
|
||||
|
||||
final JsonNode aTimeNode = aLastSeen.get("time");
|
||||
|
||||
if (aTimeNode == null || aTimeNode.isNull()) return 0;
|
||||
|
||||
// b
|
||||
|
||||
final JsonNode bLastSeen = b.getValue().get("lastSeen");
|
||||
|
||||
if (bLastSeen == null || bLastSeen.isNull()) return 0;
|
||||
|
||||
final JsonNode bTimeNode = bLastSeen.get("time");
|
||||
|
||||
if (bTimeNode == null || bTimeNode.isNull()) return 0;
|
||||
|
||||
return Long.compare(bTimeNode.asLong(), aTimeNode.asLong());
|
||||
})
|
||||
.map(Map.Entry::getKey)
|
||||
.toList();
|
||||
|
||||
int i = 0;
|
||||
for (String username : alts) {
|
||||
for (String username : sorted) {
|
||||
component = component
|
||||
.append(
|
||||
Component
|
||||
|
||||
@@ -14,8 +14,8 @@ import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class PlayersDatabasePlugin extends PlayersPlugin.Listener {
|
||||
@@ -23,8 +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_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 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
|
||||
|
||||
private static final ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
@@ -73,10 +73,10 @@ public class PlayersDatabasePlugin extends PlayersPlugin.Listener {
|
||||
}
|
||||
}
|
||||
|
||||
public List<String> findPlayerAlts (String ip) { return findPlayerAlts(ip, false); }
|
||||
public List<String> findPlayerAlts (String ip, boolean allServer) {
|
||||
public Map<String, JsonNode> findPlayerAlts (String ip) { return findPlayerAlts(ip, false); }
|
||||
public Map<String, JsonNode> findPlayerAlts (String ip, boolean allServer) {
|
||||
try {
|
||||
final List<String> output = new ArrayList<>();
|
||||
final Map<String, JsonNode> output = new HashMap<>();
|
||||
|
||||
PreparedStatement statement;
|
||||
|
||||
@@ -93,10 +93,15 @@ public class PlayersDatabasePlugin extends PlayersPlugin.Listener {
|
||||
|
||||
final ResultSet result = statement.executeQuery();
|
||||
|
||||
while (result.next()) output.add(result.getString("username"));
|
||||
while (result.next()) {
|
||||
output.put(
|
||||
result.getString("username"),
|
||||
objectMapper.readTree(result.getString("data"))
|
||||
);
|
||||
}
|
||||
|
||||
return output;
|
||||
} catch (SQLException e) {
|
||||
} catch (SQLException | JsonProcessingException e) {
|
||||
bot.logger.error(e);
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user