From 425eaf2b9494827cb3ad0ddf4cefdc31a8973307 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Fri, 30 Sep 2022 00:01:10 +0200 Subject: [PATCH] Added /seen command --- .../commandManager/commands/CommandSeen.java | 48 ++++++++++--------- .../java/com/alttd/config/SettingsConfig.java | 2 - .../queries/queriesSeen/SeenQueries.java | 19 +++++--- src/main/java/com/alttd/util/Util.java | 6 +++ 4 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/alttd/commandManager/commands/CommandSeen.java b/src/main/java/com/alttd/commandManager/commands/CommandSeen.java index d2bfdd0..24e460d 100644 --- a/src/main/java/com/alttd/commandManager/commands/CommandSeen.java +++ b/src/main/java/com/alttd/commandManager/commands/CommandSeen.java @@ -6,7 +6,10 @@ import com.alttd.config.MessagesConfig; import com.alttd.database.queries.QueriesUserUUID; import com.alttd.database.queries.queriesSeen.PlaytimeSeen; import com.alttd.database.queries.queriesSeen.SeenQueries; +import com.alttd.templates.Parser; +import com.alttd.templates.Template; import com.alttd.util.Util; +import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; @@ -17,17 +20,21 @@ import net.dv8tion.jda.api.interactions.commands.build.CommandData; import net.dv8tion.jda.api.interactions.commands.build.Commands; import net.dv8tion.jda.api.requests.RestAction; +import java.awt.*; import java.util.Collections; import java.util.Date; +import java.util.List; import java.util.UUID; +import java.util.concurrent.TimeUnit; public class CommandSeen extends DiscordCommand { private final CommandData commandData; + private static final List validServers = List.of("lobby", "creative", "fjord", "grotto"); public CommandSeen(JDA jda, CommandManager commandManager) { commandData = Commands.slash(getName(), "Check when a player was last online.") - .addOption(OptionType.STRING, "playername", "The playername or uuid you want to check.", true, true) + .addOption(OptionType.STRING, "playername", "The playername or uuid you want to check.", true, false) .setGuildOnly(true) .setDefaultPermissions(DefaultMemberPermissions.ENABLED); @@ -41,39 +48,36 @@ public class CommandSeen extends DiscordCommand { @Override public void execute(SlashCommandInteractionEvent event) { - OptionMapping option = event.getOption("playername"); - if (option == null) { + String playerName = event.getOption("playername", OptionMapping::getAsString); + if (playerName == null || playerName.length() < 3 || playerName.length() > 16) { + error(event); return; } - String playerName = option.getAsString(); - UUID uuid; - try{ - uuid = UUID.fromString(playerName); - playerName = QueriesUserUUID.getUsernameByUUID(uuid); - } catch (IllegalArgumentException exception){ - uuid = QueriesUserUUID.getUUIDByUsername(playerName); - } + UUID uuid = QueriesUserUUID.getUUIDByUsername(playerName); if (uuid == null) { error(event); return; } - // TODO Determine if a player is online or not? currently not possible? - PlaytimeSeen lastSeen = SeenQueries.getLastSeen(uuid); - if (lastSeen == null || lastSeen.getLastSeen() == 0) { + List lastSeen = SeenQueries.getLastSeen(uuid); + if (lastSeen == null || lastSeen.isEmpty()) { error(event); return; } - String SEEN_FORMAT = "Player %player% has been %online/offline% for %time% on %server%."; - event.replyEmbeds(Util.genericSuccessEmbed("Success", - SEEN_FORMAT - .replaceAll("%player%", playerName) -// .replaceAll("%online/offline%", Config.Messages.SEEN_OFFLINE_FORMAT.getMessage()) - .replaceAll("%time%", getPassedTime(lastSeen.getLastSeen())) - .replaceAll("%server%", lastSeen.getServer()) - )) + EmbedBuilder embedBuilder = new EmbedBuilder(); + embedBuilder + .setTitle("Seen") + .setColor(Color.GREEN) + .appendDescription("`" + Util.capitalize(playerName) + "`'s seen information per server:\n\n"); + for (PlaytimeSeen playtimeSeen : lastSeen) { + if (playtimeSeen == null || playtimeSeen.getLastSeen() == 0 || !validServers.contains(playtimeSeen.getServer().toLowerCase())) + continue; + embedBuilder.appendDescription(Util.capitalize(playtimeSeen.getServer()) + ": " + "\n"); + } + + event.replyEmbeds(embedBuilder.build()) .setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure); } diff --git a/src/main/java/com/alttd/config/SettingsConfig.java b/src/main/java/com/alttd/config/SettingsConfig.java index 678d9cd..cc788e0 100644 --- a/src/main/java/com/alttd/config/SettingsConfig.java +++ b/src/main/java/com/alttd/config/SettingsConfig.java @@ -1,7 +1,5 @@ package com.alttd.config; -import net.dv8tion.jda.api.entities.Activity; - public class SettingsConfig extends AbstractConfig { static SettingsConfig settingsConfig; diff --git a/src/main/java/com/alttd/database/queries/queriesSeen/SeenQueries.java b/src/main/java/com/alttd/database/queries/queriesSeen/SeenQueries.java index 66abeda..e09d8f5 100644 --- a/src/main/java/com/alttd/database/queries/queriesSeen/SeenQueries.java +++ b/src/main/java/com/alttd/database/queries/queriesSeen/SeenQueries.java @@ -5,22 +5,27 @@ import com.alttd.database.Database; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; public class SeenQueries { - public static PlaytimeSeen getLastSeen(UUID uuid) { - + public static List getLastSeen(UUID uuid) { + String sql = "SELECT server_name, last_seen " + + "FROM playtime_view " + + "WHERE uuid = ? AND last_seen IS NOT NULL " + + "ORDER BY last_seen ASC"; try { - PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement("SELECT server_name, last_seen FROM playtime WHERE uuid = ? AND last_seen IS NOT NULL ORDER BY last_seen DESC LIMIT 1"); + PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql); statement.setString(1, uuid.toString()); ResultSet resultSet = statement.executeQuery(); - - if (resultSet.next()) { - PlaytimeSeen playtimeSeen = new PlaytimeSeen(uuid, resultSet.getString("server_name"), resultSet.getLong("last_seen")); - return playtimeSeen; + ArrayList playtimeSeenList = new ArrayList<>(); + while (resultSet.next()) { + playtimeSeenList.add(new PlaytimeSeen(uuid, resultSet.getString("server_name"), resultSet.getLong("last_seen"))); } + return playtimeSeenList; } catch (SQLException exception) { exception.printStackTrace(); } diff --git a/src/main/java/com/alttd/util/Util.java b/src/main/java/com/alttd/util/Util.java index bff6ff1..31fefec 100644 --- a/src/main/java/com/alttd/util/Util.java +++ b/src/main/java/com/alttd/util/Util.java @@ -210,4 +210,10 @@ public class Util { return stringBuilder.substring(0, stringBuilder.length() - 2); } + + public static String capitalize(String str) { + if (str.length() <= 1) + return str.toUpperCase(); + return str.toUpperCase().charAt(0) + str.toLowerCase().substring(1); + } }