Search in sources :

Example 1 with EntityGuild

use of tk.ardentbot.utils.rpg.EntityGuild in project Ardent by adamint.

the class CommandFactory method pass.

/**
     * Handles generic message events, parses message content
     * and creates a new AsyncCommandExecutor that will execute the command
     *
     * @param event the MessageReceivedEvent to be handled
     */
public void pass(MessageReceivedEvent event, String prefix) {
    try {
        Guild guild = event.getGuild();
        User ardent = guild.getSelfMember().getUser();
        User user = event.getAuthor();
        if (user.isBot())
            return;
        Message message = event.getMessage();
        MessageChannel channel = event.getChannel();
        String[] args = message.getContent().split(" ");
        String rawContent = message.getRawContent();
        if (rawContent.startsWith(guild.getSelfMember().getUser().getAsMention())) {
            rawContent = rawContent.replaceFirst(ardent.getAsMention(), "");
            if (rawContent.length() == 0)
                channel.sendMessage("Type @Ardent [msg] to talk to me or /help to see a list of commands").queue();
            else {
                if (!Ardent.disabledCommands.contains("cleverbot")) {
                    channel.sendMessage(Unirest.post("https://cleverbot.io/1.0/ask").field("user", Ardent.cleverbotUser).field("key", Ardent.cleverbotKey).field("nick", "ardent").field("text", rawContent).asJson().getBody().getObject().getString("response")).queue();
                } else
                    channel.sendMessage("Cleverbot is currently disabled, sorry.").queue();
            }
            return;
        }
        if (!args[0].startsWith(prefix))
            return;
        String cmd = args[0].replaceFirst(prefix, "");
        final boolean[] ranCommand = { false };
        String pre = StringEscapeUtils.escapeJava(prefix);
        if (args[0].startsWith(pre)) {
            args[0] = args[0].replaceFirst(pre, "");
            baseCommands.forEach(command -> {
                if (command.getBotCommand().containsAlias(args[0])) {
                    command.botCommand.usages++;
                    if (!Ardent.disabledCommands.contains(command.getName())) {
                        EntityGuild entityGuild = EntityGuild.get(guild);
                        for (RestrictedUser u : entityGuild.getRestrictedUsers()) {
                            if (u.getUserId().equalsIgnoreCase(user.getId())) {
                                command.sendRestricted(user);
                                return;
                            }
                        }
                        GuildModel guildModel = BaseCommand.asPojo(r.table("guilds").get(guild.getId()).run(connection), GuildModel.class);
                        if (guildModel == null) {
                            guildModel = new GuildModel(guild.getId(), "english", "/");
                            r.table("guilds").insert(r.json(shard.gson.toJson(guildModel))).runNoReply(connection);
                        }
                        if (guildModel.role_permissions != null) {
                            for (RolePermission rolePermission : guildModel.role_permissions) {
                                Member member = guild.getMember(user);
                                Role r = guild.getRoleById(rolePermission.getId());
                                if (r != null && member.getRoles().contains(r) && !member.hasPermission(Permission.MANAGE_SERVER)) {
                                    if (!rolePermission.getCanUseArdentCommands()) {
                                        user.openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage("One of " + "your roles, **" + r.getName() + "**, cannot send Ardent commands!").queue());
                                        return;
                                    }
                                    if (!message.getRawContent().toLowerCase().contains("discord.gg") && !rolePermission.getCanSendDiscordInvites()) {
                                        message.delete().queue();
                                        user.openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage("One of " + "your roles, **" + r.getName() + "**, cannot send Discord server invite " + "links!").queue());
                                        return;
                                    }
                                    if (!rolePermission.getCanSendLinks()) {
                                        if (message.getContent().toLowerCase().contains("http://") || message.getContent().toLowerCase().contains("https://")) {
                                            message.delete().queue();
                                            user.openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage("One" + " of " + "your roles, **" + r.getName() + "**, cannot send websiet links!").queue());
                                            return;
                                        }
                                    }
                                }
                            }
                        }
                        new AsyncCommandExecutor(command.botCommand, guild, channel, event.getAuthor(), message, args, user).run();
                        commandsReceived++;
                        ranCommand[0] = true;
                        UserUtils.addMoney(user, 1);
                    } else {
                        command.sendTranslatedMessage("Sorry, this command is currently disabled and will be re-enabled soon.", channel, user);
                        ranCommand[0] = true;
                    }
                }
            });
        }
        if (!ranCommand[0]) {
            if (!prefix.equalsIgnoreCase("/")) {
                pass(event, "/");
            }
        }
    } catch (Throwable ex) {
        if (ex instanceof PermissionException) {
            event.getAuthor().openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage("I don't have permission to " + "send a message in this channel, please tell a server administrator").queue());
        } else {
            new BotException(ex);
        }
    }
}
Also used : PermissionException(net.dv8tion.jda.core.exceptions.PermissionException) GuildModel(tk.ardentbot.rethink.models.GuildModel) net.dv8tion.jda.core.entities(net.dv8tion.jda.core.entities) UserUtils(tk.ardentbot.utils.discord.UserUtils) RestrictedUser(tk.ardentbot.utils.models.RestrictedUser) Database.r(tk.ardentbot.rethink.Database.r) HashMap(java.util.HashMap) ChatterBotSession(com.google.code.chatterbotapi.ChatterBotSession) BotException(tk.ardentbot.core.misc.logging.BotException) Shard(tk.ardentbot.main.Shard) RolePermission(tk.ardentbot.rethink.models.RolePermission) EntityGuild(tk.ardentbot.utils.rpg.EntityGuild) PermissionException(net.dv8tion.jda.core.exceptions.PermissionException) Unirest(com.mashape.unirest.http.Unirest) Permission(net.dv8tion.jda.core.Permission) Database.connection(tk.ardentbot.rethink.Database.connection) MessageReceivedEvent(net.dv8tion.jda.core.events.message.MessageReceivedEvent) StringEscapeUtils(org.apache.commons.lang3.StringEscapeUtils) Ardent(tk.ardentbot.main.Ardent) ConcurrentLinkedQueue(java.util.concurrent.ConcurrentLinkedQueue) GuildModel(tk.ardentbot.rethink.models.GuildModel) RestrictedUser(tk.ardentbot.utils.models.RestrictedUser) EntityGuild(tk.ardentbot.utils.rpg.EntityGuild) EntityGuild(tk.ardentbot.utils.rpg.EntityGuild) BotException(tk.ardentbot.core.misc.logging.BotException) RolePermission(tk.ardentbot.rethink.models.RolePermission) RestrictedUser(tk.ardentbot.utils.models.RestrictedUser)

Example 2 with EntityGuild

use of tk.ardentbot.utils.rpg.EntityGuild in project Ardent by adamint.

the class Restrict method setupSubcommands.

@Override
public void setupSubcommands() throws Exception {
    subcommands.add(new Subcommand("Prevent a user from using Ardent commands", "block @User", "block") {

        @Override
        public void onCall(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
            Member member = guild.getMember(user);
            if (member.hasPermission(Permission.MANAGE_SERVER)) {
                List<User> mentionedUsers = message.getMentionedUsers();
                if (mentionedUsers.size() > 0) {
                    for (User mentioned : mentionedUsers) {
                        Member mentionedMember = guild.getMember(mentioned);
                        if (mentionedMember.hasPermission(member.getPermissions()) || mentionedMember.hasPermission(Permission.MANAGE_SERVER) || mentionedMember.getUser().getId().equalsIgnoreCase(guild.getSelfMember().getUser().getId())) {
                            sendTranslatedMessage("You cannot modify this user because they have the same or higher permissions than " + "you.", channel, user);
                            return;
                        }
                        EntityGuild entityGuild = EntityGuild.get(guild);
                        boolean isRestricted = entityGuild.isRestricted(mentioned);
                        if (isRestricted) {
                            sendTranslatedMessage("This user has already been blocked from using commands!", channel, user);
                        } else {
                            RestrictedUser restrictedUser = new RestrictedUser(mentioned.getId(), user.getId(), guild);
                            entityGuild.addRestricted(restrictedUser);
                            r.db("data").table("restricted").insert(r.json(gson.toJson(new RestrictedUserModel(guild.getId(), mentioned.getId(), user.getId())))).run(connection);
                            sendEditedTranslation("{1} has blocked {0} from sending commands", user, channel, mentioned.getName(), user.getName());
                        }
                    }
                } else
                    sendTranslatedMessage("You need to mention one or more users", channel, user);
            } else
                sendTranslatedMessage("You need the Manage Server permission to use this command", channel, user);
        }
    });
    subcommands.add(new Subcommand("Allow a blocked user to run Ardent commands again", "unblock @User", "unblock") {

        @Override
        public void onCall(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
            if (guild.getMember(user).hasPermission(Permission.MANAGE_SERVER)) {
                List<User> mentionedUsers = message.getMentionedUsers();
                if (mentionedUsers.size() > 0) {
                    for (User mentioned : mentionedUsers) {
                        EntityGuild entityGuild = EntityGuild.get(guild);
                        boolean isRestricted = entityGuild.isRestricted(mentioned);
                        if (!isRestricted) {
                            sendEditedTranslation("{0} isn't restricted from sending commands!", user, channel, mentioned.getName());
                        } else {
                            entityGuild.removeRestricted(mentioned.getId());
                            r.db("data").table("restricted").filter(row -> row.g("user_id").eq(mentioned.getId()).and(row.g("guild_id").eq(guild.getId()))).delete().run(connection);
                            sendEditedTranslation("{0} unrestricted {1}, allowing them to use commands again", user, channel, mentioned.getName(), user.getName());
                        }
                    }
                } else
                    sendTranslatedMessage("You need to mention one or more users", channel, user);
            } else
                sendTranslatedMessage("You need the Manage Server permission to use this command", channel, user);
        }
    });
    subcommands.add(new Subcommand("View all the users who have been blocked in your server", "view") {

        @Override
        public void onCall(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
            EntityGuild entityGuild = EntityGuild.get(guild);
            ArrayList<RestrictedUser> restrictedUsers = entityGuild.getRestrictedUsers();
            String title = "Restricted users";
            String restrictedBy = "restricted by";
            StringBuilder response = new StringBuilder();
            response.append("**" + title + "**");
            if (restrictedUsers.size() == 0) {
                response.append("\nNo one");
            } else {
                restrictedUsers.forEach(restrictedUser -> response.append("\n - " + guild.getMemberById(restrictedUser.getUserId()).getUser().getName() + ", " + restrictedBy + " " + guild.getMemberById(restrictedUser.getRestrictedById()).getUser().getName()));
            }
            EmbedBuilder builder = MessageUtils.getDefaultEmbed(user);
            builder.setAuthor(title, getShard().url, guild.getSelfMember().getUser().getAvatarUrl());
            builder.setDescription(response.toString());
            sendEmbed(builder, channel, user);
        }
    });
}
Also used : MessageUtils(tk.ardentbot.utils.discord.MessageUtils) Command(tk.ardentbot.core.executor.Command) net.dv8tion.jda.core.entities(net.dv8tion.jda.core.entities) Subcommand(tk.ardentbot.core.executor.Subcommand) RestrictedUserModel(tk.ardentbot.rethink.models.RestrictedUserModel) RestrictedUser(tk.ardentbot.utils.models.RestrictedUser) Database.r(tk.ardentbot.rethink.Database.r) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) ArrayList(java.util.ArrayList) EntityGuild(tk.ardentbot.utils.rpg.EntityGuild) List(java.util.List) Permission(net.dv8tion.jda.core.Permission) Database.connection(tk.ardentbot.rethink.Database.connection) RestrictedUser(tk.ardentbot.utils.models.RestrictedUser) Subcommand(tk.ardentbot.core.executor.Subcommand) ArrayList(java.util.ArrayList) EntityGuild(tk.ardentbot.utils.rpg.EntityGuild) EntityGuild(tk.ardentbot.utils.rpg.EntityGuild) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) ArrayList(java.util.ArrayList) List(java.util.List) RestrictedUserModel(tk.ardentbot.rethink.models.RestrictedUserModel) RestrictedUser(tk.ardentbot.utils.models.RestrictedUser)

Aggregations

Permission (net.dv8tion.jda.core.Permission)2 net.dv8tion.jda.core.entities (net.dv8tion.jda.core.entities)2 Database.connection (tk.ardentbot.rethink.Database.connection)2 Database.r (tk.ardentbot.rethink.Database.r)2 RestrictedUser (tk.ardentbot.utils.models.RestrictedUser)2 EntityGuild (tk.ardentbot.utils.rpg.EntityGuild)2 ChatterBotSession (com.google.code.chatterbotapi.ChatterBotSession)1 Unirest (com.mashape.unirest.http.Unirest)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 ConcurrentLinkedQueue (java.util.concurrent.ConcurrentLinkedQueue)1 EmbedBuilder (net.dv8tion.jda.core.EmbedBuilder)1 MessageReceivedEvent (net.dv8tion.jda.core.events.message.MessageReceivedEvent)1 PermissionException (net.dv8tion.jda.core.exceptions.PermissionException)1 StringEscapeUtils (org.apache.commons.lang3.StringEscapeUtils)1 Command (tk.ardentbot.core.executor.Command)1 Subcommand (tk.ardentbot.core.executor.Subcommand)1 BotException (tk.ardentbot.core.misc.logging.BotException)1 Ardent (tk.ardentbot.main.Ardent)1