Newer
Older
CrashLogBot / src / main / java / net / romvoid / crashbot / commands / GuildsCommand.java
@y.varenkov y.varenkov on 2 Aug 2021 2 KB add
package net.romvoid.crashbot.commands;

import java.awt.Color;
import java.util.concurrent.TimeUnit;

import com.jagrosh.jdautilities.command.Command;
import com.jagrosh.jdautilities.command.CommandEvent;
import com.jagrosh.jdautilities.commons.waiter.EventWaiter;
import com.jagrosh.jdautilities.doc.standard.CommandInfo;
import com.jagrosh.jdautilities.doc.standard.Error;
import com.jagrosh.jdautilities.menu.Paginator;

import net.dv8tion.jda.api.entities.ChannelType;
import net.dv8tion.jda.api.exceptions.PermissionException;
import net.romvoid.crashbot.Bot;

@CommandInfo(name = "guilds", description = "Gets a paginated list of the guilds the bot is on.", requirements = {
		"The bot has all necessary permissions.", "The user is the bot's owner." })
@Error(value = "If arguments are provided, but they are not an integer.", response = "[PageNumber] is not a valid integer!")
public class GuildsCommand extends Command {

	private final Paginator.Builder pbuilder;

	public GuildsCommand(EventWaiter waiter) {
		this.name = "guilds";
		this.help = "shows the list of guilds the bot is on";
		this.arguments = "[pagenum]";
		this.guildOnly = false;
		this.ownerCommand = true;
		pbuilder = new Paginator.Builder().setColumns(1).setItemsPerPage(10).showPageNumbers(true)
				.waitOnSinglePage(false).useNumberedItems(false).setFinalAction(m -> {
					try {
						m.clearReactions().queue();
					} catch (PermissionException ex) {
						m.delete().queue();
					}
				}).setEventWaiter(waiter).setTimeout(1, TimeUnit.MINUTES);
	}

	@Override
	protected void execute(CommandEvent event) {
		Bot.LOG.info(event.getAuthor().getName() + " invoked command " + this.name);
		int page = 1;
		if (!event.getArgs().isEmpty()) {
			try {
				page = Integer.parseInt(event.getArgs());
			} catch (NumberFormatException e) {
				event.reply(event.getClient().getError() + " `" + event.getArgs() + "` is not a valid integer!");
				return;
			}
		}
		pbuilder.clearItems();
		event.getJDA().getGuilds().stream()
				.map(g -> "**" + g.getName() + "** (ID:" + g.getId() + ") ~ " + g.getMembers().size() + " Members")
				.forEach(pbuilder::addItems);
		Paginator p = pbuilder
				.setColor(event.isFromType(ChannelType.TEXT) ? event.getSelfMember().getColor() : Color.black)
				.setText(event.getClient().getSuccess() + " Guilds that **" + event.getSelfUser().getName()
						+ "** is connected to"
						+ (event.getJDA().getShardInfo() == null ? ":"
								: "(Shard ID " + event.getJDA().getShardInfo().getShardId() + "):"))
				.setUsers(event.getAuthor()).build();
		p.paginate(event.getChannel(), page);
		event.getMessage().delete().queue();
	}

}