diff options
| -rw-r--r-- | src/ModuleManager.py | 14 | ||||
| -rw-r--r-- | src/core_modules/modules.py | 8 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/ModuleManager.py b/src/ModuleManager.py index 2ad086ea..b8dcd107 100644 --- a/src/ModuleManager.py +++ b/src/ModuleManager.py @@ -402,6 +402,20 @@ class ModuleManager(object): [loaded_module.name, ", ".join([str(referrer) for referrer in referrers])]) + def try_reload_module(self, bot: "IRCBot.Bot", name: str): + loaded_module = self.modules.pop(name) + loaded_module.module.on_pause() + + new_definition = self.find_module(name) + try: + self.load_module(bot, new_definition) + except: + loaded_module.module.on_resume() + self.modules[name] = loaded_module + raise + + self._unload_module(loaded_module) + def try_reload_modules(self, bot: "IRCBot.Bot", whitelist: typing.List[str], blacklist: typing.List[str]): loadable, nonloadable = self._list_valid_modules( diff --git a/src/core_modules/modules.py b/src/core_modules/modules.py index e3acdcef..f6d19fe3 100644 --- a/src/core_modules/modules.py +++ b/src/core_modules/modules.py @@ -68,18 +68,14 @@ class Module(ModuleManager.BaseModule): 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") @utils.kwarg("help", "Reload a module") @utils.kwarg("permission", "reloadmodule") @utils.spec("!<name>wordlower") def reload(self, event): name = event["spec"][0] - self._catch(name, lambda: self._reload(name)) + self._catch(name, + lambda: self.bot.modules.try_reload_module(self.bot, name)) event["stdout"].write("Reloaded '%s'" % name) @utils.hook("received.command.reloadallmodules") |
