aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar jesopo2020-02-09 10:15:08 +0000
committerGravatar jesopo2020-02-09 10:17:40 +0000
commitf3ac154fe2bffb0148b12adb5ad9dce763383775 (patch)
tree44cbcaf6c734b2da14a2e28051f54ff6f99ddd31 /src
parentinsert new hooks at the start of their priority, to prevent duplicates on reload (diff)
signature
add ModuleManager.try_reload_module(), use it for !reloadmodule
Diffstat (limited to 'src')
-rw-r--r--src/ModuleManager.py14
-rw-r--r--src/core_modules/modules.py8
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")