package org.royaldev.thehumanity.commands.impl; import com.google.common.base.Preconditions; import org.jetbrains.annotations.NotNull; import org.kitteh.irc.client.library.util.Format; import org.kitteh.irc.client.library.element.User; import org.kitteh.irc.client.library.event.channel.ChannelMessageEvent; import org.kitteh.irc.client.library.event.helper.ActorEvent; import org.royaldev.thehumanity.TheHumanity; import org.royaldev.thehumanity.game.TheHumanityGame; import org.royaldev.thehumanity.game.round.CAHRound.RoundState; import org.royaldev.thehumanity.game.round.CurrentRound; import org.royaldev.thehumanity.player.TheHumanityPlayer; import org.royaldev.thehumanity.util.ConversionHelper; import xyz.cardstock.cardstock.commands.BaseCommand; import xyz.cardstock.cardstock.commands.CallInfo; import xyz.cardstock.cardstock.commands.Command; import java.util.List; @Command( name = "who", description = "Shows the players in this game and their status." ) public class WhoCommand extends BaseCommand { protected final TheHumanity humanity; public WhoCommand(final TheHumanity humanity) { this.humanity = humanity; } /** * Builds a String containing information about who the czar is, who is playing, and if they have played or not. * * @param g TheHumanityGame to build this String for * @return Built String, ready to be sent */ @NotNull private String getStatusString(@NotNull final TheHumanityGame g) { Preconditions.checkNotNull(g, "g was null"); final CurrentRound r = g.getCurrentRound(); if (r == null) { return "No round in progress."; } final StringBuilder sb = new StringBuilder(); final TheHumanityPlayer czar = r.getCzar(); if (czar != null) { sb.append(Format.BOLD).append("Czar: ").append(Format.RESET).append(czar.getUser().getNick()).append(", "); } sb.append(Format.BOLD).append("Players: ").append(Format.RESET); for (final TheHumanityPlayer player : g.getPlayers()) { if (player.equals(czar)) continue; final String c = (r.hasPlayed(player) ? Format.GREEN : r.getState().getUniqueName().equals(RoundState.WAITING_FOR_CZAR.name()) ? Format.BLUE : Format.RED).toString(); sb.append(c).append(player.getUser().getNick()).append(Format.RESET).append(", "); } return sb.substring(0, sb.length() - 2); } @Override public void run(@NotNull ActorEvent<User> event, @NotNull CallInfo callInfo, @NotNull List<String> arguments) { if (!(event instanceof ChannelMessageEvent)) return; final User u = event.getActor(); final TheHumanityGame game = this.humanity.getGameRegistrar().find(((ChannelMessageEvent) event).getChannel()); if (game == null) { u.sendNotice("No game in progress."); return; } final CurrentRound r = game.getCurrentRound(); if (r == null || !r.getState().getUniqueName().equals(RoundState.WAITING_FOR_CZAR.name()) && !r.getState().getUniqueName().equals(RoundState.WAITING_FOR_PLAYERS.name())) { u.sendNotice("The game has not yet started."); return; } final String ss = this.getStatusString(game); ConversionHelper.respond(event, game.antiPing(ss)); } }