package pl.shockah.shocky.cmds; import java.net.URL; import java.util.ArrayList; import org.pircbotx.Colors; import pl.shockah.Config; import pl.shockah.shocky.Data; import pl.shockah.shocky.Module; import pl.shockah.shocky.ModuleSource; public class CmdModule extends Command { public String command() {return "module";} public String help(Parameters params) { StringBuilder sb = new StringBuilder(); sb.append("module - list modules\n"); sb.append("module on/off - list enabled/disabled modules\n"); sb.append("[r:controller] module loadnew - loads new modules\n"); sb.append("[r:controller] module loadhttp {url} - loads a module from URL\n"); sb.append("[r:controller] module on/off {module} - enables/disables module\n"); sb.append("[r:controller] module unload {module} - unloads module\n"); sb.append("[r:controller] module reload {module} - reloads module\n"); sb.append("[r:controller] module reloadall - reloads all modules"); return sb.toString(); } public void doCommand(Parameters params, CommandCallback callback) { callback.type = EType.Notice; if (params.tokenCount == 0) { ArrayList<Module> modules = Module.getModules(); StringBuilder sb = new StringBuilder(); int i = 0; for (Module module : modules) { if (i != 0) sb.append(", "); boolean inchan = !module.isEnabled(params.channel.getName()); boolean global = !module.isEnabled(null); sb.append(global ? Colors.RED : (inchan ? Colors.OLIVE : Colors.DARK_GREEN)); sb.append(module.name()); sb.append(Colors.NORMAL); if (++i == 30) { sb.append('\n'); i = 0; } } callback.append(sb); return; } else if (params.tokenCount >= 1) { String method = params.nextParam(); if (method.equalsIgnoreCase("on") || method.equalsIgnoreCase("off")) { boolean state = method.equalsIgnoreCase("on"); if (params.tokenCount >= 2) { String moduleName = params.nextParam(); Module module = Module.getModule(moduleName); boolean global = false; if (module == null) { callback.append("No such module"); return; } String channelName; Config config; if (params.tokenCount >= 3) { String globalString = params.nextParam(); if (globalString.equalsIgnoreCase("global")) global = true; } if (global) { params.checkController(); channelName = null; config = Data.config; } else { params.checkOp(); channelName = params.channel.getName(); config = Data.forChannel(params.channel); } if (state) { callback.append(module.enable(channelName) ? "Enabled" : "Failed"); config.set("module-"+module.name(),true); return; } else { callback.append(module.disable(channelName) ? "Disabled" : "Failed"); config.set("module-"+module.name(),false); return; } } else { ArrayList<Module> modules = Module.getModules(state); StringBuilder sb = new StringBuilder(); for (Module module : modules) { if (sb.length() != 0) sb.append(", "); sb.append(module.name()); } callback.append(sb); return; } } else if (method.equalsIgnoreCase("loadnew")) { params.checkController(); ArrayList<Module> modules = Module.loadNewModules(); if (modules.isEmpty()) { callback.append("No new modules found"); } else { StringBuilder sb = new StringBuilder(); sb.append("Loaded modules: "); for (int i = 0; i < modules.size(); i++) { if (i != 0) sb.append(", "); sb.append(modules.get(i).name()); } callback.append(sb); } return; } else if (method.equalsIgnoreCase("reloadall")) { params.checkController(); ArrayList<Module> modules = Module.getModules(true); for (Module module : modules) module.reload(); callback.append("Reloaded all modules"); return; } else if (params.tokenCount >= 2 && (method.equalsIgnoreCase("reload") || method.equalsIgnoreCase("unload"))) { params.checkController(); boolean state = method.equalsIgnoreCase("reload"); String moduleName = params.nextParam(); Module module = Module.getModule(moduleName); if (module == null) { callback.append("No such module"); return; } if (state) callback.append(module.reload() ? "Reloaded" : "Failed"); else callback.append(module.unload() ? "Unloaded" : "Failed"); return; } else if (params.tokenCount >= 2 && method.equalsIgnoreCase("loadhttp")) { params.checkController(); try { URL url = new URL(params.getParams(0)); callback.append(Module.load(new ModuleSource<URL>(url)) != null ? "Loaded" : "Failed"); Module.postLoad(); } catch (Exception e) { e.printStackTrace(); } return; } } callback.append(help(params)); } }