/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package vortex.commands;
import com.jagrosh.jdautilities.commandclient.Command;
import com.jagrosh.jdautilities.commandclient.CommandEvent;
import java.util.LinkedList;
import java.util.List;
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Member;
import vortex.AutoMod;
import vortex.ModLogger;
import vortex.data.DMSpamManager;
import vortex.data.DatabaseManager;
/**
*
* @author John Grosh (john.a.grosh@gmail.com)
*/
public class AntidmspamCmd extends Command {
private final DatabaseManager manager;
private final DMSpamManager dmspam;
public AntidmspamCmd(DatabaseManager manager, DMSpamManager dmspam)
{
this.manager = manager;
this.dmspam = dmspam;
this.guildOnly = true;
this.name = "antidmspam";
this.aliases = new String[]{"antidm","block"};
this.category = new Category("AutoMod");
this.arguments = "<ON|OFF|REMOVE|REMOVEALL>";
this.help = "enables or disabled auto-raidmode";
this.userPermissions = new Permission[]{Permission.MANAGE_SERVER,Permission.KICK_MEMBERS};
this.botPermissions = new Permission[]{Permission.KICK_MEMBERS};
}
@Override
protected void execute(CommandEvent event) {
if(event.getArgs().equalsIgnoreCase("off"))
{
manager.setBlockDmSpam(event.getGuild(), false);
event.replySuccess("DM-Spam blocking has been disabled.");
}
else if(event.getArgs().equalsIgnoreCase("on"))
{
manager.setBlockDmSpam(event.getGuild(), true);
event.replySuccess("DM-Spam blocking has been enabled.");
}
else if(event.getArgs().equalsIgnoreCase("list"))
{
List<Member> members = new LinkedList<>();
for(Member member: event.getGuild().getMembers())
if(member.getRoles().isEmpty() && !member.isOwner() && !dmspam.getDMSpamServers(member.getUser()).isEmpty())
members.add(member);
StringBuilder sb = new StringBuilder();
EmbedBuilder eb = new EmbedBuilder().setColor(event.getGuild().getSelfMember().getColor());
for(Member member: members)
{
if(sb.length()>3970)
{
event.reply(eb.setDescription(sb.toString().trim()).build());
sb = new StringBuilder();
}
sb.append(" ").append(member.getUser().getAsMention());
}
event.reply(eb.setDescription(sb.toString().trim()).build());
}
else if(event.getArgs().equalsIgnoreCase("listall"))
{
List<Member> members = new LinkedList<>();
for(Member member: event.getGuild().getMembers())
if(!dmspam.getDMSpamServers(member.getUser()).isEmpty())
members.add(member);
StringBuilder sb = new StringBuilder();
EmbedBuilder eb = new EmbedBuilder().setColor(event.getGuild().getSelfMember().getColor());
for(Member member: members)
{
if(sb.length()>3970)
{
event.reply(eb.setDescription(sb.toString().trim()).build());
sb = new StringBuilder();
}
sb.append(" ").append(member.getUser().getAsMention());
}
event.reply(eb.setDescription(sb.toString().trim()).build());
}
else if(event.getArgs().equalsIgnoreCase("remove"))
{
int count = 0;
for(Member member: event.getGuild().getMembers())
if(member.getRoles().isEmpty() && !member.isOwner())
{
List<Guild> spams = dmspam.getDMSpamServers(member.getUser());
String msg = "You have been kicked from **"+event.getGuild().getName()+"** for being in the following server(s):\n";
String msg2 = "\n\nThese servers are known to be the origin of large amounts of direct-message spam and advertisements, "
+ "and therefore all members are prevented from joining. If you would like to rejoin **"+event.getGuild().getName()
+ "**, please leave these servers.";
if(!spams.isEmpty())
{
count++;
String str = "";
for(Guild g: spams)
str+="\n **"+g.getName()+"**";
String fmsg = msg+str+msg2;
try {
member.getUser().openPrivateChannel().queue(pc -> pc.sendMessage(fmsg).queue(
m -> event.getGuild().getController().kick(member, "Being in a DM-spam server").queue(),
v -> event.getGuild().getController().kick(member, "Being in a DM-spam server").queue()),
v -> event.getGuild().getController().kick(member, "Being in a DM-spam server").queue());
} catch(Exception e) {
event.getGuild().getController().kick(member, "Being in a DM-spam server").queue();
}
}
}
event.replySuccess("Kicking "+count+" members (without roles) that are in DM-spam servers.");
}
else
{
event.replyError("Valid values are:\n"
+ "`OFF` - disables DM-Spam blocking\n"
+ "`ON` - enables DM-Spam blocking\n"
+ "`REMOVE` - removes any users in the server without roles that is in a DM-spam server\n"
//+ "`REMOVEALL` - removes any users in the server, even with roles (except those with elevated permissions), that is in a DM-spam server\n"
+ "`LIST` - shows what users would be removed via REMOVE\n"
+ "`LISTALL` - shows users in the server that are in a DM-spam server"
);
}
}
}