package org.royaldev.royalbot.commands.impl.channelmanagement; import org.apache.commons.lang3.ArrayUtils; import org.pircbotx.hooks.types.GenericMessageEvent; import org.royaldev.royalbot.BotUtils; import org.royaldev.royalbot.commands.CallInfo; import org.royaldev.royalbot.commands.IRCCommand; import org.royaldev.royalbot.commands.impl.channelmanagement.subcommands.CMCommandsSubcommand; import org.royaldev.royalbot.commands.impl.channelmanagement.subcommands.CMIgnoreSubcommand; import org.royaldev.royalbot.commands.impl.channelmanagement.subcommands.CMPreferencesSubcommand; import org.royaldev.royalbot.handlers.CommandHandler; public class ChannelManagementCommand implements IRCCommand { private final CommandHandler subcommands = new CommandHandler(); public ChannelManagementCommand() { subcommands.register(new CMCommandsSubcommand()); subcommands.register(new CMIgnoreSubcommand()); subcommands.register(new CMPreferencesSubcommand()); } @Override public void onCommand(GenericMessageEvent event, CallInfo callInfo, String[] args) { if (args.length < 1) { event.respond("Not enough arguments."); return; } final String subcommandName = args[0]; if (subcommandName.equalsIgnoreCase("help")) { for (IRCCommand subcommand : subcommands.getAll()) event.respond(BotUtils.getHelpString(subcommand)); return; } final IRCCommand ic = subcommands.get(subcommandName); if (ic == null) { event.respond("No such subcommand!"); return; } try { ic.onCommand(event, new CallInfo(subcommandName, CallInfo.UsageType.PRIVATE), ArrayUtils.subarray(args, 1, args.length)); } catch (Throwable t) { final StringBuilder sb = new StringBuilder("Unhandled subcommand exception! "); sb.append(t.getClass().getSimpleName()).append(": ").append(t.getMessage()); String url = BotUtils.linkToStackTrace(t); if (url != null) sb.append(" (").append(url).append(")"); event.respond(sb.toString()); } } @Override public String getName() { return "channelmanagement"; } @Override public String getUsage() { return "<command> [subcommand] (args...)"; } @Override public String getDescription() { return "Manages channels"; } @Override public String[] getAliases() { return new String[]{"cm", "chanman"}; } @Override public CommandType getCommandType() { return CommandType.PRIVATE; } @Override public AuthLevel getAuthLevel() { return AuthLevel.PUBLIC; } }