Added /seen command
This commit is contained in:
parent
2d652bc780
commit
425eaf2b94
|
|
@ -6,7 +6,10 @@ import com.alttd.config.MessagesConfig;
|
||||||
import com.alttd.database.queries.QueriesUserUUID;
|
import com.alttd.database.queries.QueriesUserUUID;
|
||||||
import com.alttd.database.queries.queriesSeen.PlaytimeSeen;
|
import com.alttd.database.queries.queriesSeen.PlaytimeSeen;
|
||||||
import com.alttd.database.queries.queriesSeen.SeenQueries;
|
import com.alttd.database.queries.queriesSeen.SeenQueries;
|
||||||
|
import com.alttd.templates.Parser;
|
||||||
|
import com.alttd.templates.Template;
|
||||||
import com.alttd.util.Util;
|
import com.alttd.util.Util;
|
||||||
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
import net.dv8tion.jda.api.JDA;
|
import net.dv8tion.jda.api.JDA;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
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.interactions.commands.build.Commands;
|
||||||
import net.dv8tion.jda.api.requests.RestAction;
|
import net.dv8tion.jda.api.requests.RestAction;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class CommandSeen extends DiscordCommand {
|
public class CommandSeen extends DiscordCommand {
|
||||||
|
|
||||||
private final CommandData commandData;
|
private final CommandData commandData;
|
||||||
|
private static final List<String> validServers = List.of("lobby", "creative", "fjord", "grotto");
|
||||||
|
|
||||||
public CommandSeen(JDA jda, CommandManager commandManager) {
|
public CommandSeen(JDA jda, CommandManager commandManager) {
|
||||||
commandData = Commands.slash(getName(), "Check when a player was last online.")
|
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)
|
.setGuildOnly(true)
|
||||||
.setDefaultPermissions(DefaultMemberPermissions.ENABLED);
|
.setDefaultPermissions(DefaultMemberPermissions.ENABLED);
|
||||||
|
|
||||||
|
|
@ -41,39 +48,36 @@ public class CommandSeen extends DiscordCommand {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(SlashCommandInteractionEvent event) {
|
public void execute(SlashCommandInteractionEvent event) {
|
||||||
OptionMapping option = event.getOption("playername");
|
String playerName = event.getOption("playername", OptionMapping::getAsString);
|
||||||
if (option == null) {
|
if (playerName == null || playerName.length() < 3 || playerName.length() > 16) {
|
||||||
|
error(event);
|
||||||
return;
|
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) {
|
if (uuid == null) {
|
||||||
error(event);
|
error(event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Determine if a player is online or not? currently not possible?
|
List<PlaytimeSeen> lastSeen = SeenQueries.getLastSeen(uuid);
|
||||||
PlaytimeSeen lastSeen = SeenQueries.getLastSeen(uuid);
|
if (lastSeen == null || lastSeen.isEmpty()) {
|
||||||
if (lastSeen == null || lastSeen.getLastSeen() == 0) {
|
|
||||||
error(event);
|
error(event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String SEEN_FORMAT = "Player <gold>%player%</gold> has been %online/offline% for %time% on %server%.</white>";
|
EmbedBuilder embedBuilder = new EmbedBuilder();
|
||||||
event.replyEmbeds(Util.genericSuccessEmbed("Success",
|
embedBuilder
|
||||||
SEEN_FORMAT
|
.setTitle("Seen")
|
||||||
.replaceAll("%player%", playerName)
|
.setColor(Color.GREEN)
|
||||||
// .replaceAll("%online/offline%", Config.Messages.SEEN_OFFLINE_FORMAT.getMessage())
|
.appendDescription("`" + Util.capitalize(playerName) + "`'s seen information per server:\n\n");
|
||||||
.replaceAll("%time%", getPassedTime(lastSeen.getLastSeen()))
|
for (PlaytimeSeen playtimeSeen : lastSeen) {
|
||||||
.replaceAll("%server%", lastSeen.getServer())
|
if (playtimeSeen == null || playtimeSeen.getLastSeen() == 0 || !validServers.contains(playtimeSeen.getServer().toLowerCase()))
|
||||||
))
|
continue;
|
||||||
|
embedBuilder.appendDescription(Util.capitalize(playtimeSeen.getServer()) + ": " + "<t:" + TimeUnit.MILLISECONDS.toSeconds(playtimeSeen.getLastSeen()) +":R>\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
event.replyEmbeds(embedBuilder.build())
|
||||||
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.alttd.config;
|
package com.alttd.config;
|
||||||
|
|
||||||
import net.dv8tion.jda.api.entities.Activity;
|
|
||||||
|
|
||||||
public class SettingsConfig extends AbstractConfig {
|
public class SettingsConfig extends AbstractConfig {
|
||||||
|
|
||||||
static SettingsConfig settingsConfig;
|
static SettingsConfig settingsConfig;
|
||||||
|
|
|
||||||
|
|
@ -5,22 +5,27 @@ import com.alttd.database.Database;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class SeenQueries {
|
public class SeenQueries {
|
||||||
|
|
||||||
public static PlaytimeSeen getLastSeen(UUID uuid) {
|
public static List<PlaytimeSeen> 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 {
|
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());
|
statement.setString(1, uuid.toString());
|
||||||
|
|
||||||
ResultSet resultSet = statement.executeQuery();
|
ResultSet resultSet = statement.executeQuery();
|
||||||
|
ArrayList<PlaytimeSeen> playtimeSeenList = new ArrayList<>();
|
||||||
if (resultSet.next()) {
|
while (resultSet.next()) {
|
||||||
PlaytimeSeen playtimeSeen = new PlaytimeSeen(uuid, resultSet.getString("server_name"), resultSet.getLong("last_seen"));
|
playtimeSeenList.add(new PlaytimeSeen(uuid, resultSet.getString("server_name"), resultSet.getLong("last_seen")));
|
||||||
return playtimeSeen;
|
|
||||||
}
|
}
|
||||||
|
return playtimeSeenList;
|
||||||
} catch (SQLException exception) {
|
} catch (SQLException exception) {
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -210,4 +210,10 @@ public class Util {
|
||||||
|
|
||||||
return stringBuilder.substring(0, stringBuilder.length() - 2);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user