MissingIdentifier/src/main/java/Modules/Purge.java

99 lines
3.3 KiB
Java

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<String> messageIds = null;
long counter = -1, limiter = -1;
messageIds = new ArrayList<String>();
// 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;
}
}