diff options
| author | 2019-12-10 05:27:35 +0000 | |
|---|---|---|
| committer | 2019-12-10 05:27:35 +0000 | |
| commit | 638eee0d685c06d258cb55287204ca97bca7c344 (patch) | |
| tree | 33442439317ae2846f1efb7674b7a3758c8990a1 /src/core_modules/modules.py | |
| parent | move sys.exit() codes to an enum in utils.consts (diff) | |
| signature | ||
move core modules to src/core_modules, make them uneffected by white/black list
Diffstat (limited to 'src/core_modules/modules.py')
| -rw-r--r-- | src/core_modules/modules.py | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/src/core_modules/modules.py b/src/core_modules/modules.py new file mode 100644 index 00000000..a93afaea --- /dev/null +++ b/src/core_modules/modules.py @@ -0,0 +1,122 @@ +#--depends-on commands +#--depends-on permissions + +from src import ModuleManager, utils + +class Module(ModuleManager.BaseModule): + def _catch(self, name, func): + try: + return func() + except ModuleManager.ModuleNotFoundException: + raise utils.EventError("Module '%s' not found" % name) + except ModuleManager.ModuleNotLoadedException: + raise utils.EventError("Module '%s' isn't loaded" % name) + except ModuleManager.ModuleWarning as warning: + raise utils.EventError("Module '%s' not loaded: %s" % ( + name, str(warning))) + except Exception as e: + raise utils.EventError("Failed to reload module '%s': %s" % ( + name, str(e))) + + @utils.hook("received.command.loadmodule", min_args=1) + def load(self, event): + """ + :help: Load a module + :usage: <module name> + :permission: load-module + """ + name = event["args_split"][0].lower() + if name in self.bot.modules.modules: + raise utils.EventError("Module '%s' is already loaded" % name) + definition = self._catch(name, + lambda: self.bot.modules.find_module(name)) + + self._catch(name, lambda: self.bot.modules.load_module(self.bot, definition)) + event["stdout"].write("Loaded '%s'" % name) + + @utils.hook("received.command.unloadmodule", min_args=1) + def unload(self, event): + """ + :help: Unload a module + :usage: <module name> + :permission: unload-module + """ + name = event["args_split"][0].lower() + if not name in self.bot.modules.modules: + raise utils.EventError("Module '%s' isn't loaded" % name) + + self._catch(name, lambda: self.bot.modules.unload_module(name)) + event["stdout"].write("Unloaded '%s'" % name) + + def _reload(self, name): + self.bot.modules.unload_module(name) + definition = self._catch(name, + lambda: self.bot.modules.find_module(name)) + self.bot.modules.load_module(self.bot, definition) + @utils.hook("received.command.reloadmodule", min_args=1) + def reload(self, event): + """ + :help: Reload a module + :usage: <module name> + :permission: reload-module + """ + name = event["args_split"][0].lower() + + self._catch(name, lambda: self._reload(name)) + event["stdout"].write("Reloaded '%s'" % name) + + @utils.hook("received.command.reloadallmodules") + def reload_all(self, event): + """ + :help: Reload all modules + :permission: reload-all-modules + """ + result = self.bot.try_reload_modules() + if result.success: + event["stdout"].write(result.message) + else: + event["stderr"].write(result.message) + + def _get_blacklist(self): + return self.bot.config.get_list("module-blacklist") + def _save_blacklist(self, modules): + self.bot.config.set_list("module-blacklist", modules) + self.bot.config.save() + + @utils.hook("received.command.enablemodule") + @utils.kwarg("min_args", 1) + @utils.kwarg("help", "Remove a module from the module blacklist") + @utils.kwarg("usage", "<module>") + @utils.kwarg("permission", "enable-module") + def enable(self, event): + name = event["args_split"][0].lower() + + blacklist = self._get_blacklist() + if not name in blacklist: + raise utils.EventError("Module '%s' isn't disabled" % name) + + blacklist.remove(name) + self._save_blacklist(blacklist) + event["stdout"].write("Module '%s' has been enabled and can now " + "be loaded" % name) + + @utils.hook("received.command.disablemodule") + @utils.kwarg("min_args", 1) + @utils.kwarg("help", "Add a module to the module blacklist") + @utils.kwarg("usage", "<module>") + @utils.kwarg("permission", "disable-module") + def disable(self, event): + name = event["args_split"][0].lower() + and_unloaded = "" + if name in self.bot.modules.modules: + self.bot.modules.unload_module(name) + and_unloaded = " and unloaded" + + blacklist = self._get_blacklist() + if name in blacklist: + raise utils.EventError("Module '%s' is already disabled" % name) + + blacklist.append(name) + self._save_blacklist(blacklist) + event["stdout"].write("Module '%s' has been disabled%s" % ( + name, and_unloaded)) |
