Added flag command
This commit is contained in:
parent
851614ed36
commit
d6dbecfe4e
|
|
@ -40,7 +40,8 @@ public class CommandManager extends ListenerAdapter {
|
|||
new CommandSuggestion(jda, modalManager, this),
|
||||
new CommandSetOutputChannel(jda, this),
|
||||
new CommandUpdateCommands(jda, this),
|
||||
new CommandEvidence(jda, modalManager, this));
|
||||
new CommandEvidence(jda, modalManager, this),
|
||||
new CommandFlag(jda, this));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,4 +1,155 @@
|
|||
package com.alttd.commandManager.commands;
|
||||
|
||||
public class CommandFlag {
|
||||
import com.alttd.commandManager.CommandManager;
|
||||
import com.alttd.commandManager.DiscordCommand;
|
||||
import com.alttd.database.queries.QueriesFlags.Flag;
|
||||
import com.alttd.database.queries.QueriesFlags.QueriesFlags;
|
||||
import com.alttd.database.queries.QueriesUserUUID;
|
||||
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;
|
||||
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.awt.*;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class CommandFlag extends DiscordCommand {
|
||||
|
||||
private final CommandData commandData;
|
||||
|
||||
public CommandFlag(JDA jda, CommandManager commandManager) {
|
||||
this.commandData = Commands.slash(getName(), "Show flags for a user")
|
||||
.addOption(OptionType.STRING, "user", "The user to show flags for", true)
|
||||
.setDefaultPermissions(DefaultMemberPermissions.ENABLED);
|
||||
|
||||
Util.registerCommand(commandManager, jda, commandData, getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "flaglist";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(SlashCommandInteractionEvent event) {
|
||||
OptionMapping option = event.getInteraction().getOption("user");
|
||||
if (option == null) {
|
||||
event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to find user option"))
|
||||
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
||||
return;
|
||||
}
|
||||
|
||||
String username = option.getAsString();
|
||||
|
||||
if (username.length() == 36)
|
||||
flagListUUID(username, event);
|
||||
else
|
||||
flagListName(username, event);
|
||||
}
|
||||
|
||||
private void flagListUUID(String username, SlashCommandInteractionEvent event) {
|
||||
UUID uuid;
|
||||
try {
|
||||
uuid = UUID.fromString(username);
|
||||
} catch (IllegalArgumentException e) {
|
||||
event.replyEmbeds(Util.genericErrorEmbed("Error", "Invalid UUID"))
|
||||
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
||||
return;
|
||||
}
|
||||
|
||||
List<Flag> flags = QueriesFlags.getFlags(uuid);
|
||||
|
||||
if (flags == null) {
|
||||
event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to retrieve flags for user"))
|
||||
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
||||
return;
|
||||
}
|
||||
sendFlagEmbed(event, flags, uuid);
|
||||
}
|
||||
|
||||
private void flagListName(String username, SlashCommandInteractionEvent event) {
|
||||
if (!username.matches("^[a-zA-Z0-9_]{2,16}$")) {
|
||||
event.replyEmbeds(Util.genericErrorEmbed("Error", "Invalid username"))
|
||||
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
||||
return;
|
||||
}
|
||||
|
||||
UUID uuid = QueriesUserUUID.getUUIDByUsername(username);
|
||||
if (uuid == null) {
|
||||
event.replyEmbeds(Util.genericErrorEmbed("Error", "Could not find uuid for username"))
|
||||
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
||||
return;
|
||||
}
|
||||
|
||||
List<Flag> flags = QueriesFlags.getFlags(uuid);
|
||||
|
||||
if (flags == null) {
|
||||
event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to retrieve flags for user"))
|
||||
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
||||
return;
|
||||
}
|
||||
sendFlagEmbed(event, flags, username);
|
||||
}
|
||||
|
||||
private void sendFlagEmbed(SlashCommandInteractionEvent event, List<Flag> flags, UUID uuid) {
|
||||
String username = QueriesUserUUID.getUsernameByUUID(uuid);
|
||||
if (username == null) {
|
||||
event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to retrieve username for uuid"))
|
||||
.setEphemeral(true).queue();
|
||||
return;
|
||||
}
|
||||
sendFlagEmbed(event, flags, username);
|
||||
}
|
||||
|
||||
private void sendFlagEmbed(SlashCommandInteractionEvent event, List<Flag> flags, String username) {
|
||||
EmbedBuilder embedBuilder = new EmbedBuilder()
|
||||
.setColor(Color.ORANGE)
|
||||
.setTitle("Flaglist for: " + username);
|
||||
|
||||
int i = 0;
|
||||
for (Flag flag : flags) {
|
||||
if (i == 24)
|
||||
break;
|
||||
embedBuilder.addField(getFlagTitle(flag), getFlagDescription(flag), false);
|
||||
i++;
|
||||
}
|
||||
event.replyEmbeds(embedBuilder.build())
|
||||
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
||||
}
|
||||
|
||||
private String getFlagTitle(Flag flag) {
|
||||
long days = TimeUnit.SECONDS.toDays(flag.length());
|
||||
long daysAgo = TimeUnit.MILLISECONDS.toDays(new Date().getTime() - TimeUnit.SECONDS.toMillis(flag.startTime()));
|
||||
return daysAgo + " days ago, for " + days + " days, by " + flag.flaggedBy();
|
||||
}
|
||||
|
||||
private String getFlagDescription(Flag flag) {
|
||||
return "Reason: " + flag.reason() + "\n[" + ((new Date().after(new Date(TimeUnit.SECONDS.toMillis(flag.expireTime())))) ? "Expired" : "Active") + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void suggest(CommandAutoCompleteInteractionEvent event) {
|
||||
event.replyChoices(Collections.emptyList()).queue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHelpMessage() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandData getCommandData() {
|
||||
return commandData;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
package com.alttd.database.queries.QueriesFlags;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public record Flag(UUID uuid, String reason, long startTime, long expireTime, long length, String flaggedBy) {
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
package com.alttd.database.queries.QueriesFlags;
|
||||
|
||||
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 QueriesFlags {
|
||||
|
||||
public static List<Flag> getFlags(UUID uuid) {
|
||||
String sql = "SELECT * FROM flags_view WHERE uuid = ?";
|
||||
ArrayList<Flag> flags = new ArrayList<>();
|
||||
try {
|
||||
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
|
||||
statement.setString(1, uuid.toString());
|
||||
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
while (resultSet.next()) {
|
||||
flags.add(formatFlag(uuid, resultSet));
|
||||
}
|
||||
return flags;
|
||||
} catch (SQLException exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Flag formatFlag(UUID uuid, ResultSet resultSet) throws SQLException {
|
||||
String reason = resultSet.getString("reason");
|
||||
long startTime = resultSet.getLong("time_flagged");
|
||||
long expireTime = resultSet.getLong("expire_time");
|
||||
long length = expireTime - startTime;
|
||||
String flaggedBy = resultSet.getString("flagged_by");
|
||||
return new Flag(uuid, reason, startTime, expireTime, length, flaggedBy);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
package com.alttd.database.queries;
|
||||
|
||||
import com.alttd.database.Database;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.UUID;
|
||||
|
||||
public class QueriesUserUUID {
|
||||
|
||||
public static UUID getUUIDByUsername(String username) {
|
||||
String sql = "SELECT uuid FROM luckperms_user_view WHERE username = ?";
|
||||
try {
|
||||
PreparedStatement preparedStatement = Database.getDatabase().getConnection().prepareStatement(sql);
|
||||
|
||||
preparedStatement.setString(1, username);
|
||||
ResultSet resultSet = preparedStatement.executeQuery();
|
||||
|
||||
if (resultSet.next())
|
||||
return UUID.fromString(resultSet.getString("uuid"));
|
||||
} catch (SQLException exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getUsernameByUUID(UUID uuid) {
|
||||
String sql = "SELECT username FROM luckperms_user_view WHERE uuid = ?";
|
||||
try {
|
||||
PreparedStatement preparedStatement = Database.getDatabase().getConnection().prepareStatement(sql);
|
||||
|
||||
preparedStatement.setString(1, uuid.toString());
|
||||
ResultSet resultSet = preparedStatement.executeQuery();
|
||||
|
||||
if (resultSet.next())
|
||||
return resultSet.getString("username");
|
||||
} catch (SQLException exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user