// Copyright (c) 2015, Christopher "BlayTheNinth" Baker package net.blay09.mods.eirairc.command; import net.blay09.mods.eirairc.ConnectionManager; import net.blay09.mods.eirairc.api.EiraIRCAPI; import net.blay09.mods.eirairc.api.SubCommand; import net.blay09.mods.eirairc.api.irc.IRCContext; import net.blay09.mods.eirairc.config.ChannelConfig; import net.blay09.mods.eirairc.config.ConfigurationHandler; import net.blay09.mods.eirairc.config.ServerConfig; import net.blay09.mods.eirairc.util.ConfigHelper; import net.blay09.mods.eirairc.util.IRCResolver; import net.blay09.mods.eirairc.util.Utils; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.command.WrongUsageException; import org.apache.commons.lang3.StringUtils; import java.util.List; public class CommandConfig implements SubCommand { public static final String TARGET_GLOBAL = "global"; @Override public String getCommandName() { return "config"; } @Override public String getCommandUsage(ICommandSender sender) { return "eirairc:commands.config.usage"; } @Override public String[] getAliases() { return new String[] { "cfg" }; } @Override public boolean processCommand(ICommandSender sender, IRCContext context, String[] args, boolean serverSide) throws CommandException { if(args.length < 1) { throw new WrongUsageException(getCommandUsage(sender)); } String target = args[0]; if(target.equals("reload")) { Utils.sendLocalizedMessage(sender, "commands.config.reload"); ConnectionManager.stopIRC(); ConfigurationHandler.reloadAll(); ConnectionManager.startIRC(); return true; } if(args.length < 2) { throw new WrongUsageException(getCommandUsage(sender)); } String config = args[1]; if(args.length > 2) { ConfigurationHandler.handleConfigCommand(sender, target, config, StringUtils.join(args, " ", 2, args.length)); } else { ConfigurationHandler.handleConfigCommand(sender, target, config); } return true; } @Override public boolean canCommandSenderUseCommand(ICommandSender sender) { return Utils.isOP(sender); } @Override public void addTabCompletionOptions(List<String> list, ICommandSender sender, String[] args) { if(args.length == 1) { list.add("reload"); list.add(TARGET_GLOBAL); Utils.addConnectionsToList(list); for(ServerConfig serverConfig : ConfigurationHandler.getServerConfigs()) { list.add(serverConfig.getAddress()); for(ChannelConfig channelConfig : serverConfig.getChannelConfigs()) { list.add(channelConfig.getName()); } } } else if(args.length == 2) { if(args[0].equals("reload")) { return; } if(args[0].equals(TARGET_GLOBAL)) { ConfigurationHandler.addOptionsToList(list, args[1], true); } else if(IRCResolver.isChannel(args[0])) { IRCContext channel = EiraIRCAPI.parseContext(null, args[0], IRCContext.ContextType.IRCChannel); ConfigHelper.getBotSettings(channel).addOptionsToList(list, args[1], true); } else { IRCContext server = EiraIRCAPI.parseContext(null, args[0], IRCContext.ContextType.IRCConnection); ConfigHelper.getBotSettings(server).addOptionsToList(list, args[1], true); } } else if(args.length == 3) { if(args[0].equals("reload")) { return; } if(args[0].equals(TARGET_GLOBAL)) { ConfigurationHandler.addOptionsToList(list, args[1], false); } else if(IRCResolver.isChannel(args[0])) { IRCContext channel = EiraIRCAPI.parseContext(null, args[0], IRCContext.ContextType.IRCChannel); ConfigHelper.getBotSettings(channel).addOptionsToList(list, args[1], false); } else { IRCContext server = EiraIRCAPI.parseContext(null, args[0], IRCContext.ContextType.IRCConnection); ConfigHelper.getBotSettings(server).addOptionsToList(list, args[1], false); } } } @Override public boolean isUsernameIndex(String[] args, int idx) { return false; } @Override public boolean hasQuickCommand() { return false; } }