Search in sources :

Example 51 with TextChannel

use of net.dv8tion.jda.core.entities.TextChannel in project MantaroBot by Mantaro.

the class GuildOptions method onRegistry.

@Subscribe
public void onRegistry(OptionRegistryEvent e) {
    // region opts birthday
    registerOption("birthday:enable", "Birthday Monitoring enable", "Enables birthday monitoring. You need the channel **name** and the role name (it assigns that role on birthday)\n" + "**Example:** `~>opts birthday enable general Birthday`, `~>opts birthday enable general \"Happy Birthday\"`", "Enables birthday monitoring.", (event, args) -> {
        if (args.length < 2) {
            OptsCmd.onHelp(event);
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        try {
            String channel = args[0];
            String role = args[1];
            TextChannel channelObj = Utils.findChannel(event, channel);
            if (channelObj == null)
                return;
            String channelId = channelObj.getId();
            Role roleObj = event.getGuild().getRolesByName(role.replace(channelId, ""), true).get(0);
            if (roleObj.isPublicRole()) {
                event.getChannel().sendMessage(EmoteReference.ERROR + "You cannot set the everyone role as a birthday role! " + "Remember that the birthday role is a role that gets assigned to the person when the birthday comes, and then removes when the day passes away.").queue();
                return;
            }
            if (guildData.getGuildAutoRole() != null && roleObj.getId().equals(guildData.getGuildAutoRole())) {
                event.getChannel().sendMessage(EmoteReference.ERROR + "You cannot set the autorole role as a birthday role! " + "Remember that the birthday role is a role that gets assigned to the person when the birthday comes, and then removes when the day passes away.").queue();
                return;
            }
            event.getChannel().sendMessage(EmoteReference.WARNING + "Remember that the birthday role is a role that gets assigned to the person when the birthday comes, and then removes when the day passes away.\n" + "The role *has to be a newly created role or a role you don't use for anyone else*. It MUST NOT be a role you already have on your users.\n" + "This is because of how the birthday assigner works: It assigns a temporary role to the person having its birthday, and unassigns it when the birthday day has passed. " + "**This means that everyone with the birthday role will get the role removed the day the birthday passes through**. Please take caution when choosing what role to use, as a misconfiguration might make bad things happen (really)!\n" + "If you have any doubts on how to configure it, you can always join our support guild and ask. You can also check `~>opts help birthday enable` for an example.\n\n" + "Type **yes** if you agree to set the role " + roleObj.getName() + " as a birthday role, and **no** to cancel. This timeouts in 45 seconds.").queue();
            InteractiveOperations.createOverriding(event.getChannel(), 45, interactiveEvent -> {
                String content = interactiveEvent.getMessage().getContentRaw();
                if (content.equalsIgnoreCase("yes")) {
                    String roleId = roleObj.getId();
                    guildData.setBirthdayChannel(channelId);
                    guildData.setBirthdayRole(roleId);
                    dbGuild.saveAsync();
                    event.getChannel().sendMessage(String.format(EmoteReference.MEGA + "Birthday logging enabled on this server with parameters -> Channel: `%s (%s)` and role: `%s (%s)`", channelObj.getAsMention(), channelId, role, roleId)).queue();
                    return Operation.COMPLETED;
                } else if (content.equalsIgnoreCase("no")) {
                    interactiveEvent.getChannel().sendMessage(EmoteReference.CORRECT + "Cancelled request.").queue();
                    return Operation.COMPLETED;
                }
                return Operation.IGNORED;
            });
        } catch (Exception ex) {
            if (ex instanceof IndexOutOfBoundsException) {
                event.getChannel().sendMessage(EmoteReference.ERROR + "I didn't find a channel or role!\n " + "**Remember, you don't have to mention neither the role or the channel, rather just type its " + "name, order is <channel> <role>, without the leading \"<>\".**").queue();
                return;
            }
            event.getChannel().sendMessage(EmoteReference.ERROR + "You supplied invalid arguments for this command " + EmoteReference.SAD).queue();
            OptsCmd.onHelp(event);
        }
    });
    registerOption("birthday:disable", "Birthday disable", "Disables birthday monitoring.", (event) -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        guildData.setBirthdayChannel(null);
        guildData.setBirthdayRole(null);
        dbGuild.saveAsync();
        event.getChannel().sendMessage(EmoteReference.MEGA + "Birthday logging has been disabled on this server").queue();
    });
    // endregion
    // region prefix
    // region set
    registerOption("prefix:set", "Prefix set", "Sets the server prefix.\n" + "**Example:** `~>opts prefix set .`", "Sets the server prefix.", (event, args) -> {
        if (args.length < 1) {
            onHelp(event);
            return;
        }
        String prefix = args[0];
        if (prefix.length() > 200) {
            event.getChannel().sendMessage(EmoteReference.ERROR + "Don't you think that's a bit too long?").queue();
            return;
        }
        if (prefix.isEmpty()) {
            event.getChannel().sendMessage(EmoteReference.ERROR + "Cannot set the guild prefix to nothing...").queue();
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        guildData.setGuildCustomPrefix(prefix);
        dbGuild.save();
        event.getChannel().sendMessage(EmoteReference.MEGA + "Your server's custom prefix has been set to " + prefix).queue();
    });
    // endregion
    // region clear
    registerOption("prefix:clear", "Prefix clear", "Clear the server prefix.\n" + "**Example:** `~>opts prefix clear`", "Resets the server prefix.", (event) -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        guildData.setGuildCustomPrefix(null);
        dbGuild.save();
        event.getChannel().sendMessage(EmoteReference.MEGA + "Your server's custom prefix has been disabled").queue();
    });
    // endregion
    // endregion
    // region autorole
    // region set
    registerOption("autorole:set", "Autorole set", "Sets the server autorole. This means every user who joins will get this role. **You need to use the role name, if it contains spaces" + " you need to wrap it in quotation marks**\n" + "**Example:** `~>opts autorole set Member`, `~>opts autorole set \"Magic Role\"`", "Sets the server autorole.", (event, args) -> {
        if (args.length == 0) {
            onHelp(event);
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        String name = args[0];
        List<Role> roles = event.getGuild().getRolesByName(name, true);
        if (roles.isEmpty()) {
            event.getChannel().sendMessage(EmoteReference.ERROR + "I couldn't find a role with that name").queue();
            return;
        }
        if (roles.size() <= 1) {
            if (!event.getMember().canInteract(roles.get(0))) {
                event.getChannel().sendMessage(EmoteReference.ERROR + "This role is placed higher than your highest role, therefore you cannot put it as autorole!").queue();
                return;
            }
            guildData.setGuildAutoRole(roles.get(0).getId());
            dbGuild.saveAsync();
            event.getChannel().sendMessage(EmoteReference.CORRECT + "The server autorole is now set to: **" + roles.get(0).getName() + "** (Position: " + roles.get(0).getPosition() + ")").queue();
            return;
        }
        event.getChannel().sendMessage(new EmbedBuilder().setTitle("Selection", null).setDescription("").build()).queue();
        DiscordUtils.selectList(event, roles, role -> String.format("%s (ID: %s)  | Position: %s", role.getName(), role.getId(), role.getPosition()), s -> ((SimpleCommand) optsCmd).baseEmbed(event, "Select the Role:").setDescription(s).build(), role -> {
            if (!event.getMember().canInteract(role)) {
                event.getChannel().sendMessage(EmoteReference.ERROR + "This role is placed higher than your highest role, therefore you cannot put it as autorole!").queue();
                return;
            }
            guildData.setGuildAutoRole(role.getId());
            dbGuild.saveAsync();
            event.getChannel().sendMessage(EmoteReference.OK + "The server autorole is now set to role: **" + role.getName() + "** (Position: " + role.getPosition() + ")").queue();
        });
    });
    // endregion
    // region unbind
    registerOption("autorole:unbind", "Autorole clear", "Clear the server autorole.\n" + "**Example:** `~>opts autorole unbind`", "Resets the servers autorole.", (event) -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        guildData.setGuildAutoRole(null);
        dbGuild.saveAsync();
        event.getChannel().sendMessage(EmoteReference.OK + "The autorole for this server has been removed.").queue();
    });
    // endregion
    // endregion
    // region usermessage
    // region resetchannel
    registerOption("usermessage:resetchannel", "Reset message channel", "Clears the join/leave message channel.\n" + "**Example:** `~>opts usermessage resetchannel`", "Clears the join/leave message channel.", (event) -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        guildData.setLogJoinLeaveChannel(null);
        guildData.setLogLeaveChannel(null);
        guildData.setLogJoinChannel(null);
        dbGuild.save();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Sucessfully reset the join/leave channel.").queue();
    });
    // endregion
    // region resetdata
    registerOption("usermessage:resetdata", "Reset join/leave message data", "Resets the join/leave message data.\n" + "**Example:** `~>opts usermessage resetdata`", "Resets the join/leave message data.", (event) -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        guildData.setLeaveMessage(null);
        guildData.setJoinMessage(null);
        dbGuild.save();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Sucessfully reset the join/leave message.").queue();
    });
    // endregion
    // region channel
    registerOption("usermessage:join:channel", "Sets the join message channel", "Sets the join channel, you need the channel **name**\n" + "**Example:** `~>opts usermessage join channel join-magic`\n" + "You can reset it by doing `~>opts usermessage join resetchannel`", "Sets the join message channel", (event, args) -> {
        if (args.length == 0) {
            onHelp(event);
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        String channelName = args[0];
        Consumer<TextChannel> consumer = tc -> {
            guildData.setLogJoinChannel(tc.getId());
            dbGuild.saveAsync();
            event.getChannel().sendMessage(EmoteReference.OK + "The user join log channel is now set to: " + tc.getAsMention()).queue();
        };
        TextChannel channel = Utils.findChannelSelect(event, channelName, consumer);
        if (channel != null) {
            consumer.accept(channel);
        }
    });
    registerOption("usermessage:join:resetchannel", "Resets the join message channel", "Resets the join message channel", event -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        guildData.setLogJoinChannel(null);
        dbGuild.saveAsync();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Successfully reset log join channel!").queue();
    });
    registerOption("usermessage:leave:channel", "Sets the leave message channel", "Sets the leave channel, you need the channel **name**\n" + "**Example:** `~>opts usermessage leave channel leave-magic`\n" + "You can reset it by doing `~>opts usermessage leave resetchannel`", "Sets the leave message channel", (event, args) -> {
        if (args.length == 0) {
            onHelp(event);
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        String channelName = args[0];
        Consumer<TextChannel> consumer = tc -> {
            guildData.setLogLeaveChannel(tc.getId());
            dbGuild.saveAsync();
            event.getChannel().sendMessage(EmoteReference.CORRECT + "The user leave log channel is now set to: " + tc.getAsMention()).queue();
        };
        TextChannel channel = Utils.findChannelSelect(event, channelName, consumer);
        if (channel != null) {
            consumer.accept(channel);
        }
    });
    registerOption("usermessage:leave:resetchannel", "Resets the leave message channel", "Resets the leave message channel", event -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        guildData.setLogLeaveChannel(null);
        dbGuild.saveAsync();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Successfully reset log leave channel!").queue();
    });
    registerOption("usermessage:channel", "Set message channel", "Sets the join/leave message channel. You need the channel **name**\n" + "**Example:** `~>opts usermessage channel join-magic`\n" + "Warning: if you set this, you cannot set individual join/leave channels unless you reset the channel.", "Sets the join/leave message channel.", (event, args) -> {
        if (args.length == 0) {
            onHelp(event);
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        String channelName = args[0];
        Consumer<TextChannel> consumer = textChannel -> {
            guildData.setLogJoinLeaveChannel(textChannel.getId());
            dbGuild.save();
            event.getChannel().sendMessage(EmoteReference.OK + "The logging Join/Leave channel is set to: " + textChannel.getAsMention()).queue();
        };
        TextChannel channel = Utils.findChannelSelect(event, channelName, consumer);
        if (channel != null) {
            consumer.accept(channel);
        }
    });
    // endregion
    // region joinmessage
    registerOption("usermessage:joinmessage", "User join message", "Sets the join message.\n" + "**Example:** `~>opts usermessage joinmessage Welcome $(event.user.name) to the $(event.guild.name) server! Hope you have a great time`", "Sets the join message.", (event, args) -> {
        if (args.length == 0) {
            onHelp(event);
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        String joinMessage = String.join(" ", args);
        guildData.setJoinMessage(joinMessage);
        dbGuild.save();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Server join message set to: " + joinMessage).queue();
    });
    // endregion
    // region leavemessage
    registerOption("usermessage:leavemessage", "User leave message", "Sets the leave message.\n" + "**Example:** `~>opts usermessage leavemessage Sad to see you depart, $(event.user.name)`", "Sets the leave message.", (event, args) -> {
        if (args.length == 0) {
            onHelp(event);
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        String leaveMessage = String.join(" ", args);
        guildData.setLeaveMessage(leaveMessage);
        dbGuild.save();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Server leave message set to: " + leaveMessage).queue();
    });
    // endregion
    // endregion
    // region autoroles
    // region add
    registerOption("autoroles:add", "Autoroles add", "Adds a role to the `~>iam` list.\n" + "You need the name of the iam and the name of the role. If the role contains spaces wrap it in quotation marks.\n" + "**Example:** `~>opts autoroles add member Member`, `~>opts autoroles add wew \"A role with spaces on its name\"`", "Adds an auto-assignable role to the iam lists.", (event, args) -> {
        if (args.length < 2) {
            onHelp(event);
            return;
        }
        String roleName = args[1];
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        List<Role> roleList = event.getGuild().getRolesByName(roleName, true);
        if (roleList.size() == 0) {
            event.getChannel().sendMessage(EmoteReference.ERROR + "I didn't find a role with that name!").queue();
        } else if (roleList.size() == 1) {
            Role role = roleList.get(0);
            if (!event.getMember().canInteract(role)) {
                event.getChannel().sendMessage(EmoteReference.ERROR + "This role is placed higher than your highest role, therefore you cannot put it as an auto-assignable role!").queue();
                return;
            }
            guildData.getAutoroles().put(args[0], role.getId());
            dbGuild.saveAsync();
            event.getChannel().sendMessage(EmoteReference.OK + "Added autorole **" + args[0] + "**, which gives the role " + "**" + role.getName() + "**").queue();
        } else {
            DiscordUtils.selectList(event, roleList, role -> String.format("%s (ID: %s)  | Position: %s", role.getName(), role.getId(), role.getPosition()), s -> ((SimpleCommand) optsCmd).baseEmbed(event, "Select the Role:").setDescription(s).build(), role -> {
                if (!event.getMember().canInteract(role)) {
                    event.getChannel().sendMessage(EmoteReference.ERROR + "This role is placed higher than your highest role, therefore you cannot put it as an auto-assignable role!").queue();
                    return;
                }
                guildData.getAutoroles().put(args[0], role.getId());
                dbGuild.saveAsync();
                event.getChannel().sendMessage(EmoteReference.OK + "Added autorole **" + args[0] + "**, which gives the " + "role " + "**" + role.getName() + "**").queue();
            });
        }
    });
    // region remove
    registerOption("autoroles:remove", "Autoroles remove", "Removes a role from the `~>iam` list.\n" + "You need the name of the iam.\n" + "**Example:** `~>opts autoroles remove iamname`", "Removes an auto-assignable role from iam.", (event, args) -> {
        if (args.length == 0) {
            onHelp(event);
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        HashMap<String, String> autoroles = guildData.getAutoroles();
        if (autoroles.containsKey(args[0])) {
            autoroles.remove(args[0]);
            dbGuild.saveAsync();
            event.getChannel().sendMessage(EmoteReference.OK + "Removed autorole " + args[0]).queue();
        } else {
            event.getChannel().sendMessage(EmoteReference.ERROR + "I couldn't find an autorole with that name").queue();
        }
    });
    // endregion
    // region clear
    registerOption("autoroles:clear", "Autoroles clear", "Removes all autoroles.", "Removes all autoroles.", (event, args) -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        dbGuild.getData().getAutoroles().clear();
        dbGuild.saveAsync();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Cleared all autoroles!").queue();
    });
    // endregion
    // region custom
    registerOption("admincustom", "Admin custom commands", "Locks custom commands to admin-only.\n" + "Example: `~>opts admincustom true`", "Locks custom commands to admin-only.", (event, args) -> {
        if (args.length == 0) {
            OptsCmd.onHelp(event);
            return;
        }
        String action = args[0];
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        try {
            guildData.setCustomAdminLock(Boolean.parseBoolean(action));
            dbGuild.save();
            String toSend = EmoteReference.CORRECT + (Boolean.parseBoolean(action) ? "Custom command creation " + "is now admin only." : "Custom command creation can now be done by anyone.");
            event.getChannel().sendMessage(toSend).queue();
        } catch (Exception ex) {
            event.getChannel().sendMessage(EmoteReference.ERROR + "Silly, that's not a boolean value!").queue();
        }
    });
    // endregion
    registerOption("timedisplay:set", "Time display set", "Toggles between 12h and 24h time display.\n" + "Example: `~>opts timedisplay 24h`", "Toggles between 12h and 24h time display.", (event, args) -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        if (args.length == 0) {
            event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify a mode (12h or 24h)").queue();
            return;
        }
        String mode = args[0];
        switch(mode) {
            case "12h":
                event.getChannel().sendMessage(EmoteReference.CORRECT + "Set time display mode to 12h").queue();
                guildData.setTimeDisplay(1);
                dbGuild.save();
                break;
            case "24h":
                event.getChannel().sendMessage(EmoteReference.CORRECT + "Set time display mode to 24h").queue();
                guildData.setTimeDisplay(0);
                dbGuild.save();
                break;
            default:
                event.getChannel().sendMessage(EmoteReference.ERROR + "Not a valid choice. Valid choices: **24h**, **12h**").queue();
                break;
        }
    });
    registerOption("server:role:disallow", "Role disallow", "Disallows all users with a role from executing commands.\n" + "You need to provide the name of the role to disallow from mantaro.\n" + "Example: `~>opts server role disallow bad`, `~>opts server role disallow \"No commands\"`", "Disallows all users with a role from executing commands.", (event, args) -> {
        if (args.length == 0) {
            event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify the name of the role!").queue();
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        String roleName = String.join(" ", args);
        List<Role> roleList = event.getGuild().getRolesByName(roleName, true);
        if (roleList.size() == 0) {
            event.getChannel().sendMessage(EmoteReference.ERROR + "I didn't find a role with that name!").queue();
        } else if (roleList.size() == 1) {
            Role role = roleList.get(0);
            guildData.getDisabledRoles().add(role.getId());
            dbGuild.saveAsync();
            event.getChannel().sendMessage(EmoteReference.CORRECT + "Disabled role " + role.getName() + " from executing commands.").queue();
        } else {
            DiscordUtils.selectList(event, roleList, role -> String.format("%s (ID: %s)  | Position: %s", role.getName(), role.getId(), role.getPosition()), s -> OptsCmd.getOpts().baseEmbed(event, "Select the Mute Role:").setDescription(s).build(), role -> {
                guildData.getDisabledRoles().add(role.getId());
                dbGuild.saveAsync();
                event.getChannel().sendMessage(EmoteReference.CORRECT + "Disabled role " + role.getName() + " from executing commands.").queue();
            });
        }
    });
    registerOption("server:role:allow", "Role allow", "Allows all users with a role from executing commands.\n" + "You need to provide the name of the role to allow from mantaro. Has to be already disabled.\n" + "Example: `~>opts server role allow bad`, `~>opts server role allow \"No commands\"`", "Allows all users with a role from executing commands (Has to be already disabled)", (event, args) -> {
        if (args.length == 0) {
            event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify the name of the role!").queue();
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        String roleName = String.join(" ", args);
        List<Role> roleList = event.getGuild().getRolesByName(roleName, true);
        if (roleList.size() == 0) {
            event.getChannel().sendMessage(EmoteReference.ERROR + "I didn't find a role with that name!").queue();
        } else if (roleList.size() == 1) {
            Role role = roleList.get(0);
            if (!guildData.getDisabledRoles().contains(role.getId())) {
                event.getChannel().sendMessage(EmoteReference.ERROR + "This role isn't disabled!").queue();
                return;
            }
            guildData.getDisabledRoles().remove(role.getId());
            dbGuild.saveAsync();
            event.getChannel().sendMessage(EmoteReference.CORRECT + "Allowed role " + role.getName() + " to execute commands.").queue();
        } else {
            DiscordUtils.selectList(event, roleList, role -> String.format("%s (ID: %s)  | Position: %s", role.getName(), role.getId(), role.getPosition()), s -> OptsCmd.getOpts().baseEmbed(event, "Select the Mute Role:").setDescription(s).build(), role -> {
                if (!guildData.getDisabledRoles().contains(role.getId())) {
                    event.getChannel().sendMessage(EmoteReference.ERROR + "This role isn't disabled!").queue();
                    return;
                }
                guildData.getDisabledRoles().remove(role.getId());
                dbGuild.saveAsync();
                event.getChannel().sendMessage(EmoteReference.CORRECT + "Allowed role " + role.getName() + " to execute commands.").queue();
            });
        }
    });
    registerOption("server:ignorebots:autoroles:toggle", "Bot autorole ignore", "Toggles between ignoring bots on autorole assign and not.", (event) -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        boolean ignore = guildData.isIgnoreBotsAutoRole();
        guildData.setIgnoreBotsAutoRole(!ignore);
        dbGuild.saveAsync();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Set bot autorole ignore to: **" + guildData.isIgnoreBotsAutoRole() + "**").queue();
    });
    registerOption("server:ignorebots:joinleave:toggle", "Bot join/leave ignore", "Toggles between ignoring bots on join/leave message.", (event) -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        boolean ignore = guildData.isIgnoreBotsWelcomeMessage();
        guildData.setIgnoreBotsWelcomeMessage(!ignore);
        dbGuild.saveAsync();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Set bot autorole ignore to: **" + guildData.isIgnoreBotsWelcomeMessage() + "**").queue();
    });
    registerOption("levelupmessages:toggle", "Level-up toggle", "Toggles level up messages, remember that after this you have to set thee channel and the message!", "Toggles level up messages", event -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        boolean ignore = guildData.isEnabledLevelUpMessages();
        guildData.setEnabledLevelUpMessages(!ignore);
        dbGuild.saveAsync();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Set level up messages to: **" + guildData.isEnabledLevelUpMessages() + "**").queue();
    });
    registerOption("levelupmessages:message:set", "Level-up message", "Sets the message to display on level up", "Sets the level up message", (event, args) -> {
        if (args.length == 0) {
            onHelp(event);
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        String levelUpMessage = String.join(" ", args);
        guildData.setLevelUpMessage(levelUpMessage);
        dbGuild.saveAsync();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Server level-up message set to: " + levelUpMessage).queue();
    });
    registerOption("levelupmessages:message:clear", "Level-up message clear", "Clears the message to display on level up", "Clears the message to display on level up", (event, args) -> {
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        guildData.setLevelUpMessage(null);
        dbGuild.saveAsync();
        event.getChannel().sendMessage(EmoteReference.CORRECT + "Cleared level-up message!").queue();
    });
    registerOption("levelupmessages:channel:set", "Level-up message channel", "Sets the channel to display level up messages", "Sets the channel to display level up messages", (event, args) -> {
        if (args.length == 0) {
            onHelp(event);
            return;
        }
        DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
        GuildData guildData = dbGuild.getData();
        String channelName = args[0];
        Consumer<TextChannel> consumer = textChannel -> {
            guildData.setLevelUpChannel(textChannel.getId());
            dbGuild.saveAsync();
            event.getChannel().sendMessage(EmoteReference.OK + "The level-up channel has been set to: " + textChannel.getAsMention()).queue();
        };
        TextChannel channel = Utils.findChannelSelect(event, channelName, consumer);
        if (channel != null) {
            consumer.accept(channel);
        }
    });
}
Also used : Role(net.dv8tion.jda.core.entities.Role) InteractiveOperations(net.kodehawa.mantarobot.core.listeners.operations.InteractiveOperations) TextChannel(net.dv8tion.jda.core.entities.TextChannel) Option(net.kodehawa.mantarobot.options.annotations.Option) Utils(net.kodehawa.mantarobot.utils.Utils) HashMap(java.util.HashMap) DiscordUtils(net.kodehawa.mantarobot.utils.DiscordUtils) DBGuild(net.kodehawa.mantarobot.db.entities.DBGuild) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) Consumer(java.util.function.Consumer) OptsCmd(net.kodehawa.mantarobot.commands.OptsCmd) List(java.util.List) GuildData(net.kodehawa.mantarobot.db.entities.helpers.GuildData) EmoteReference(net.kodehawa.mantarobot.utils.commands.EmoteReference) MantaroData(net.kodehawa.mantarobot.data.MantaroData) Subscribe(com.google.common.eventbus.Subscribe) SimpleCommand(net.kodehawa.mantarobot.core.modules.commands.SimpleCommand) OptionType(net.kodehawa.mantarobot.options.core.OptionType) OptionRegistryEvent(net.kodehawa.mantarobot.options.event.OptionRegistryEvent) Operation(net.kodehawa.mantarobot.core.listeners.operations.core.Operation) OptionHandler(net.kodehawa.mantarobot.options.core.OptionHandler) OptsCmd.optsCmd(net.kodehawa.mantarobot.commands.OptsCmd.optsCmd) GuildData(net.kodehawa.mantarobot.db.entities.helpers.GuildData) Role(net.dv8tion.jda.core.entities.Role) TextChannel(net.dv8tion.jda.core.entities.TextChannel) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) DBGuild(net.kodehawa.mantarobot.db.entities.DBGuild) SimpleCommand(net.kodehawa.mantarobot.core.modules.commands.SimpleCommand) Subscribe(com.google.common.eventbus.Subscribe)

Example 52 with TextChannel

use of net.dv8tion.jda.core.entities.TextChannel in project MantaroBot by Mantaro.

the class TrackScheduler method announce.

private void announce() {
    try {
        DBGuild dbGuild = MantaroData.db().getGuild(guildId);
        GuildData guildData = dbGuild.getData();
        if (guildData.isMusicAnnounce()) {
            AudioTrackContext atc = getCurrentTrack();
            if (atc == null)
                return;
            TextChannel req = atc.getRequestedChannel();
            if (req == null)
                return;
            VoiceChannel vc = req.getGuild().getSelfMember().getVoiceState().getChannel();
            AudioTrackInfo trackInfo = getCurrentTrack().getInfo();
            String title = trackInfo.title;
            long trackLength = trackInfo.length;
            if (req.canTalk()) {
                getCurrentTrack().getRequestedChannel().sendMessage(String.format("📣 Now playing in **%s**: %s (%s)%s", vc.getName(), title, AudioUtils.getLength(trackLength), getCurrentTrack().getDJ() != null ? " requested by **" + getCurrentTrack().getDJ().getName() + "**" : "")).queue(message -> message.delete().queueAfter(90, TimeUnit.SECONDS));
            }
        }
    } catch (Exception ignored) {
    }
}
Also used : GuildData(net.kodehawa.mantarobot.data.entities.helpers.GuildData) TextChannel(net.dv8tion.jda.core.entities.TextChannel) DBGuild(net.kodehawa.mantarobot.data.entities.DBGuild) VoiceChannel(net.dv8tion.jda.core.entities.VoiceChannel) AudioTrackInfo(com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException)

Example 53 with TextChannel

use of net.dv8tion.jda.core.entities.TextChannel in project MantaroBot by Mantaro.

the class VoiceLeave method run.

@Override
public void run() {
    MantaroBot.getInstance().getAudioManager().getMusicManagers().forEach((guildId, manager) -> {
        try {
            Guild guild = MantaroBot.getInstance().getGuildById(guildId);
            if (guild == null)
                return;
            GuildVoiceState voiceState = guild.getSelfMember().getVoiceState();
            if (voiceState == null)
                return;
            if (voiceState.inVoiceChannel()) {
                TextChannel channel = guild.getPublicChannel();
                if (channel != null) {
                    if (channel.canTalk()) {
                        VoiceChannel voiceChannel = voiceState.getChannel();
                        AudioPlayer player = manager.getAudioPlayer();
                        GuildMusicManager mm = MantaroBot.getInstance().getAudioManager().getMusicManager(guild);
                        if (player == null || mm == null || voiceChannel == null)
                            return;
                        if (mm.getTrackScheduler().getCurrentTrack().getRequestedChannel() != null) {
                            channel = mm.getTrackScheduler().getCurrentTrack().getRequestedChannel();
                        }
                        if (voiceState.isGuildMuted()) {
                            channel.sendMessage(EmoteReference.SAD + "Pausing player because I got muted :(").queue();
                            player.setPaused(true);
                        }
                        if (voiceChannel.getMembers().size() == 1) {
                            channel.sendMessage(EmoteReference.THINKING + "I decided to leave **" + voiceChannel.getName() + "** " + "because I was left all " + "alone :<").queue();
                            if (mm.getTrackScheduler().getAudioPlayer().getPlayingTrack() != null) {
                                mm.getTrackScheduler().getAudioPlayer().getPlayingTrack().stop();
                                mm.getTrackScheduler().getQueue().clear();
                                mm.getTrackScheduler().next(true);
                            } else {
                                guild.getAudioManager().closeAudioConnection();
                            }
                        }
                    }
                }
            }
        } catch (Exception ignored) {
        }
    });
}
Also used : TextChannel(net.dv8tion.jda.core.entities.TextChannel) GuildMusicManager(net.kodehawa.mantarobot.commands.music.GuildMusicManager) AudioPlayer(com.sedmelluq.discord.lavaplayer.player.AudioPlayer) GuildVoiceState(net.dv8tion.jda.core.entities.GuildVoiceState) VoiceChannel(net.dv8tion.jda.core.entities.VoiceChannel) Guild(net.dv8tion.jda.core.entities.Guild)

Example 54 with TextChannel

use of net.dv8tion.jda.core.entities.TextChannel in project FredBoat by Frederikam.

the class MusicPersistenceHandler method persist.

private void persist(int code) {
    File dir = new File("music_persistence");
    if (!dir.exists()) {
        boolean created = dir.mkdir();
        if (!created) {
            log.error("Failed to create music persistence directory");
            return;
        }
    }
    Map<Long, GuildPlayer> reg = playerRegistry.getRegistry();
    boolean isUpdate = code == ExitCodes.EXIT_CODE_UPDATE;
    boolean isRestart = code == ExitCodes.EXIT_CODE_RESTART;
    for (long gId : reg.keySet()) {
        try {
            GuildPlayer player = reg.get(gId);
            String msg;
            if (isUpdate) {
                msg = I18n.get(player.getGuild()).getString("shutdownUpdating");
            } else if (isRestart) {
                msg = I18n.get(player.getGuild()).getString("shutdownRestarting");
            } else {
                msg = I18n.get(player.getGuild()).getString("shutdownIndef");
            }
            TextChannel activeTextChannel = player.getActiveTextChannel();
            List<CompletableFuture> announcements = new ArrayList<>();
            if (activeTextChannel != null && player.isPlaying()) {
                announcements.add(CentralMessaging.message(activeTextChannel, msg).send(null));
            }
            for (Future announcement : announcements) {
                try {
                    // 30 seconds is enough on patron boat
                    announcement.get(30, TimeUnit.SECONDS);
                } catch (Exception ignored) {
                }
            }
            JSONObject data = new JSONObject();
            VoiceChannel vc = player.getCurrentVoiceChannel();
            data.put("vc", vc != null ? vc.getId() : "0");
            data.put("tc", activeTextChannel != null ? activeTextChannel.getId() : "");
            data.put("isPaused", player.isPaused());
            data.put("volume", Float.toString(player.getVolume()));
            data.put("repeatMode", player.getRepeatMode());
            data.put("shuffle", player.isShuffle());
            if (player.getPlayingTrack() != null) {
                data.put("position", player.getPosition());
            }
            ArrayList<JSONObject> identifiers = new ArrayList<>();
            for (AudioTrackContext atc : player.getRemainingTracks()) {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                audioPlayerManager.encodeTrack(new MessageOutput(baos), atc.getTrack());
                JSONObject ident = new JSONObject().put("message", Base64.encodeBase64String(baos.toByteArray())).put("user", atc.getUserId());
                if (atc instanceof SplitAudioTrackContext) {
                    JSONObject split = new JSONObject();
                    SplitAudioTrackContext c = (SplitAudioTrackContext) atc;
                    split.put("title", c.getEffectiveTitle()).put("startPos", c.getStartPosition()).put("endPos", c.getStartPosition() + c.getEffectiveDuration());
                    ident.put("split", split);
                }
                identifiers.add(ident);
            }
            data.put("sources", identifiers);
            try {
                FileUtils.writeStringToFile(new File(dir, Long.toString(gId)), data.toString(), Charset.forName("UTF-8"));
            } catch (IOException ex) {
                if (activeTextChannel != null) {
                    CentralMessaging.message(activeTextChannel, MessageFormat.format(I18n.get(player.getGuild()).getString("shutdownPersistenceFail"), ex.getMessage())).send(null);
                }
            }
        } catch (Exception ex) {
            log.error("Error when saving persistence file", ex);
        }
    }
}
Also used : MessageOutput(com.sedmelluq.discord.lavaplayer.tools.io.MessageOutput) ArrayList(java.util.ArrayList) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) SplitAudioTrackContext(fredboat.audio.queue.SplitAudioTrackContext) IOException(java.io.IOException) TextChannel(net.dv8tion.jda.core.entities.TextChannel) CompletableFuture(java.util.concurrent.CompletableFuture) JSONObject(org.json.JSONObject) GuildPlayer(fredboat.audio.player.GuildPlayer) CompletableFuture(java.util.concurrent.CompletableFuture) Future(java.util.concurrent.Future) VoiceChannel(net.dv8tion.jda.core.entities.VoiceChannel) AudioTrackContext(fredboat.audio.queue.AudioTrackContext) SplitAudioTrackContext(fredboat.audio.queue.SplitAudioTrackContext) File(java.io.File)

Example 55 with TextChannel

use of net.dv8tion.jda.core.entities.TextChannel in project FredBoat by Frederikam.

the class ClearCommand method onInvoke.

// TODO: Redo this
// TODO: i18n this class
@Override
public void onInvoke(@Nonnull CommandContext context) {
    JDA jda = context.guild.getJDA();
    TextChannel channel = context.channel;
    Member invoker = context.invoker;
    if (!invoker.hasPermission(channel, Permission.MESSAGE_MANAGE) && !PermsUtil.checkPerms(PermissionLevel.BOT_ADMIN, invoker)) {
        context.replyWithName("You must have Manage Messages to do that!");
        return;
    }
    if (!context.guild.getSelfMember().hasPermission(channel, Permission.MESSAGE_HISTORY)) {
        context.reply(context.i18n("permissionMissingBot") + " **" + Permission.MESSAGE_HISTORY.getName() + "**");
        return;
    }
    MessageHistory history = new MessageHistory(channel);
    history.retrievePast(50).queue(msgs -> {
        Metrics.successfulRestActions.labels("retrieveMessageHistory").inc();
        ArrayList<Message> toDelete = new ArrayList<>();
        for (Message msg : msgs) {
            if (msg.getAuthor().equals(jda.getSelfUser()) && youngerThanTwoWeeks(msg)) {
                toDelete.add(msg);
            }
        }
        if (toDelete.isEmpty()) {
            context.reply("No messages found.");
        } else if (toDelete.size() == 1) {
            context.reply("Found one message, deleting.");
            CentralMessaging.deleteMessage(toDelete.get(0));
        } else {
            if (!context.hasPermissions(Permission.MESSAGE_MANAGE)) {
                context.reply("I must have the `Manage Messages` permission to delete my own messages in bulk.");
                return;
            }
            context.reply("Deleting **" + toDelete.size() + "** messages.");
            CentralMessaging.deleteMessages(channel, toDelete);
        }
    }, CentralMessaging.getJdaRestActionFailureHandler(String.format("Failed to retrieve message history in channel %s in guild %s", channel.getId(), context.guild.getId())));
}
Also used : MessageHistory(net.dv8tion.jda.core.entities.MessageHistory) TextChannel(net.dv8tion.jda.core.entities.TextChannel) Message(net.dv8tion.jda.core.entities.Message) JDA(net.dv8tion.jda.core.JDA) ArrayList(java.util.ArrayList) Member(net.dv8tion.jda.core.entities.Member)

Aggregations

TextChannel (net.dv8tion.jda.core.entities.TextChannel)90 EmbedBuilder (net.dv8tion.jda.core.EmbedBuilder)27 Guild (net.dv8tion.jda.core.entities.Guild)21 User (net.dv8tion.jda.core.entities.User)19 Member (net.dv8tion.jda.core.entities.Member)18 List (java.util.List)17 Message (net.dv8tion.jda.core.entities.Message)17 ArrayList (java.util.ArrayList)14 VoiceChannel (net.dv8tion.jda.core.entities.VoiceChannel)13 GuildWrapper (stream.flarebot.flarebot.objects.GuildWrapper)13 MessageUtils (stream.flarebot.flarebot.util.MessageUtils)13 Collectors (java.util.stream.Collectors)10 CommandType (stream.flarebot.flarebot.commands.CommandType)8 Role (net.dv8tion.jda.core.entities.Role)7 FlareBot (stream.flarebot.flarebot.FlareBot)7 Track (com.arsenarsen.lavaplayerbridge.player.Track)6 MessageEmbed (net.dv8tion.jda.core.entities.MessageEmbed)6 MantaroData (net.kodehawa.mantarobot.data.MantaroData)6 DBGuild (net.kodehawa.mantarobot.db.entities.DBGuild)6 EmoteReference (net.kodehawa.mantarobot.utils.commands.EmoteReference)6