Search in sources :

Example 6 with Member

use of net.dv8tion.jda.api.entities.Member in project c0debaseBot by Biospheere.

the class SinceCommand method execute.

@Override
public void execute(final String[] args, final Message message) {
    final Member member = message.getMentionedMembers().size() == 0 ? message.getMember() : message.getMentionedMembers().get(0);
    final EmbedBuilder embedBuilder = getEmbed(message.getGuild(), message.getAuthor());
    if (args.length > 0 && message.getMentionedMembers().isEmpty() && StringUtils.isInteger(args[0]) && message.getGuild().isLoaded()) {
        final Integer since = Integer.valueOf(args[0]);
        if (since < 0) {
            final Member oldestMember = DiscordUtils.getOldestMember(message.getGuild());
            embedBuilder.setDescription("!since [0-" + ((oldestMember == null) ? "?]" : ChronoUnit.DAYS.between(oldestMember.getTimeJoined(), LocalDateTime.now().atOffset(ZoneOffset.UTC)) + "]"));
        } else {
            final Integer memberCount = getMemberCoundByDays(since, message.getGuild());
            final float percentage = ((float) memberCount / (float) message.getGuild().getMemberCount()) * 100;
            embedBuilder.setDescription("Es gibt " + memberCount + " Mitglieder welche seit mehr als " + since + " Tagen auf diesem Server sind.\n Das sind " + DECIMAL_FORMAT.format(percentage) + "%");
        }
    } else {
        embedBuilder.setDescription(member.getAsMention() + " ist seit " + ChronoUnit.DAYS.between(member.getTimeJoined(), LocalDateTime.now().atOffset(ZoneOffset.UTC)) + " Tagen auf " + message.getGuild().getName());
    }
    message.getTextChannel().sendMessage(embedBuilder.build()).queue();
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) Member(net.dv8tion.jda.api.entities.Member)

Example 7 with Member

use of net.dv8tion.jda.api.entities.Member in project c0debaseBot by Biospheere.

the class CoinCommand method execute.

@Override
public void execute(final String[] args, final Message message) {
    final Member member = DiscordUtils.getAddressedMember(message);
    final EmbedBuilder embedBuilder = getEmbed(message.getGuild(), member.getUser());
    embedBuilder.setDescription(member.getAsMention() + " hat " + String.format("%.2f", bot.getDatabase().getUserDao().getOrCreateUser(member.getGuild().getId(), member.getUser().getId()).getCoins()) + " Coins");
    message.getTextChannel().sendMessage(embedBuilder.build()).queue();
}
Also used : EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) Member(net.dv8tion.jda.api.entities.Member)

Example 8 with Member

use of net.dv8tion.jda.api.entities.Member in project lavaplayer by sedmelluq.

the class BotApplicationManager method onMessageReceived.

@Override
public void onMessageReceived(final MessageReceivedEvent event) {
    Member member = event.getMember();
    if (!event.isFromType(ChannelType.TEXT) || member == null || member.getUser().isBot()) {
        return;
    }
    BotGuildContext guildContext = getContext(event.getGuild());
    controllerManager.dispatchMessage(guildContext.controllers, "!/", event.getMessage(), new BotCommandMappingHandler() {

        @Override
        public void commandNotFound(Message message, String name) {
        }

        @Override
        public void commandWrongParameterCount(Message message, String name, String usage, int given, int required) {
            event.getTextChannel().sendMessage("Wrong argument count for command").queue();
        }

        @Override
        public void commandWrongParameterType(Message message, String name, String usage, int index, String value, Class<?> expectedType) {
            event.getTextChannel().sendMessage("Wrong argument type for command").queue();
            ;
        }

        @Override
        public void commandRestricted(Message message, String name) {
            event.getTextChannel().sendMessage("Command not permitted").queue();
            ;
        }

        @Override
        public void commandException(Message message, String name, Throwable throwable) {
            event.getTextChannel().sendMessage("Command threw an exception").queue();
            ;
            log.error("Command with content {} threw an exception.", message.getContentDisplay(), throwable);
        }
    });
}
Also used : BotCommandMappingHandler(com.sedmelluq.discord.lavaplayer.demo.controller.BotCommandMappingHandler) Message(net.dv8tion.jda.api.entities.Message) Member(net.dv8tion.jda.api.entities.Member)

Example 9 with Member

use of net.dv8tion.jda.api.entities.Member in project MantaroBot by Mantaro.

the class ProfileCmd method profile.

@Subscribe
public void profile(CommandRegistry cr) {
    final var rateLimiter = new IncreasingRateLimiter.Builder().limit(// twice every 10m
    2).spamTolerance(2).cooldown(10, TimeUnit.MINUTES).cooldownPenaltyIncrease(10, TimeUnit.SECONDS).maxCooldown(15, TimeUnit.MINUTES).pool(MantaroData.getDefaultJedisPool()).prefix("profile").build();
    final var config = MantaroData.config().get();
    List<ProfileComponent> defaultOrder;
    if (config.isPremiumBot() || config.isSelfHost()) {
        defaultOrder = createLinkedList(HEADER, CREDITS, LEVEL, REPUTATION, BIRTHDAY, MARRIAGE, INVENTORY, BADGES, PET);
    } else {
        defaultOrder = createLinkedList(HEADER, CREDITS, OLD_CREDITS, LEVEL, REPUTATION, BIRTHDAY, MARRIAGE, INVENTORY, BADGES, PET);
    }
    List<ProfileComponent> noOldOrder = createLinkedList(HEADER, CREDITS, LEVEL, REPUTATION, BIRTHDAY, MARRIAGE, INVENTORY, BADGES, PET);
    TreeCommand profileCommand = cr.register("profile", new TreeCommand(CommandCategory.CURRENCY) {

        @Override
        public Command defaultTrigger(Context ctx, String mainCommand, String commandName) {
            return new SubCommand() {

                @Override
                protected void call(Context ctx, I18nContext languageContext, String content) {
                    var optionalArguments = ctx.getOptionalArguments();
                    content = Utils.replaceArguments(optionalArguments, content, "season", "s").trim();
                    var isSeasonal = ctx.isSeasonal();
                    var finalContent = content;
                    ctx.findMember(content, members -> {
                        SeasonPlayer seasonalPlayer = null;
                        var userLooked = ctx.getAuthor();
                        var memberLooked = ctx.getMember();
                        if (!finalContent.isEmpty()) {
                            var found = CustomFinderUtil.findMember(finalContent, members, ctx);
                            if (found == null) {
                                return;
                            }
                            userLooked = found.getUser();
                            memberLooked = found;
                        }
                        if (userLooked.isBot()) {
                            ctx.sendLocalized("commands.profile.bot_notice", EmoteReference.ERROR);
                            return;
                        }
                        var player = ctx.getPlayer(userLooked);
                        var dbUser = ctx.getDBUser(userLooked);
                        var playerData = player.getData();
                        var userData = dbUser.getData();
                        var inv = player.getInventory();
                        // Cache waifu value.
                        playerData.setWaifuCachedValue(WaifuCmd.calculateWaifuValue(player, userLooked).getFinalValue());
                        // start of badge assigning
                        var mh = MantaroBot.getInstance().getShardManager().getGuildById("213468583252983809");
                        var mhMember = mh == null ? null : ctx.retrieveMemberById(memberLooked.getUser().getId(), false);
                        Badge.assignBadges(player, player.getStats(), dbUser);
                        var christmasBadgeAssign = inv.asList().stream().map(ItemStack::getItem).anyMatch(it -> it.equals(ItemReference.CHRISTMAS_TREE_SPECIAL) || it.equals(ItemReference.BELL_SPECIAL));
                        // Manual badges
                        if (config.isOwner(userLooked)) {
                            playerData.addBadgeIfAbsent(Badge.DEVELOPER);
                        }
                        if (christmasBadgeAssign) {
                            playerData.addBadgeIfAbsent(Badge.CHRISTMAS);
                        }
                        // Requires a valid Member in Mantaro Hub.
                        if (mhMember != null) {
                            // Admin
                            if (containsRole(mhMember, 315910951994130432L, 642089477828902912L)) {
                                playerData.addBadgeIfAbsent(Badge.COMMUNITY_ADMIN);
                            }
                            // Patron - Donator
                            if (containsRole(mhMember, 290902183300431872L, 290257037072531466L)) {
                                playerData.addBadgeIfAbsent(Badge.DONATOR_2);
                            }
                            // Translator
                            if (containsRole(mhMember, 407156441812828162L)) {
                                playerData.addBadgeIfAbsent(Badge.TRANSLATOR);
                            }
                        }
                        // end of badge assigning
                        var badges = playerData.getBadges();
                        Collections.sort(badges);
                        if (isSeasonal) {
                            seasonalPlayer = ctx.getSeasonPlayer(userLooked);
                        }
                        var marriage = ctx.getMarriage(userData);
                        var ringHolder = player.getInventory().containsItem(ItemReference.RING) && marriage != null;
                        var holder = new ProfileComponent.Holder(userLooked, player, seasonalPlayer, dbUser, marriage, badges);
                        var profileBuilder = new EmbedBuilder();
                        var description = languageContext.get("commands.profile.no_desc");
                        if (playerData.getDescription() != null) {
                            description = player.getData().getDescription();
                        }
                        profileBuilder.setAuthor((ringHolder ? EmoteReference.RING : "") + String.format(languageContext.get("commands.profile.header"), memberLooked.getEffectiveName()), null, userLooked.getEffectiveAvatarUrl()).setDescription(description).setThumbnail(userLooked.getEffectiveAvatarUrl()).setColor(ctx.getMemberColor(memberLooked)).setFooter(ProfileComponent.FOOTER.getContent().apply(holder, languageContext), ctx.getAuthor().getEffectiveAvatarUrl());
                        var hasCustomOrder = dbUser.isPremium() && !playerData.getProfileComponents().isEmpty();
                        var usedOrder = hasCustomOrder ? playerData.getProfileComponents() : defaultOrder;
                        if ((!config.isPremiumBot() && player.getOldMoney() < 5000 && !hasCustomOrder) || (playerData.isHiddenLegacy() && !hasCustomOrder)) {
                            usedOrder = noOldOrder;
                        }
                        for (var component : usedOrder) {
                            profileBuilder.addField(component.getTitle(languageContext), component.getContent().apply(holder, languageContext), component.isInline());
                        }
                        ctx.send(profileBuilder.build());
                        // We don't need to update stats if someone else views your profile
                        if (player.getUserId().equals(ctx.getAuthor().getId())) {
                            player.saveUpdating();
                        }
                    });
                }
            };
        }

        // If you wonder why is this so short compared to before, subcommand descriptions will do the trick on telling me what they do.
        @Override
        public HelpContent help() {
            return new HelpContent.Builder().setDescription("Retrieves your current user profile.").setUsage("To retrieve your profile use `~>profile`. You can also use `~>profile @mention`\n" + "*The profile command only shows the 5 most important badges.* Use `~>badges` to get a complete list!").addParameter("@mention", "A user mention (ping)").setSeasonal(true).build();
        }
    });
    profileCommand.setPredicate(ctx -> {
        if (!ctx.getSelfMember().hasPermission(ctx.getChannel(), Permission.MESSAGE_EMBED_LINKS)) {
            ctx.sendLocalized("general.missing_embed_permissions");
            return false;
        }
        return true;
    });
    profileCommand.addSubCommand("toggleaction", new SubCommand() {

        @Override
        public String description() {
            return "Toggles the ability to do action commands to you.";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            final var dbUser = ctx.getDBUser();
            final var userData = dbUser.getData();
            final var isDisabled = userData.isActionsDisabled();
            if (isDisabled) {
                userData.setActionsDisabled(false);
                ctx.sendLocalized("commands.profile.toggleaction.enabled", EmoteReference.CORRECT);
            } else {
                userData.setActionsDisabled(true);
                ctx.sendLocalized("commands.profile.toggleaction.disabled", EmoteReference.CORRECT);
            }
            dbUser.save();
        }
    });
    profileCommand.addSubCommand("claimlock", new SubCommand() {

        @Override
        public String description() {
            return "Locks you from being claimed. Use `remove` to remove it.";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            final var player = ctx.getPlayer();
            final var playerData = player.getData();
            if (content.equals("remove")) {
                playerData.setClaimLocked(false);
                ctx.sendLocalized("commands.profile.claimlock.removed", EmoteReference.CORRECT);
                player.saveUpdating();
                return;
            }
            if (playerData.isClaimLocked()) {
                ctx.sendLocalized("commands.profile.claimlock.already_locked", EmoteReference.CORRECT);
                return;
            }
            var inventory = player.getInventory();
            if (!inventory.containsItem(ItemReference.CLAIM_KEY)) {
                ctx.sendLocalized("commands.profile.claimlock.no_key", EmoteReference.ERROR);
                return;
            }
            playerData.setClaimLocked(true);
            ctx.sendLocalized("commands.profile.claimlock.success", EmoteReference.CORRECT);
            inventory.process(new ItemStack(ItemReference.CLAIM_KEY, -1));
            player.saveUpdating();
        }
    });
    if (!config.isPremiumBot()) {
        profileCommand.addSubCommand("togglelegacy", new SubCommand() {

            @Override
            public String description() {
                return "Toggles legacy credit display.";
            }

            @Override
            protected void call(Context ctx, I18nContext languageContext, String content) {
                final var player = ctx.getPlayer();
                final var data = player.getData();
                var toSet = !data.isHiddenLegacy();
                data.setHiddenLegacy(toSet);
                player.saveUpdating();
                ctx.sendLocalized("commands.profile.hidelegacy", EmoteReference.CORRECT, data.isHiddenLegacy());
            }
        });
    }
    profileCommand.addSubCommand("inventorysort", new SubCommand() {

        @Override
        public String description() {
            return "Sort your inventory. Possible values: `VALUE, VALUE_TOTAL, AMOUNT, TYPE, RANDOM`.";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            final var type = Utils.lookupEnumString(content, InventorySortType.class);
            if (type == null) {
                ctx.sendLocalized("commands.profile.inventorysort.not_valid", EmoteReference.ERROR, Arrays.stream(InventorySortType.values()).map(b1 -> b1.toString().toLowerCase()).collect(Collectors.joining(", ")));
                return;
            }
            final var player = ctx.getPlayer();
            final var playerData = player.getData();
            playerData.setInventorySortType(type);
            player.saveUpdating();
            ctx.sendLocalized("commands.profile.inventorysort.success", EmoteReference.CORRECT, type.toString().toLowerCase());
        }
    });
    profileCommand.addSubCommand("autoequip", new SubCommand() {

        @Override
        public String description() {
            return "Toggles auto-equipping a new tool on break. Use `disable` to disable it.";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            var user = ctx.getDBUser();
            var data = user.getData();
            if (content.equals("disable")) {
                data.setAutoEquip(false);
                ctx.sendLocalized("commands.profile.autoequip.disable", EmoteReference.CORRECT);
                user.saveUpdating();
                return;
            }
            data.setAutoEquip(true);
            ctx.sendLocalized("commands.profile.autoequip.success", EmoteReference.CORRECT);
            user.saveUpdating();
        }
    });
    // Hide tags from profile/waifu list.
    profileCommand.addSubCommand("hidetag", new SubCommand() {

        @Override
        public String description() {
            return "Hide or show the member id/tag from profile/waifu ls.";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            var user = ctx.getDBUser();
            var data = user.getData();
            data.setPrivateTag(!data.isPrivateTag());
            user.saveUpdating();
            ctx.sendLocalized("commands.profile.hide_tag.success", EmoteReference.POPPER, data.isPrivateTag());
        }
    });
    profileCommand.addSubCommand("timezone", new SubCommand() {

        @Override
        public String description() {
            return "Set your profile timezone.";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            var dbUser = ctx.getDBUser();
            var args = ctx.getArguments();
            if (args.length < 1) {
                ctx.sendLocalized("commands.profile.timezone.not_specified", EmoteReference.ERROR);
                return;
            }
            var timezone = content;
            if (offsetRegex.matcher(timezone).matches()) {
                timezone = content.toUpperCase().replace("UTC", "GMT");
            }
            // EST, EDT, etc...
            if (timezone.length() == 3) {
                timezone = timezone.toUpperCase();
            }
            if (timezone.equalsIgnoreCase("reset")) {
                dbUser.getData().setTimezone(null);
                dbUser.saveAsync();
                ctx.sendLocalized("commands.profile.timezone.reset_success", EmoteReference.CORRECT);
                return;
            }
            if (!Utils.isValidTimeZone(timezone)) {
                ctx.sendLocalized("commands.profile.timezone.invalid", EmoteReference.ERROR);
                return;
            }
            try {
                Utils.formatDate(LocalDateTime.now(Utils.timezoneToZoneID(timezone)), dbUser.getData().getLang());
            } catch (DateTimeException e) {
                ctx.sendLocalized("commands.profile.timezone.invalid", EmoteReference.ERROR);
                return;
            }
            var player = ctx.getPlayer();
            if (player.getData().addBadgeIfAbsent(Badge.CALENDAR)) {
                player.saveUpdating();
            }
            dbUser.getData().setTimezone(timezone);
            dbUser.saveUpdating();
            ctx.sendLocalized("commands.profile.timezone.success", EmoteReference.CORRECT, timezone);
        }
    });
    profileCommand.addSubCommand("description", new SubCommand() {

        @Override
        public String description() {
            return "Set your profile description. Use `reset` to reset it.";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            if (!RatelimitUtils.ratelimit(rateLimiter, ctx)) {
                return;
            }
            var args = ctx.getArguments();
            var player = ctx.getPlayer();
            var dbUser = ctx.getDBUser();
            if (args.length == 0) {
                ctx.sendLocalized("commands.profile.description.no_argument", EmoteReference.ERROR);
                return;
            }
            if (args[0].equals("clear") || args[0].equals("remove") || args[0].equals("reset")) {
                player.getData().setDescription(null);
                ctx.sendLocalized("commands.profile.description.clear_success", EmoteReference.CORRECT);
                player.saveUpdating();
                return;
            }
            var split = SPLIT_PATTERN.split(content, 2);
            var desc = content;
            var old = false;
            if (split[0].equals("set")) {
                desc = content.replaceFirst("set ", "");
                old = true;
            }
            var MAX_LENGTH = 300;
            if (dbUser.isPremium()) {
                MAX_LENGTH = 500;
            }
            if (args.length < (old ? 2 : 1)) {
                ctx.sendLocalized("commands.profile.description.no_content", EmoteReference.ERROR);
                return;
            }
            if (desc.length() > MAX_LENGTH) {
                ctx.sendLocalized("commands.profile.description.too_long", EmoteReference.ERROR);
                return;
            }
            desc = Utils.DISCORD_INVITE.matcher(desc).replaceAll("-discord invite link-");
            desc = Utils.DISCORD_INVITE_2.matcher(desc).replaceAll("-discord invite link-");
            player.getData().setDescription(desc);
            ctx.sendStrippedLocalized("commands.profile.description.success", EmoteReference.POPPER);
            player.getData().addBadgeIfAbsent(Badge.WRITER);
            player.saveUpdating();
        }
    });
    profileCommand.addSubCommand("displaybadge", new SubCommand() {

        @Override
        public String description() {
            return "Set your profile badge. Use `reset` to reset and `none` to show no badge.";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            var args = ctx.getArguments();
            if (args.length == 0) {
                ctx.sendLocalized("commands.profile.displaybadge.not_specified", EmoteReference.ERROR);
                return;
            }
            var player = ctx.getPlayer();
            var data = player.getData();
            var arg = args[0];
            if (arg.equalsIgnoreCase("none")) {
                data.setShowBadge(false);
                ctx.sendLocalized("commands.profile.displaybadge.reset_success", EmoteReference.CORRECT);
                player.saveUpdating();
                return;
            }
            if (arg.equalsIgnoreCase("reset")) {
                data.setMainBadge(null);
                data.setShowBadge(true);
                ctx.sendLocalized("commands.profile.displaybadge.important_success", EmoteReference.CORRECT);
                player.saveUpdating();
                return;
            }
            var badge = Badge.lookupFromString(content);
            if (badge == null) {
                ctx.sendLocalized("commands.profile.displaybadge.no_such_badge", EmoteReference.ERROR, player.getData().getBadges().stream().map(Badge::getDisplay).collect(Collectors.joining(", ")));
                return;
            }
            if (!data.getBadges().contains(badge)) {
                ctx.sendLocalized("commands.profile.displaybadge.player_missing_badge", EmoteReference.ERROR, player.getData().getBadges().stream().map(Badge::getDisplay).collect(Collectors.joining(", ")));
                return;
            }
            data.setShowBadge(true);
            data.setMainBadge(badge);
            player.saveUpdating();
            ctx.sendLocalized("commands.profile.displaybadge.success", EmoteReference.CORRECT, badge.display);
        }
    });
    profileCommand.addSubCommand("language", new SubCommand() {

        @Override
        public String description() {
            return "Set your profile language. Available langs: `~>lang`";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            if (content.isEmpty()) {
                ctx.sendLocalized("commands.profile.lang.nothing_specified", EmoteReference.ERROR);
                return;
            }
            var dbUser = ctx.getDBUser();
            if (content.equalsIgnoreCase("reset")) {
                dbUser.getData().setLang(null);
                dbUser.saveUpdating();
                ctx.sendLocalized("commands.profile.lang.reset_success", EmoteReference.CORRECT);
                return;
            }
            if (I18n.isValidLanguage(content)) {
                dbUser.getData().setLang(content);
                // Create new I18n context based on the new language choice.
                var newContext = new I18nContext(ctx.getDBGuild().getData(), dbUser.getData());
                dbUser.saveUpdating();
                ctx.getChannel().sendMessageFormat(newContext.get("commands.profile.lang.success"), EmoteReference.CORRECT, content).queue();
            } else {
                ctx.sendLocalized("commands.profile.lang.invalid", EmoteReference.ERROR);
            }
        }
    }).createSubCommandAlias("language", "lang");
    profileCommand.addSubCommand("stats", new SubCommand() {

        @Override
        public String description() {
            return "Check profile statistics.";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            ctx.findMember(content, members -> {
                var member = CustomFinderUtil.findMemberDefault(content, members, ctx, ctx.getMember());
                if (member == null) {
                    return;
                }
                var toLookup = member.getUser();
                if (toLookup.isBot()) {
                    ctx.sendLocalized("commands.profile.bot_notice", EmoteReference.ERROR);
                    return;
                }
                var player = ctx.getPlayer(toLookup);
                var dbUser = ctx.getDBUser(toLookup);
                List<MessageEmbed.Field> fields = new LinkedList<>();
                for (StatsComponent component : StatsComponent.values()) {
                    fields.add(new MessageEmbed.Field(component.getEmoji() + component.getName(ctx), component.getContent(new StatsComponent.Holder(ctx, languageContext, player, dbUser, toLookup)), false));
                }
                var splitFields = DiscordUtils.divideFields(9, fields);
                var embed = new EmbedBuilder().setThumbnail(toLookup.getEffectiveAvatarUrl()).setAuthor(languageContext.get("commands.profile.stats.header").formatted(toLookup.getName()), null, toLookup.getEffectiveAvatarUrl()).setDescription(String.format(languageContext.get("general.buy_sell_paged_react"), String.format(languageContext.get("general.reaction_timeout"), 200))).setColor(ctx.getMemberColor()).setFooter("Thanks for using Mantaro! %s".formatted(EmoteReference.HEART), ctx.getGuild().getIconUrl());
                DiscordUtils.listButtons(ctx, 200, embed, splitFields);
            });
        }
    });
    profileCommand.addSubCommand("widgets", new SubCommand() {

        @Override
        public String description() {
            return "Set profile widgets and order. Arguments: `widget`, `ls` or `reset`";
        }

        @Override
        protected void call(Context ctx, I18nContext languageContext, String content) {
            var user = ctx.getDBUser();
            if (!user.isPremium()) {
                ctx.sendLocalized("commands.profile.display.not_premium", EmoteReference.ERROR);
                return;
            }
            var player = ctx.getPlayer();
            var playerData = player.getData();
            if (content.equalsIgnoreCase("ls") || content.equalsIgnoreCase("Is")) {
                ctx.sendFormat(languageContext.get("commands.profile.display.ls") + languageContext.get("commands.profile.display.example"), EmoteReference.ZAP, EmoteReference.BLUE_SMALL_MARKER, defaultOrder.stream().map(Enum::name).collect(Collectors.joining(", ")), playerData.getProfileComponents().size() == 0 ? "Not personalized" : playerData.getProfileComponents().stream().map(Enum::name).collect(Collectors.joining(", ")));
                return;
            }
            if (content.equalsIgnoreCase("reset")) {
                playerData.getProfileComponents().clear();
                player.save();
                ctx.sendLocalized("commands.profile.display.reset", EmoteReference.CORRECT);
                return;
            }
            var splitContent = content.replace(",", "").split("\\s+");
            // new list of profile components
            List<ProfileComponent> newComponents = new LinkedList<>();
            for (var cmt : splitContent) {
                var component = ProfileComponent.lookupFromString(cmt);
                if (component != null && component.isAssignable()) {
                    newComponents.add(component);
                }
            }
            if (newComponents.size() < 3) {
                ctx.sendFormat(languageContext.get("commands.profile.display.not_enough") + languageContext.get("commands.profile.display.example"), EmoteReference.WARNING);
                return;
            }
            playerData.setProfileComponents(newComponents);
            player.save();
            ctx.sendLocalized("commands.profile.display.success", EmoteReference.CORRECT, newComponents.stream().map(Enum::name).collect(Collectors.joining(", ")));
        }
    });
    cr.registerAlias("profile", "me");
}
Also used : Badge(net.kodehawa.mantarobot.commands.currency.profile.Badge) StatsComponent(net.kodehawa.mantarobot.commands.currency.profile.StatsComponent) Module(net.kodehawa.mantarobot.core.modules.Module) Arrays(java.util.Arrays) Command(net.kodehawa.mantarobot.core.modules.commands.base.Command) HelpContent(net.kodehawa.mantarobot.core.modules.commands.help.HelpContent) Permission(net.dv8tion.jda.api.Permission) Utils(net.kodehawa.mantarobot.utils.Utils) LocalDateTime(java.time.LocalDateTime) Member(net.dv8tion.jda.api.entities.Member) SeasonPlayer(net.kodehawa.mantarobot.commands.currency.seasons.SeasonPlayer) MantaroBot(net.kodehawa.mantarobot.MantaroBot) CustomFinderUtil(net.kodehawa.mantarobot.utils.commands.CustomFinderUtil) PlayerEquipment(net.kodehawa.mantarobot.commands.currency.item.PlayerEquipment) Role(net.dv8tion.jda.api.entities.Role) CommandRegistry(net.kodehawa.mantarobot.core.CommandRegistry) Utils.createLinkedList(net.kodehawa.mantarobot.utils.Utils.createLinkedList) Subscribe(com.google.common.eventbus.Subscribe) Context(net.kodehawa.mantarobot.core.modules.commands.base.Context) LinkedList(java.util.LinkedList) ItemHelper(net.kodehawa.mantarobot.commands.currency.item.ItemHelper) ItemStack(net.kodehawa.mantarobot.commands.currency.item.ItemStack) DateTimeException(java.time.DateTimeException) DiscordUtils(net.kodehawa.mantarobot.utils.commands.DiscordUtils) SubCommand(net.kodehawa.mantarobot.core.modules.commands.SubCommand) I18n(net.kodehawa.mantarobot.data.I18n) ItemReference(net.kodehawa.mantarobot.commands.currency.item.ItemReference) SPLIT_PATTERN(net.kodehawa.mantarobot.utils.StringUtils.SPLIT_PATTERN) IncreasingRateLimiter(net.kodehawa.mantarobot.utils.commands.ratelimit.IncreasingRateLimiter) ProfileComponent(net.kodehawa.mantarobot.commands.currency.profile.ProfileComponent) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) Collectors(java.util.stream.Collectors) TreeCommand(net.kodehawa.mantarobot.core.modules.commands.TreeCommand) java.awt(java.awt) TimeUnit(java.util.concurrent.TimeUnit) Breakable(net.kodehawa.mantarobot.commands.currency.item.special.helpers.Breakable) List(java.util.List) RatelimitUtils(net.kodehawa.mantarobot.utils.commands.ratelimit.RatelimitUtils) CommandCategory(net.kodehawa.mantarobot.core.modules.commands.base.CommandCategory) I18nContext(net.kodehawa.mantarobot.core.modules.commands.i18n.I18nContext) InventorySortType(net.kodehawa.mantarobot.commands.currency.profile.inventory.InventorySortType) EmoteReference(net.kodehawa.mantarobot.utils.commands.EmoteReference) MantaroData(net.kodehawa.mantarobot.data.MantaroData) MessageEmbed(net.dv8tion.jda.api.entities.MessageEmbed) Pattern(java.util.regex.Pattern) Collections(java.util.Collections) MessageEmbed(net.dv8tion.jda.api.entities.MessageEmbed) HelpContent(net.kodehawa.mantarobot.core.modules.commands.help.HelpContent) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) ProfileComponent(net.kodehawa.mantarobot.commands.currency.profile.ProfileComponent) StatsComponent(net.kodehawa.mantarobot.commands.currency.profile.StatsComponent) DateTimeException(java.time.DateTimeException) Utils.createLinkedList(net.kodehawa.mantarobot.utils.Utils.createLinkedList) LinkedList(java.util.LinkedList) List(java.util.List) SeasonPlayer(net.kodehawa.mantarobot.commands.currency.seasons.SeasonPlayer) TreeCommand(net.kodehawa.mantarobot.core.modules.commands.TreeCommand) Context(net.kodehawa.mantarobot.core.modules.commands.base.Context) I18nContext(net.kodehawa.mantarobot.core.modules.commands.i18n.I18nContext) SubCommand(net.kodehawa.mantarobot.core.modules.commands.SubCommand) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) Command(net.kodehawa.mantarobot.core.modules.commands.base.Command) SubCommand(net.kodehawa.mantarobot.core.modules.commands.SubCommand) TreeCommand(net.kodehawa.mantarobot.core.modules.commands.TreeCommand) ItemStack(net.kodehawa.mantarobot.commands.currency.item.ItemStack) I18nContext(net.kodehawa.mantarobot.core.modules.commands.i18n.I18nContext) InventorySortType(net.kodehawa.mantarobot.commands.currency.profile.inventory.InventorySortType) Subscribe(com.google.common.eventbus.Subscribe)

Example 10 with Member

use of net.dv8tion.jda.api.entities.Member in project MantaroBot by Mantaro.

the class MuteTask method handle.

public static void handle() {
    try {
        MantaroObj data = MantaroData.db().getMantaroData();
        Map<Long, Pair<String, Long>> mutes = data.getMutes();
        log.debug("Checking mutes... data size {}", mutes.size());
        for (var entry : mutes.entrySet()) {
            try {
                log.trace("Iteration: Mute check");
                var id = entry.getKey();
                var pair = entry.getValue();
                var guildId = pair.getLeft();
                var maxTime = pair.getRight();
                var guild = MantaroBot.getInstance().getShardManager().getGuildById(guildId);
                if (guild == null) {
                    // Might be in another instance, or the guild left, either way we can't check properly.
                    continue;
                }
                var dbGuild = MantaroData.db().getGuild(guildId);
                var guildData = dbGuild.getData();
                // Please hold me.
                if (guild.getRoleById(guildData.getMutedRole()) == null) {
                    data.getMutes().remove(id);
                    data.saveAsync();
                    log.debug("Removed {} because role == null", id);
                } else {
                    if (System.currentTimeMillis() > maxTime) {
                        log.debug("Unmuted {} because time ran out", id);
                        data.getMutes().remove(id);
                        data.save();
                        var roleById = guild.getRoleById(guildData.getMutedRole());
                        Member member = null;
                        try {
                            member = guild.retrieveMemberById(id, false).complete();
                        } catch (Exception ignored) {
                        }
                        if (member == null) {
                            data.getMutes().remove(id);
                            data.saveAsync();
                            log.debug("Removed {} because member == null", id);
                            continue;
                        }
                        if (roleById != null) {
                            guild.removeRoleFromMember(member, roleById).queue();
                        }
                        guildData.setCases(guildData.getCases() + 1);
                        dbGuild.saveAsync();
                        ModLog.log(guild.getSelfMember(), member.getUser(), "Mute timeout expired", "none", ModLog.ModAction.UNMUTE, guildData.getCases());
                    }
                }
            } catch (Exception ignored) {
            }
        }
    } catch (Exception ignored) {
    }
}
Also used : MantaroObj(net.kodehawa.mantarobot.db.entities.MantaroObj) Member(net.dv8tion.jda.api.entities.Member) Pair(net.kodehawa.mantarobot.utils.Pair)

Aggregations

Member (net.dv8tion.jda.api.entities.Member)19 EmbedBuilder (net.dv8tion.jda.api.EmbedBuilder)7 Map (java.util.Map)3 Collectors (java.util.stream.Collectors)3 MessageBuilder (net.dv8tion.jda.api.MessageBuilder)3 User (de.c0debase.bot.database.model.User)2 java.util (java.util)2 TimeUnit (java.util.concurrent.TimeUnit)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 Message (net.dv8tion.jda.api.entities.Message)2 Role (net.dv8tion.jda.api.entities.Role)2 MantaroBot (net.kodehawa.mantarobot.MantaroBot)2 CommandCategory (net.kodehawa.mantarobot.core.modules.commands.base.CommandCategory)2 Context (net.kodehawa.mantarobot.core.modules.commands.base.Context)2 HelpContent (net.kodehawa.mantarobot.core.modules.commands.help.HelpContent)2 MantaroData (net.kodehawa.mantarobot.data.MantaroData)2 EmoteReference (net.kodehawa.mantarobot.utils.commands.EmoteReference)2 Subscribe (com.google.common.eventbus.Subscribe)1 ThreadFactoryBuilder (com.google.common.util.concurrent.ThreadFactoryBuilder)1 BotCommandMappingHandler (com.sedmelluq.discord.lavaplayer.demo.controller.BotCommandMappingHandler)1