package org.royaldev.royalbot.commands.impl.channelmanagement.subcommands; import org.apache.commons.lang3.ArrayUtils; import org.pircbotx.Colors; import org.pircbotx.hooks.types.GenericMessageEvent; import org.royaldev.royalbot.BotUtils; import org.royaldev.royalbot.RoyalBot; import org.royaldev.royalbot.commands.CallInfo; import org.royaldev.royalbot.commands.IRCCommand; import org.royaldev.royalbot.configuration.ChannelPreferences; import org.royaldev.royalbot.listeners.IRCListener; import java.util.List; public class CMPreferencesSubcommand implements IRCCommand { private final RoyalBot rb = RoyalBot.getInstance(); @Override public void onCommand(GenericMessageEvent event, CallInfo callInfo, String[] args) { if (args.length < 1) { event.respond("Not enough arguments."); return; } if (args[0].equalsIgnoreCase("help")) { event.respond(Colors.BOLD + "Channel Preferences Help"); event.respond("preferences [channel] set [option] [value] (values...)"); return; } if (args.length < 2) { event.respond("Not enough arguments."); return; } final String channel = args[0], subcommand = args[1]; if (channel.charAt(0) != '#') { event.respond("Channel did not start with \"#\""); return; } String[] subcommandArgs = ArrayUtils.subarray(args, 2, args.length); if (subcommand.equalsIgnoreCase("set")) set(event, new ChannelPreferences(channel), subcommandArgs); else event.respond("Unknown subcommand!"); } private void set(GenericMessageEvent event, ChannelPreferences cp, String[] args) { if (args.length < 1) { event.respond("Not enough arguments."); return; } final String channel = cp.getChannel(); final String option = args[0]; if (option.equalsIgnoreCase("help")) { event.respond("set command <command> <status> (e.g. \"set command mcping disabled\")"); event.respond("set listener <listener> <status> (e.g. \"set listener youtube disabled\""); } else if (option.equalsIgnoreCase("command")) { if (args.length < 3) { event.respond("Not enough arguments."); return; } if (!BotUtils.isAuthorized(event.getUser(), channel)) { event.respond("You need to be an op in that channel."); return; } String command = args[1], status = args[2]; IRCCommand ic = rb.getCommandHandler().get(command); if (ic == null) { event.respond("No such command."); return; } Status s; try { s = Status.valueOf(status.toUpperCase()); } catch (IllegalArgumentException ex) { event.respond("Invalid status."); return; } List<String> disabledCommands = cp.getDisabledCommands(); if (s == Status.DISABLED) { if (disabledCommands.contains(ic.getName())) { event.respond(Colors.BOLD + ic.getName() + Colors.NORMAL + " is already disabled in " + Colors.BOLD + channel + Colors.NORMAL + "."); return; } disabledCommands.add(ic.getName()); event.respond("Disabled " + Colors.BOLD + ic.getName() + Colors.NORMAL + " in " + Colors.BOLD + channel + Colors.NORMAL + "."); } else if (s == Status.ENABLED) { if (!disabledCommands.contains(ic.getName())) { event.respond(Colors.BOLD + ic.getName() + Colors.NORMAL + " is already enabled in " + Colors.BOLD + channel + Colors.NORMAL + "."); return; } disabledCommands.remove(ic.getName()); event.respond("Enabled " + Colors.BOLD + ic.getName() + Colors.NORMAL + " in " + Colors.BOLD + channel + Colors.NORMAL + "."); } cp.setDisabledCommands(disabledCommands); } else if (option.equalsIgnoreCase("listener")) { if (args.length < 3) { event.respond("Not enough arguments."); return; } if (!BotUtils.isAuthorized(event.getUser(), channel)) { event.respond("You need to be an op in that channel."); return; } String listener = args[1], status = args[2]; IRCListener il = rb.getListenerHandler().get(listener); if (il == null) { event.respond("No such listener."); return; } Status s; try { s = Status.valueOf(status.toUpperCase()); } catch (IllegalArgumentException ex) { event.respond("Invalid status."); return; } List<String> disabledListeners = cp.getDisabledListeners(); if (s == Status.DISABLED) { if (disabledListeners.contains(il.getName())) { event.respond(Colors.BOLD + il.getName() + Colors.NORMAL + " is already disabled in " + Colors.BOLD + channel + Colors.NORMAL + "."); return; } disabledListeners.add(il.getName()); event.respond("Disabled " + Colors.BOLD + il.getName() + Colors.NORMAL + " in " + Colors.BOLD + channel + Colors.NORMAL + "."); } else if (s == Status.ENABLED) { if (!disabledListeners.contains(il.getName())) { event.respond(Colors.BOLD + il.getName() + Colors.NORMAL + " is already enabled in " + Colors.BOLD + channel + Colors.NORMAL + "."); return; } disabledListeners.remove(il.getName()); event.respond("Enabled " + Colors.BOLD + il.getName() + Colors.NORMAL + " in " + Colors.BOLD + channel + Colors.NORMAL + "."); } cp.setDisabledListeners(disabledListeners); } } @Override public String getName() { return "preferences"; } @Override public String getUsage() { return "<command> [subcommands/help]"; } @Override public String getDescription() { return "Manages preferences for channels"; } @Override public String[] getAliases() { return new String[]{"pref", "pr", "p"}; } @Override public CommandType getCommandType() { return CommandType.PRIVATE; } @Override public AuthLevel getAuthLevel() { return AuthLevel.PUBLIC; } private enum Status { ENABLED, DISABLED } }