package Modules; import Controll.GuildController; import Controll.SuperModule; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.events.GenericEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; public class Purge extends SuperModule{ private final Logger logger = LoggerFactory.getLogger(Purge.class); public static final String COMMAND = "purge"; public Purge(GuildController guildController){ super(COMMAND, guildController, null); } @Override public String getCommand() { return Purge.COMMAND; } @Override public String getDescription() { return "Deletes Messages.\n`-n NUMBER` number of messages to delete\n`@USER` delete messages from user only."; } @Override public void execute(GenericEvent genericEvent) { GuildMessageReceivedEvent event = null; List messageIds = null; long counter = -1, limiter = -1; messageIds = new ArrayList(); // if this is a GuildMessageReceivedEvent, cast it, else return if (!(genericEvent instanceof GuildMessageReceivedEvent)) return; event = (GuildMessageReceivedEvent) genericEvent; if (!isCommand(event.getMessage())) return; logger.debug(COMMAND + "triggered"); // if the author of the message has the mod privileges or is the owner continue, else return if (!checkForAdmin(event.getMember())){ event.getChannel().sendMessage("I am Sorry, you are not allowed to do that!\nMay ask " + event.getGuild().getRoleById(getGuildController().getMOD_ROLE()).getAsMention() + " to do that.").queue( m -> m.delete().queueAfter(30, TimeUnit.SECONDS) ); event.getMessage().delete().queueAfter(30, TimeUnit.SECONDS); return; } // if the message contains "purge[whitespace]-n[whitespace]messageCount", parse messageCount and delete that many messages if (getParameter(event.getMessage().getContentRaw(), "n") != null) { limiter = Integer.parseInt(getParameter(event.getMessage().getContentRaw(),"n")); } else { limiter = 10; } //if there was no messageCount to be parsed, limiter will run from -1 towards negative and never reach 0 (ignoring overflow), full purge for (Message msg : event.getChannel().getIterableHistory()) { if (!msg.isPinned() && (event.getMessage().getMentionedMembers().size() != 1 || msg.getAuthor().getIdLong() == event.getMessage().getMentionedMembers().get(0).getIdLong())) { messageIds.add(msg.getId()); counter++; limiter--; } if (limiter < 0) break; } // purge all collected messages event.getChannel().purgeMessagesById(messageIds); event.getChannel().sendMessage(counter + " messages purged.").queue(message -> message.delete().queueAfter(1, TimeUnit.MINUTES)); logger.debug(counter + " messages purged."); } @Override public String showSettings() { return null; } }