AltitudeBot/src/main/java/com/alttd/commandManager/commands/CommandSeen.java
2022-09-29 13:02:53 +02:00

135 lines
5.4 KiB
Java

package com.alttd.commandManager.commands;
import com.alttd.commandManager.CommandManager;
import com.alttd.commandManager.DiscordCommand;
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.util.Util;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.commands.OptionType;
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.util.Collections;
import java.util.Date;
import java.util.UUID;
public class CommandSeen extends DiscordCommand {
private final CommandData commandData;
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)
.setGuildOnly(true)
.setDefaultPermissions(DefaultMemberPermissions.ENABLED);
Util.registerCommand(commandManager, jda, commandData, getName());
}
@Override
public String getName() {
return "seen";
}
@Override
public void execute(SlashCommandInteractionEvent event) {
OptionMapping option = event.getOption("playername");
if (option == null) {
return;
}
String playerName = option.getAsString();
UUID uuid;
try{
uuid = UUID.fromString(playerName);
playerName = QueriesUserUUID.getUsernameByUUID(uuid);
} catch (IllegalArgumentException exception){
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) {
error(event);
return;
}
String SEEN_FORMAT = "Player <gold>%player%</gold> has been %online/offline% for %time% on %server%.</white>";
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())
))
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
}
@Override
public void suggest(CommandAutoCompleteInteractionEvent event) {
event.replyChoices(Collections.emptyList())
.queue(RestAction.getDefaultSuccess(), Util::handleFailure);
}
@Override
public String getHelpMessage() {
return MessagesConfig.HELP_SEEN;
}
@Override
public CommandData getCommandData() {
return commandData;
}
private static String getPassedTime(Long time) {
return Util.convertTime(new Date().getTime() - time);
}
private void error(SlashCommandInteractionEvent event) {
event.replyEmbeds(Util.genericErrorEmbed("Error", "No recorded time."))
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
}
// private static Component getOnlineSeen(String playerName, Player player) {
// UUID uuid = player.getUniqueId();
// PlaytimePlayer playtimePlayer = Queries.getPlaytimePlayer(uuid);
//
// if (playtimePlayer == null) return MiniMessage.get().parse(Config.Messages.PLAYER_NOT_FOUND.getMessage().replaceAll("%player%", playerName));
//
// return getOnlineSeen(playtimePlayer, player);
// }
// private static Component getOfflineSeen(String playerName) {
// UUID uuid = Utilities.getPlayerUUID(playerName);
//
// if (uuid == null) return MiniMessage.get().parse(Config.Messages.PLAYER_NOT_FOUND.getMessage().replaceAll("%player%", playerName));
//
// return getOfflineSeen(uuid);
// }
//
// private static Component getOfflineSeen(UUID uuid) {
// if (uuid == null) return Component.empty();
//
// PlaytimeSeen lastSeen = Queries.getLastSeen(uuid);
//
// if (lastSeen == null || lastSeen.getLastSeen() == 0) return MiniMessage.get().parse(Config.Messages.SEEN_TIME_NULL.getMessage());
//
// return MiniMessage.get().parse(Config.Messages.SEEN_FORMAT.getMessage()
// .replaceAll("%player%", Utilities.getPlayerName(uuid))
// .replaceAll("%online/offline%", Config.Messages.SEEN_OFFLINE_FORMAT.getMessage())
// .replaceAll("%time%", getPassedTime(lastSeen.getLastSeen()))
// .replaceAll("%server%", lastSeen.getServer()));
// }
}