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();
});
}
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();
}
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);
});
}
Aggregations