// Copyright (c) 2015, Christopher "BlayTheNinth" Baker package net.blay09.mods.eirairc.bot; import com.google.gson.JsonObject; import net.blay09.mods.eirairc.api.bot.IBotCommand; import net.blay09.mods.eirairc.api.bot.IRCBot; import net.blay09.mods.eirairc.api.irc.IRCChannel; import net.blay09.mods.eirairc.api.irc.IRCUser; import net.minecraft.server.MinecraftServer; import org.apache.commons.lang3.StringUtils; public class BotCommandCustom implements IBotCommand { private String name = ""; private String command = ""; private String description; private boolean allowArgs; private boolean runAsOp; private boolean requireAuth; private boolean broadcastResult; private String outputFilter; private IBotCommand overrideCommand; @Override public String getCommandName() { return name; } @Override public boolean isChannelCommand() { return true; } @Override public void processCommand(IRCBot bot, IRCChannel channel, IRCUser user, String[] args, IBotCommand commandSettings) { if(overrideCommand != null) { overrideCommand.processCommand(bot, channel, user, args, this); } else { String message = command; if (commandSettings.allowArgs()) { message += " " + StringUtils.join(args, " ", 0, args.length).trim(); } MinecraftServer.getServer().getCommandManager().executeCommand(new IRCUserCommandSender(channel, user, commandSettings.broadcastsResult(), runAsOp, outputFilter), message); } } @Override public boolean requiresAuth() { return requireAuth; } @Override public boolean broadcastsResult() { return broadcastResult; } @Override public boolean allowArgs() { return allowArgs; } @Override public String getCommandDescription() { return description; } public static BotCommandCustom loadFromJson(JsonObject object) { BotCommandCustom cmd = new BotCommandCustom(); cmd.name = object.get("name").getAsString(); cmd.command = object.has("command") ? object.get("command").getAsString() : ""; cmd.allowArgs = object.has("allowArgs") && object.get("allowArgs").getAsBoolean(); cmd.requireAuth = object.has("requireAuth") && object.get("requireAuth").getAsBoolean(); cmd.broadcastResult = object.has("broadcastResult") && object.get("broadcastResult").getAsBoolean(); cmd.description = object.has("description") ? object.get("description").getAsString() : "(no description set)"; cmd.runAsOp = object.has("runAsOp") && object.get("runAsOp").getAsBoolean(); if(object.has("override")) { String overrideName = object.get("override").getAsString(); switch (overrideName) { case "who": cmd.overrideCommand = new BotCommandWho(); break; case "help": cmd.overrideCommand = new BotCommandHelp(); break; case "msg": cmd.overrideCommand = new BotCommandMessage(); break; case "op": cmd.overrideCommand = new BotCommandOp(); break; } } cmd.outputFilter = object.has("outputFilter") ? object.get("outputFilter").getAsString() : ""; return cmd; } }