Search in sources :

Example 1 with URLCheckFlag

use of stream.flarebot.flarebot.mod.nino.URLCheckFlag in project FlareBot by FlareBot.

the class NINOCommand method onCommand.

@Override
public void onCommand(User sender, GuildWrapper guild, TextChannel channel, Message message, String[] args, Member member) {
    if (args.length >= 1) {
        if (args[0].equalsIgnoreCase("enable") || args[0].equalsIgnoreCase("disable")) {
            boolean enabled = args[0].equalsIgnoreCase("enable");
            ArrayList<URLCheckFlag> flags = new ArrayList<>();
            if (args.length >= 2) {
                if (args[1].equalsIgnoreCase("all"))
                    flags.addAll(Arrays.asList(URLCheckFlag.values));
                else if (args[1].equalsIgnoreCase("default"))
                    flags.addAll(URLCheckFlag.getDefaults());
                else {
                    String[] strFlags = seperator.split(MessageUtils.getMessage(args, 1));
                    URLCheckFlag checkFlag;
                    for (String flag : strFlags) {
                        if ((checkFlag = URLCheckFlag.getFlag(flag)) != null)
                            flags.add(checkFlag);
                        else {
                            MessageUtils.sendWarningMessage("'" + flag + "' is not a valid flag!", channel);
                            return;
                        }
                    }
                }
            }
            if (enabled) {
                if (flags.isEmpty())
                    flags.addAll(URLCheckFlag.getDefaults());
                guild.getNINO().getURLFlags().addAll(flags);
            } else {
                if (flags.isEmpty())
                    guild.getNINO().getURLFlags().clear();
                else
                    guild.getNINO().getURLFlags().removeAll(flags);
            }
            boolean all = (enabled ? guild.getNINO().getURLFlags().size() == URLCheckFlag.getAllFlags().size() : guild.getNINO().getURLFlags().isEmpty());
            channel.sendMessage(MessageUtils.getEmbed(sender).setDescription(FormatUtils.formatCommandPrefix(guild, "I have " + (enabled ? "enabled " : "disabled ") + (all ? "all the flags." : "the " + listToString(flags) + " flag(s)!") + "\n\nTo see the whitelist do `{%}nino whitelist list` and to post the" + " attempts to the modlog enable it with `{%}modlog enable NINO <#channel>`")).setColor(enabled ? ColorUtils.GREEN : ColorUtils.RED).build()).queue();
        } else if (args[0].equalsIgnoreCase("whitelist")) {
            if (args.length == 2) {
                if (args[1].equalsIgnoreCase("list")) {
                    StringBuilder sb = new StringBuilder();
                    StringBuilder channels = new StringBuilder();
                    for (String invite : guild.getNINO().getWhitelist()) sb.append("`").append(invite).append("`").append("\n");
                    for (long channelId : guild.getNINO().getChannels()) {
                        if (guild.getGuild().getTextChannelById(channelId) != null)
                            channels.append(guild.getGuild().getTextChannelById(channelId).getAsMention()).append("\n");
                        else
                            guild.getNINO().getChannels().remove(channelId);
                    }
                    channel.sendMessage(MessageUtils.getEmbed(sender).setColor(ColorUtils.FLAREBOT_BLUE).addField("Whitelisted Invites", sb.toString(), false).addField("Whitelisted Channels", channels.toString(), false).build()).queue();
                } else
                    MessageUtils.sendUsage(this, channel, sender, args);
            } else if (args.length == 3) {
                if (args[1].equalsIgnoreCase("add") || args[1].equalsIgnoreCase("remove")) {
                    String whitelist = args[2];
                    boolean added = args[1].equalsIgnoreCase("add");
                    TextChannel tc = GuildUtils.getChannel(whitelist, guild);
                    if (tc != null) {
                        if (added)
                            guild.getNINO().addChannel(tc.getIdLong());
                        else
                            guild.getNINO().removeChannel(tc.getIdLong());
                        MessageUtils.sendSuccessMessage((added ? "Added " : "Removed ") + tc.getAsMention() + (added ? " to" : " from") + " the whitelist!", channel, sender);
                    } else if (URLConstants.URL_PATTERN_NO_PROTOCOL.matcher(whitelist).matches()) {
                        if (added)
                            guild.getNINO().addUrl(whitelist);
                        else
                            guild.getNINO().removeUrl(whitelist);
                        MessageUtils.sendSuccessMessage((added ? "Added " : "Removed ") + "`" + whitelist + "` " + (added ? "to" : "from") + " the whitelist!", channel, sender);
                    } else {
                        MessageUtils.sendWarningMessage("That is an invalid input! " + "Please try and whitelist a Discord invite or ", channel);
                    }
                } else
                    MessageUtils.sendUsage(this, channel, sender, args);
            } else
                MessageUtils.sendUsage(this, channel, sender, args);
        } else if (args[0].equalsIgnoreCase("message")) {
            if (args.length == 1) {
                MessageUtils.sendUsage(this, channel, sender, args);
                return;
            }
            String msg = null;
            if (args.length >= 3) {
                msg = MessageUtils.getMessage(args, 2);
                if (msg.length() > 250) {
                    MessageUtils.sendWarningMessage("That message is a tad too long, please make it 250 characters max!" + "\n```\n" + msg + "\n```", channel, sender);
                    return;
                }
            }
            if (args[1].equalsIgnoreCase("set")) {
                if (msg != null) {
                    guild.getNINO().setRemoveMessage(msg);
                    MessageUtils.sendSuccessMessage("Message has been set!\n```" + msg + "\n```", channel, sender);
                } else
                    MessageUtils.sendWarningMessage("Please specify a message!", channel);
            } else if (args[1].equalsIgnoreCase("add")) {
                if (msg != null) {
                    guild.getNINO().addRemoveMessage(msg);
                    MessageUtils.sendSuccessMessage("Message has been added!\n```" + msg + "\n```", channel, sender);
                } else
                    MessageUtils.sendWarningMessage("Please specify a message!", channel);
            } else if (args[1].equalsIgnoreCase("remove")) {
                int messageId = 1;
                if (args.length > 2)
                    messageId = GeneralUtils.getInt(args[2], 1);
                int size = guild.getNINO().getRemoveMessages().size();
                if (size == 0) {
                    MessageUtils.sendInfoMessage("This guild has no remove messages!", channel);
                    return;
                }
                if (messageId <= 0 || messageId >= size) {
                    MessageUtils.sendWarningMessage("Invalid message ID!", channel);
                    return;
                }
                String tmp = guild.getNINO().getRemoveMessages().get(messageId);
                guild.getNINO().getRemoveMessages().remove(tmp);
                MessageUtils.sendSuccessMessage("Successfully removed message with ID " + messageId + "!\n```\n" + tmp + "\n```", channel);
            } else if (args[1].equalsIgnoreCase("clear")) {
                guild.getNINO().clearRemoveMessages();
                MessageUtils.sendSuccessMessage("Successfully removed **all** messages from this guild!", channel);
            } else if (args[1].equalsIgnoreCase("list")) {
                int page = 1;
                if (args.length > 2)
                    page = GeneralUtils.getInt(args[2], 1);
                listMessages(guild, page, channel, sender);
            } else
                MessageUtils.sendUsage(this, channel, sender, args);
        } else if (args[0].equalsIgnoreCase("flags")) {
            Set<URLCheckFlag> flags = guild.getNINO().getURLFlags();
            boolean all = flags.size() == URLCheckFlag.getAllFlags().size();
            EmbedBuilder eb = MessageUtils.getEmbed(sender);
            if (!flags.isEmpty())
                eb.addField("Enabled", flags.stream().map(URLCheckFlag::toString).collect(Collectors.joining("\n")), false);
            if (!all)
                eb.addField("Disabled", URLCheckFlag.getAllFlags().stream().filter(f -> !flags.contains(f)).map(URLCheckFlag::toString).collect(Collectors.joining("\n")), false);
            channel.sendMessage(eb.build()).queue();
        } else if (args[0].equalsIgnoreCase("mode")) {
            if (args.length == 2) {
                NINOMode mode = NINOMode.getMode(args[1]);
                if (mode == null)
                    MessageUtils.sendWarningMessage("That is an invalid mode!", channel);
                else {
                    guild.getNINO().setMode(mode.getMode());
                    MessageUtils.sendSuccessMessage("Changed NINO's mode to " + mode.toString(), channel, sender);
                }
            } else {
                StringBuilder sb = new StringBuilder();
                for (NINOMode mode : NINOMode.values()) sb.append(mode.toString()).append(" (").append(mode.getMode()).append(") - ").append(mode.getExplanation()).append("\n");
                MessageUtils.sendMessage("Current Mode: " + guild.getNINO().getNINOMode().toString() + "\nNINO will " + WordUtils.uncapitalize(guild.getNINO().getNINOMode().getExplanation(), '~') + "\n\n**Available Modes**\n" + sb.toString().trim() + "\n\n\n" + "Protocol is the `http://` or `https://` at the start of a URL. Example: `https://google.com`\n" + "Following a URL is when we will check to see if it is a masked link " + "(something like goo.gl, bit.ly etc) and if so follow the redirects and if we see a bad " + "link then it will be caught. This means people can't hide bad links. " + "It does have the disadvantage of being a bit slower though (it will still catch before " + "any human can click it). Example: `https://goo.gl/NfYi94`", channel, sender);
            }
        } else
            MessageUtils.sendUsage(this, channel, sender, args);
    } else
        MessageUtils.sendUsage(this, channel, sender, args);
}
Also used : Arrays(java.util.Arrays) WordUtils(org.apache.commons.lang3.text.WordUtils) PaginationUtil(stream.flarebot.flarebot.util.pagination.PaginationUtil) Member(net.dv8tion.jda.core.entities.Member) TextChannel(net.dv8tion.jda.core.entities.TextChannel) GuildWrapper(stream.flarebot.flarebot.objects.GuildWrapper) GeneralUtils(stream.flarebot.flarebot.util.general.GeneralUtils) Message(net.dv8tion.jda.core.entities.Message) ArrayList(java.util.ArrayList) FormatUtils(stream.flarebot.flarebot.util.general.FormatUtils) Permission(stream.flarebot.flarebot.permissions.Permission) MessageUtils(stream.flarebot.flarebot.util.MessageUtils) CommandType(stream.flarebot.flarebot.commands.CommandType) GuildUtils(stream.flarebot.flarebot.util.general.GuildUtils) NINOMode(stream.flarebot.flarebot.mod.nino.NINOMode) URLConstants(stream.flarebot.flarebot.mod.nino.URLConstants) Collection(java.util.Collection) Set(java.util.Set) ColorUtils(stream.flarebot.flarebot.util.ColorUtils) Collectors(java.util.stream.Collectors) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) ButtonGroupConstants(stream.flarebot.flarebot.util.buttons.ButtonGroupConstants) List(java.util.List) User(net.dv8tion.jda.core.entities.User) PagedEmbedBuilder(stream.flarebot.flarebot.util.pagination.PagedEmbedBuilder) Command(stream.flarebot.flarebot.commands.Command) Pattern(java.util.regex.Pattern) PaginationList(stream.flarebot.flarebot.util.pagination.PaginationList) URLCheckFlag(stream.flarebot.flarebot.mod.nino.URLCheckFlag) TextChannel(net.dv8tion.jda.core.entities.TextChannel) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) PagedEmbedBuilder(stream.flarebot.flarebot.util.pagination.PagedEmbedBuilder) Set(java.util.Set) NINOMode(stream.flarebot.flarebot.mod.nino.NINOMode) ArrayList(java.util.ArrayList) URLCheckFlag(stream.flarebot.flarebot.mod.nino.URLCheckFlag)

Aggregations

ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 List (java.util.List)1 Set (java.util.Set)1 Pattern (java.util.regex.Pattern)1 Collectors (java.util.stream.Collectors)1 EmbedBuilder (net.dv8tion.jda.core.EmbedBuilder)1 Member (net.dv8tion.jda.core.entities.Member)1 Message (net.dv8tion.jda.core.entities.Message)1 TextChannel (net.dv8tion.jda.core.entities.TextChannel)1 User (net.dv8tion.jda.core.entities.User)1 WordUtils (org.apache.commons.lang3.text.WordUtils)1 Command (stream.flarebot.flarebot.commands.Command)1 CommandType (stream.flarebot.flarebot.commands.CommandType)1 NINOMode (stream.flarebot.flarebot.mod.nino.NINOMode)1 URLCheckFlag (stream.flarebot.flarebot.mod.nino.URLCheckFlag)1 URLConstants (stream.flarebot.flarebot.mod.nino.URLConstants)1 GuildWrapper (stream.flarebot.flarebot.objects.GuildWrapper)1 Permission (stream.flarebot.flarebot.permissions.Permission)1