use of com.sx4.bot.annotations.command.CommandId in project Sx4 by sx4-discord-bot.
the class MuteCommand method list.
@Command(value = "list", description = "Lists all the currently muted users in the server")
@CommandId(343)
@Redirects({ "muted list" })
@Examples({ "mute list" })
public void list(Sx4CommandEvent event) {
List<Document> mutes = event.getMongo().getMutes(Filters.eq("guildId", event.getGuild().getIdLong()), Projections.include("unmuteAt", "userId")).into(new ArrayList<>());
if (mutes.isEmpty()) {
event.replyFailure("There is no one muted in this server").queue();
return;
}
mutes.sort(Comparator.comparingLong(d -> d.getLong("unmuteAt")));
PagedResult<Document> paged = new PagedResult<>(event.getBot(), mutes).setAuthor("Muted Users", null, event.getGuild().getIconUrl()).setIndexed(false).setSelect().setDisplayFunction(data -> {
User user = event.getShardManager().getUserById(data.getLong("userId"));
return (user == null ? "Anonymous#0000" : user.getAsTag()) + " - " + TimeUtility.LONG_TIME_FORMATTER.parse(data.getLong("unmuteAt") - Clock.systemUTC().instant().getEpochSecond());
});
paged.execute(event);
}
use of com.sx4.bot.annotations.command.CommandId in project Sx4 by sx4-discord-bot.
the class RoleCommand method add.
@Command(value = "add", description = "Add a role to a member")
@CommandId(250)
@Redirects({ "addrole", "add role", "ar" })
@Examples({ "role add @Shea#6653 Role", "role add Shea 345718366373150720", "role add @Role" })
@AuthorPermissions(permissions = { Permission.MANAGE_ROLES })
@BotPermissions(permissions = { Permission.MANAGE_ROLES })
public void add(Sx4CommandEvent event, @Argument(value = "user", nullDefault = true) @AlternativeOptions("all") Alternative<Member> option, @Argument(value = "role", endless = true) Role role) {
if (role.isManaged()) {
event.replyFailure("I cannot give managed roles").queue();
return;
}
if (role.isPublicRole()) {
event.replyFailure("I cannot give the @everyone role").queue();
return;
}
if (!event.getMember().canInteract(role)) {
event.replyFailure("You cannot give a role higher or equal than your top role").queue();
return;
}
if (!event.getSelfMember().canInteract(role)) {
event.replyFailure("I cannot give a role higher or equal than my top role").queue();
return;
}
if (option != null && option.isAlternative()) {
List<Member> members = event.getGuild().getMemberCache().applyStream(stream -> stream.filter(member -> !member.getRoles().contains(role)).collect(Collectors.toList()));
if (members.size() == 0) {
event.replyFailure("All users already have that role").queue();
return;
}
if (!this.pending.add(event.getGuild().getIdLong())) {
event.replyFailure("You can only have 1 concurrent role being added to all users").queue();
return;
}
event.replyFormat("Adding %s to **%,d** user%s, another message will be sent once this is done %s", role.getAsMention(), members.size(), members.size() == 1 ? "" : "s", event.getConfig().getSuccessEmote()).queue();
List<CompletableFuture<Integer>> futures = new ArrayList<>();
for (Member member : members) {
futures.add(event.getGuild().addRoleToMember(member, role).submit().handle((result, exception) -> exception == null ? 1 : 0));
}
FutureUtility.allOf(futures).whenComplete((completed, exception) -> {
this.pending.remove(event.getGuild().getIdLong());
int count = completed.stream().reduce(0, Integer::sum);
event.replyFormat("Successfully added the role %s to **%,d/%,d** user%s %s", role.getAsMention(), count, members.size(), count == 1 ? "" : "s", event.getConfig().getSuccessEmote()).queue();
});
} else {
Member effectiveMember = option == null ? event.getMember() : option.getValue();
event.getGuild().addRoleToMember(effectiveMember, role).flatMap($ -> event.replySuccess(role.getAsMention() + " has been added to **" + effectiveMember.getUser().getAsTag() + "**")).queue();
}
}
use of com.sx4.bot.annotations.command.CommandId in project Sx4 by sx4-discord-bot.
the class InvitesCommand method leaderboard.
@Command(value = "leaderboard", aliases = { "lb" }, description = "View a leaderboard of all invites in the server sorted by user")
@CommandId(266)
@Redirects({ "lb invites", "leaderboard invites" })
@Examples({ "invites leaderboard" })
@BotPermissions(permissions = { Permission.MESSAGE_EMBED_LINKS })
public void leaderboard(Sx4CommandEvent event) {
event.getGuild().retrieveInvites().queue(invites -> {
if (invites.isEmpty()) {
event.replyFailure("There are no invites in this server").queue();
return;
}
Map<Long, Integer> count = new HashMap<>();
AtomicInteger total = new AtomicInteger(0);
for (Invite invite : invites) {
User inviter = invite.getInviter();
if (inviter != null) {
count.compute(inviter.getIdLong(), (key, value) -> value == null ? invite.getUses() : value + invite.getUses());
}
total.addAndGet(invite.getUses());
}
List<Map.Entry<Long, Integer>> sortedCount = new ArrayList<>(count.entrySet());
sortedCount.sort(Collections.reverseOrder(Comparator.comparingInt(Map.Entry::getValue)));
PagedResult<Map.Entry<Long, Integer>> paged = new PagedResult<>(event.getBot(), sortedCount).setIncreasedIndex(true).setAuthor("Invites Leaderboard", null, event.getGuild().getIconUrl()).setDisplayFunction(data -> {
int percentInvited = Math.round(((float) data.getValue() / total.get()) * 100);
String percent = percentInvited >= 1 ? String.valueOf(percentInvited) : "<1";
Member member = event.getGuild().getMemberById(data.getKey());
String memberString = member == null ? String.valueOf(data.getKey()) : member.getUser().getAsTag();
return String.format("`%s` - %,d %s (%s%%)", memberString, data.getValue(), data.getValue() == 1 ? "invite" : "invites", percent);
});
paged.execute(event);
});
}
use of com.sx4.bot.annotations.command.CommandId in project Sx4 by sx4-discord-bot.
the class MediaModeCommand method remove.
@Command(value = "remove", aliases = { "delete" }, description = "Removes a channel as media only channel")
@CommandId(351)
@Examples({ "media mode remove", "media mode remove #media" })
@AuthorPermissions(permissions = { Permission.MANAGE_SERVER })
public void remove(Sx4CommandEvent event, @Argument(value = "channel", endless = true, nullDefault = true) TextChannel channel) {
TextChannel effectiveChannel = channel == null ? event.getTextChannel() : channel;
event.getMongo().deleteMediaChannel(Filters.eq("channelId", effectiveChannel.getIdLong())).whenComplete((result, exception) -> {
if (ExceptionUtility.sendExceptionally(event, exception)) {
return;
}
if (result.getDeletedCount() == 0) {
event.replyFailure("That channel is not a media only channel").queue();
return;
}
event.replySuccess(effectiveChannel.getAsMention() + " is no longer a media only channel").queue();
});
}
use of com.sx4.bot.annotations.command.CommandId in project Sx4 by sx4-discord-bot.
the class MediaModeCommand method add.
@Command(value = "add", description = "Add a channel as a media only channel")
@CommandId(350)
@Examples({ "media mode add", "media mode add #media" })
@AuthorPermissions(permissions = { Permission.MANAGE_SERVER })
public void add(Sx4CommandEvent event, @Argument(value = "channel", endless = true, nullDefault = true) TextChannel channel) {
TextChannel effectiveChannel = channel == null ? event.getTextChannel() : channel;
Document data = new Document("channelId", effectiveChannel.getIdLong()).append("guildId", event.getGuild().getIdLong());
event.getMongo().insertMediaChannel(data).whenComplete((result, exception) -> {
Throwable cause = exception instanceof CompletionException ? exception.getCause() : exception;
if (cause instanceof MongoWriteException && ((MongoWriteException) cause).getError().getCategory() == ErrorCategory.DUPLICATE_KEY) {
event.replyFailure("That channel is already a media only channel").queue();
return;
}
if (ExceptionUtility.sendExceptionally(event, exception)) {
return;
}
event.replySuccess(effectiveChannel.getAsMention() + " is now a media only channel").queue();
});
}
Aggregations