99 lines
3.3 KiB
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;
|
|
}
|
|
}
|