Search in sources :

Example 26 with Limit

use of com.sx4.bot.annotations.argument.Limit in project Sx4 by sx4-discord-bot.

the class WarnCommand method resetAfter.

@Command(value = "reset after", description = "The time it should take for warns to be taken away")
@CommandId(450)
@AuthorPermissions(permissions = { Permission.MANAGE_SERVER })
@Examples({ "warn reset after 1 1 day", "warn reset after 3 5h 20s", "warn reset after 3 30d" })
public void resetAfter(Sx4CommandEvent event, @Argument(value = "amount") @Limit(min = 0) int amount, @Argument(value = "time", endless = true, nullDefault = true) Duration time) {
    if (time != null && time.toMinutes() < 5) {
        event.replyFailure("The duration has to be 5 minutes or above").queue();
        return;
    }
    if (amount != 0 && time == null) {
        event.reply("You need to provide a duration if attempts is more than 0").queue();
        return;
    }
    Bson update = amount == 0 ? Updates.unset("warn.reset") : Updates.set("warn.reset", new Document("amount", amount).append("after", time.toSeconds()));
    event.getMongo().updateGuildById(event.getGuild().getIdLong(), update).whenComplete((result, exception) -> {
        if (ExceptionUtility.sendExceptionally(event, exception)) {
            return;
        }
        if (result.getModifiedCount() == 0) {
            event.replyFailure("Your warn reset configuration was already set to that").queue();
            return;
        }
        event.reply(amount == 0 ? "Users warns will no longer reset" + event.getConfig().getSuccessEmote() : String.format("Users warns will now reset **%d** time%s after `%s` %s", amount, amount == 1 ? "" : "s", TimeUtility.LONG_TIME_FORMATTER.parse(time.toSeconds()), event.getConfig().getSuccessEmote())).queue();
    });
}
Also used : Document(org.bson.Document) Bson(org.bson.conversions.Bson) Command(com.jockie.bot.core.command.Command) Sx4Command(com.sx4.bot.core.Sx4Command)

Example 27 with Limit

use of com.sx4.bot.annotations.argument.Limit in project Sx4 by sx4-discord-bot.

the class RenameCommand method onCommand.

public void onCommand(Sx4CommandEvent event, @Argument(value = "user", nullDefault = true) Member member, @Argument(value = "nickname", endless = true, nullDefault = true) @Limit(max = 32) String nick) {
    Member effectiveMember = member == null ? event.getMember() : member;
    if (effectiveMember.getIdLong() != event.getMember().getIdLong() && !event.hasPermission(event.getMember(), Permission.NICKNAME_MANAGE)) {
        event.replyFailure(PermissionUtility.formatMissingPermissions(EnumSet.of(Permission.NICKNAME_MANAGE))).queue();
        return;
    }
    if (effectiveMember.getIdLong() != event.getMember().getIdLong() && !event.getMember().canInteract(effectiveMember)) {
        event.replyFailure("You cannot change the nickname of someone higher or equal than your top role").queue();
        return;
    }
    if (effectiveMember.getIdLong() != event.getSelfUser().getIdLong() && !event.getSelfMember().hasPermission(Permission.NICKNAME_MANAGE)) {
        event.replyFailure(PermissionUtility.formatMissingPermissions(EnumSet.of(Permission.NICKNAME_MANAGE), "I am")).queue();
        return;
    }
    if (effectiveMember.getIdLong() != event.getSelfUser().getIdLong() && !event.getSelfMember().canInteract(effectiveMember)) {
        event.replyFailure("I cannot change the nickname of someone higher or equal than my top role").queue();
        return;
    }
    event.getGuild().modifyNickname(effectiveMember, nick).flatMap($ -> event.replySuccess("Renamed " + effectiveMember.getAsMention() + " to **" + (nick == null ? effectiveMember.getEffectiveName() : nick) + "**")).queue();
}
Also used : ModuleCategory(com.sx4.bot.category.ModuleCategory) PermissionUtility(com.sx4.bot.utility.PermissionUtility) Sx4Command(com.sx4.bot.core.Sx4Command) Sx4CommandEvent(com.sx4.bot.core.Sx4CommandEvent) Permission(net.dv8tion.jda.api.Permission) Member(net.dv8tion.jda.api.entities.Member) EnumSet(java.util.EnumSet) Argument(com.jockie.bot.core.argument.Argument) Limit(com.sx4.bot.annotations.argument.Limit) Member(net.dv8tion.jda.api.entities.Member)

Example 28 with Limit

use of com.sx4.bot.annotations.argument.Limit in project Sx4 by sx4-discord-bot.

the class RedditCommand method onCommand.

public void onCommand(Sx4CommandEvent event, @Argument(value = "subreddit") String subreddit, @Option(value = "sort", description = "What to sort the subreddit by") @Options({ "new", "hot", "top" }) @DefaultString("hot") @Lowercase String sort, @Option(value = "time", description = "If sort is top will choose the top posts after the set amount of time") @Options({ "day", "week", "month", "year", "all" }) @DefaultString("day") @Lowercase String time, @Option(value = "limit", description = "How many posts to show") @DefaultNumber(25) @Limit(min = 1, max = 100) int limit) {
    Request request = new Request.Builder().url("https://reddit.com/r/" + subreddit + "/" + sort + ".json?t=" + time + "&limit=" + limit).build();
    event.getHttpClient().newCall(request).enqueue((HttpCallback) response -> {
        if (response.code() == 302 || response.code() == 404) {
            event.replyFailure("I could not find that subreddit").queue();
            return;
        }
        List<Document> posts = Document.parse(response.body().string()).getEmbedded(List.of("data", "children"), Collections.emptyList());
        posts = posts.stream().filter(post -> {
            if (!event.getTextChannel().isNSFW()) {
                return !post.getEmbedded(List.of("data", "over_18"), false);
            }
            return true;
        }).map(post -> post.get("data", Document.class)).collect(Collectors.toList());
        if (posts.isEmpty()) {
            event.replyFailure("I could not find any posts with those filters").queue();
            return;
        }
        PagedResult<Document> paged = new PagedResult<>(event.getBot(), posts).setPerPage(1).setSelect().setCustomFunction(page -> {
            MessageBuilder builder = new MessageBuilder();
            EmbedBuilder embed = new EmbedBuilder().setTitle("Page " + page.getPage() + "/" + page.getMaxPage());
            page.forEach((data, index) -> {
                String url = "https://reddit.com" + data.getString("permalink");
                embed.setFooter(data.getString("subreddit_name_prefixed") + " | Upvotes: " + data.getInteger("ups"));
                embed.setAuthor(StringUtility.limit(data.getString("title"), 50, "..."), url, "http://i.imgur.com/sdO8tAw.png");
                String postHint = data.getString("post_hint");
                if (postHint != null && postHint.equals("image")) {
                    embed.setImage(data.getString("url"));
                } else if (postHint != null && postHint.equals("hosted:video")) {
                    embed.setImage(data.getString("thumbnail"));
                    builder.setContent("<" + data.getEmbedded(List.of("media", "reddit_video", "fallback_url"), String.class) + ">");
                } else if (postHint != null && postHint.equals("rich:video")) {
                    embed.setImage(data.getEmbedded(List.of("media", "oembed", "thumbnail"), String.class));
                    builder.setContent("<" + data.getEmbedded(List.of("secure_media_embed", "media_domain_url"), String.class) + ">");
                }
                if (data.containsKey("selftext")) {
                    embed.setDescription(StringUtility.limit(data.getString("selftext"), MessageEmbed.DESCRIPTION_MAX_LENGTH, "... [Read more](" + url + ")"));
                }
            });
            return builder.setEmbeds(embed.build());
        });
        paged.execute(event);
    });
}
Also used : Document(org.bson.Document) Request(okhttp3.Request) HttpCallback(com.sx4.bot.http.HttpCallback) Sx4Command(com.sx4.bot.core.Sx4Command) Permission(net.dv8tion.jda.api.Permission) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) PagedResult(com.sx4.bot.paged.PagedResult) Collectors(java.util.stream.Collectors) com.sx4.bot.annotations.argument(com.sx4.bot.annotations.argument) ModuleCategory(com.sx4.bot.category.ModuleCategory) List(java.util.List) MessageBuilder(net.dv8tion.jda.api.MessageBuilder) Sx4CommandEvent(com.sx4.bot.core.Sx4CommandEvent) Option(com.jockie.bot.core.option.Option) MessageEmbed(net.dv8tion.jda.api.entities.MessageEmbed) StringUtility(com.sx4.bot.utility.StringUtility) Collections(java.util.Collections) Argument(com.jockie.bot.core.argument.Argument) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) MessageBuilder(net.dv8tion.jda.api.MessageBuilder) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) MessageBuilder(net.dv8tion.jda.api.MessageBuilder) Request(okhttp3.Request) List(java.util.List) PagedResult(com.sx4.bot.paged.PagedResult)

Aggregations

Sx4Command (com.sx4.bot.core.Sx4Command)25 Argument (com.jockie.bot.core.argument.Argument)20 ModuleCategory (com.sx4.bot.category.ModuleCategory)20 Sx4CommandEvent (com.sx4.bot.core.Sx4CommandEvent)20 Permission (net.dv8tion.jda.api.Permission)19 Limit (com.sx4.bot.annotations.argument.Limit)17 Document (org.bson.Document)17 HttpCallback (com.sx4.bot.http.HttpCallback)14 Request (okhttp3.Request)13 Command (com.jockie.bot.core.command.Command)11 Bson (org.bson.conversions.Bson)11 CommandId (com.sx4.bot.annotations.command.CommandId)10 Examples (com.sx4.bot.annotations.command.Examples)10 List (java.util.List)10 DefaultNumber (com.sx4.bot.annotations.argument.DefaultNumber)9 PagedResult (com.sx4.bot.paged.PagedResult)9 Member (net.dv8tion.jda.api.entities.Member)9 ImageRequest (com.sx4.bot.entities.image.ImageRequest)8 ImageUtility (com.sx4.bot.utility.ImageUtility)8 EmbedBuilder (net.dv8tion.jda.api.EmbedBuilder)8