package server.command;
import server.AdminFlag;
import server.GameServer;
import server.IdType;
import server.Player;
import server.SyntaxException;
import server.Utils;
public class AdminsCommand extends Command {
public AdminsCommand() {
super(CommandCategory.SYSTEM, "Shows a list of administrators that are online, or sends a message to all administrators that are online.");
}
@Override
public void run(Player player) throws SyntaxException {
String msg = CommandProcessor.getRemaining();
boolean canSeeChat = player.getAdminFlags().contains(AdminFlag.ADMINS_CHAT);
boolean listAll = "all".equals(msg);
boolean canListAll = canListAll(player);
if (listAll && canListAll) {
StringBuffer sb = new StringBuffer();
for (Player target : IdType.getAllPlayers()) {
if (target.getAdminFlags().isEmpty()) {
continue; }
StringBuffer psb = new StringBuffer();
for (AdminFlag flag : target.getAdminFlags()) {
if (psb.length() > 0) {
psb.append(", ");
}
psb.append(flag);
}
if (sb.length() > 0) {
sb.append(", ");
}
String nick = target.getName(player, false);
if (player == target) {
nick = Utils.capitalize(nick); }
sb.append(nick);
sb.append(" (");
sb.append(psb);
sb.append(")");
}
player.sendText(true, sb.toString());
return;
}
else if (msg != null && msg.length() > 0) {
msg = Utils.prettyMessage(msg);
msg = ":@ZZZ " + msg;
if (!canSeeChat) {
msg = " (@30Dsent blind@10F)" + msg;
}
int count = GameServer.sendAdminsMessage(player, null, msg);
if (!canSeeChat) {
if (count == 0) {
player.sendText(true, "No administrators @2ZZappear@ZZZ to be " +
"online right now. You might want to try sending " +
"your message again in a little while.");
return;
}
else {
player.sendText(true, "Thank you, your message has been sent " +
"to the administrators. If you don't receive an " +
"answer shortly, you might want to try sending " +
"your message again.");
return;
}
}
return;
}
StringBuffer sb = new StringBuffer();
sb.append("Administrators currently online: ");
boolean gotOne = false;
for (Player target : Player.getOnlineAdmins()) {
if (target.isAFK() && !player.getAdminFlags().contains(AdminFlag.ADMIN_VIEWS)) {
continue;
}
if (gotOne) {
sb.append(", ");
}
String nick = target.getName(player, false);
if (player == target) {
nick = Utils.capitalize(nick); }
sb.append(nick);
gotOne = true;
}
if (gotOne) {
player.sendText(true, sb.toString());
}
else {
player.sendText(true, "No administrators are currently online.");
}
}
@Override
public String[] getSyntax(Player player) {
if (canListAll(player)) {
return new String[] { "", "ALL", "<message>" };
}
else {
return new String[] { "", "<message>"};
}
}
private boolean canListAll(Player player) {
return player.getAdminFlags().contains(AdminFlag.ADMIN_VIEWS);
}
}