129 lines
5.7 KiB
Java
129 lines
5.7 KiB
Java
package com.alttd.commandManager.commands;
|
|
|
|
import com.alttd.commandManager.CommandManager;
|
|
import com.alttd.commandManager.DiscordCommand;
|
|
import com.alttd.listeners.ChatListener;
|
|
import com.alttd.util.Util;
|
|
import net.dv8tion.jda.api.JDA;
|
|
import net.dv8tion.jda.api.Permission;
|
|
import net.dv8tion.jda.api.entities.Guild;
|
|
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
|
|
import net.dv8tion.jda.api.entities.channel.unions.GuildChannelUnion;
|
|
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 java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
public class CommandSoftLock extends DiscordCommand {
|
|
|
|
private final CommandData commandData;
|
|
private final ChatListener chatListener;
|
|
|
|
public CommandSoftLock(JDA jda, CommandManager commandManager, ChatListener chatListener) {
|
|
this.chatListener = chatListener;
|
|
this.commandData = Commands.slash(getName(), "Auto delete all messages in a channel")
|
|
.addOption(OptionType.STRING, "state", "Set the soft lock \"on\" or \"off\"", true, true)
|
|
.addOption(OptionType.CHANNEL, "channel", "Channel to change soft lock state for", true)
|
|
.setDefaultPermissions(DefaultMemberPermissions.enabledFor(Permission.ADMINISTRATOR))
|
|
.setGuildOnly(true);
|
|
|
|
Util.registerCommand(commandManager, jda, commandData, getName());
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return "softlock";
|
|
}
|
|
|
|
private final List<String> states = List.of("on", "off");
|
|
@Override
|
|
public void execute(SlashCommandInteractionEvent event) {
|
|
String state = event.getOption("state", OptionMapping::getAsString);
|
|
Guild guild = event.getGuild();
|
|
if (guild == null || state == null) {
|
|
event.replyEmbeds(Util.genericErrorEmbed("Error", "This command can only be used in a guild"))
|
|
.setEphemeral(true).queue();
|
|
return;
|
|
}
|
|
GuildChannelUnion channel = event.getOption("channel", OptionMapping::getAsChannel);
|
|
if (channel == null) {
|
|
event.replyEmbeds(Util.genericErrorEmbed("Error", "No valid channel was specified"))
|
|
.setEphemeral(true).queue();
|
|
return;
|
|
}
|
|
if (!channel.getType().isMessage()) {
|
|
event.replyEmbeds(Util.genericErrorEmbed("Error", "No valid text channel was specified"))
|
|
.setEphemeral(true).queue();
|
|
return;
|
|
}
|
|
long guildId = event.getGuild().getIdLong();
|
|
long channelId = event.getChannel().getIdLong();
|
|
if (!event.getGuild().getSelfMember().getPermissions(channel).contains(Permission.MESSAGE_MANAGE)) {
|
|
event.replyEmbeds(Util.genericErrorEmbed("Error", "I can't manage messages in <#" + channelId + ">"))
|
|
.setEphemeral(true).queue();
|
|
return;
|
|
}
|
|
state = state.toLowerCase();
|
|
switch (state) {
|
|
case "on" -> {
|
|
if (chatListener.containsChannel(guildId, channelId)) {
|
|
event.replyEmbeds(Util.genericErrorEmbed("Error", "<#" + channelId + ">" + " is already locked"))
|
|
.setEphemeral(true).queue();
|
|
break;
|
|
}
|
|
if (!chatListener.lockChannel(guildId, channelId))
|
|
event.replyEmbeds(Util.genericErrorEmbed("Error", "<#" + channelId + ">" + " could not be locked"))
|
|
.setEphemeral(true).queue();
|
|
event.replyEmbeds(Util.genericSuccessEmbed("Success", "Soft locked " + "<#" + channelId + ">" + "!"))
|
|
.setEphemeral(true).queue();
|
|
}
|
|
case "off" -> {
|
|
if (!chatListener.containsChannel(guildId, channelId)) {
|
|
event.replyEmbeds(Util.genericErrorEmbed("Error", "<#" + channelId + ">" + " isn't locked"))
|
|
.setEphemeral(true).queue();
|
|
break;
|
|
}
|
|
if (!chatListener.unlockChannel(guildId, channelId))
|
|
event.replyEmbeds(Util.genericErrorEmbed("Error", "<#" + channelId + ">" + " could not be unlocked"))
|
|
.setEphemeral(true).queue();
|
|
event.replyEmbeds(Util.genericSuccessEmbed("Success", "Unlocked " + "<#" + channelId + ">"))
|
|
.setEphemeral(true).queue();
|
|
}
|
|
default -> event.replyEmbeds(Util.genericErrorEmbed("Error", "Invalid state"))
|
|
.setEphemeral(true).queue();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void suggest(CommandAutoCompleteInteractionEvent event) {
|
|
String state = event.getOption("state", OptionMapping::getAsString);
|
|
Guild guild = event.getGuild();
|
|
if (guild == null || state == null) {
|
|
event.replyChoiceStrings(new ArrayList<>()).queue();
|
|
return;
|
|
}
|
|
String finalState = state.toLowerCase();
|
|
event.replyChoiceStrings(states.stream()
|
|
.filter(s -> s.startsWith(finalState))
|
|
.collect(Collectors.toList())
|
|
).queue();
|
|
}
|
|
|
|
@Override
|
|
public String getHelpMessage() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public CommandData getCommandData() {
|
|
return commandData;
|
|
}
|
|
}
|