+/* module_commands.c - NeonServ v5.3
+ * Copyright (C) 2011-2012 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "modcmd.h"
+#include "IRCParser.h"
+#include "modules.h"
+#include "tools.h"
+#include "lang.h"
+
+static const struct default_language_entry msgtab[] = {
+ {"MODULE_LOADED", "Module %s loaded."}, /* {ARGS: "NeonServ"} */
+ {"MODULE_UNLOADED", "Module %s unloaded."}, /* {ARGS: "NeonServ"} */
+ {"MODULE_RELOADED", "Module %s reloaded."}, /* {ARGS: "NeonServ"} */
+ {"MODULE_ERROR", "An error occured when performing this module operation. View error log for more information."},
+ {"MODULE_LIST", "Loaded Modules: %s"},
+ {NULL, NULL}
+};
+
+static CMD_BIND(module_cmd_load);
+static CMD_BIND(module_cmd_unload);
+static CMD_BIND(module_cmd_reload);
+static CMD_BIND(module_cmd_modules);
+
+void register_module_commands() {
+ //Module Commands
+ #define OPER_COMMAND(NAME,FUNCTION,PARAMCOUNT,GACCESS,FLAGS) register_command(0, NAME, 0, FUNCTION, PARAMCOUNT, NULL, GACCESS, FLAGS)
+ // NAME FUNCTION PARAMS ACCS FLAGS
+ OPER_COMMAND("loadmod", module_cmd_load, 1, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("unloadmod", module_cmd_unload, 1, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("reloadmod", module_cmd_reload, 1, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
+ OPER_COMMAND("modules", module_cmd_modules, 0, 1000, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+ #undef OPER_COMMAND
+
+ register_default_language_table(msgtab);
+}
+
+static CMD_BIND(module_cmd_load) {
+ if(ext_load_module(argv[0]))
+ reply(getTextBot(), user, "MODULE_LOADED", argv[0]);
+ else
+ reply(getTextBot(), user, "MODULE_ERROR");
+}
+
+static CMD_BIND(module_cmd_unload) {
+ if(ext_unload_module(argv[0]))
+ reply(getTextBot(), user, "MODULE_UNLOADED", argv[0]);
+ else
+ reply(getTextBot(), user, "MODULE_ERROR");
+}
+
+static CMD_BIND(module_cmd_reload) {
+ if(ext_reload_module(argv[0]))
+ reply(getTextBot(), user, "MODULE_RELOADED", argv[0]);
+ else
+ reply(getTextBot(), user, "MODULE_ERROR");
+}
+
+static CMD_BIND(module_cmd_modules) {
+ char modules[MAXLEN];
+ int modpos = 0;
+ int modcount = 0;
+ struct ModuleInfo *modinfo;
+ for(modinfo = ext_get_modules(NULL); modinfo; modinfo = ext_get_modules(modinfo)) {
+ if(modpos + strlen(modinfo->name) > 450) {
+ reply(getTextBot(), user, "MODULE_LIST", modules);
+ modpos = 0;
+ }
+ modcount++;
+ modpos += sprintf(modules + modpos, (modpos ? ", %s" : "%s"), modinfo->name);
+ }
+ if(!modcount || modpos)
+ reply(getTextBot(), user, "MODULE_LIST", (modpos ? modules : "none"));
+}