Skip to content

Commit f6c59ea

Browse files
committed
add ModuleManager.try_reload_module(), use it for !reloadmodule
1 parent 94197b3 commit f6c59ea

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

src/ModuleManager.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,20 @@ def _unload_module(self, loaded_module: LoadedModule):
402402
[loaded_module.name,
403403
", ".join([str(referrer) for referrer in referrers])])
404404

405+
def try_reload_module(self, bot: "IRCBot.Bot", name: str):
406+
loaded_module = self.modules.pop(name)
407+
loaded_module.module.on_pause()
408+
409+
new_definition = self.find_module(name)
410+
try:
411+
self.load_module(bot, new_definition)
412+
except:
413+
loaded_module.module.on_resume()
414+
self.modules[definition.name] = loaded_module
415+
raise
416+
417+
self._unload_module(loaded_module)
418+
405419
def try_reload_modules(self, bot: "IRCBot.Bot",
406420
whitelist: typing.List[str], blacklist: typing.List[str]):
407421
loadable, nonloadable = self._list_valid_modules(

src/core_modules/modules.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,14 @@ def unload(self, event):
6868
self._catch(name, lambda: self.bot.modules.unload_module(name))
6969
event["stdout"].write("Unloaded '%s'" % name)
7070

71-
def _reload(self, name):
72-
self.bot.modules.unload_module(name)
73-
definition = self._catch(name,
74-
lambda: self.bot.modules.find_module(name))
75-
self.bot.modules.load_module(self.bot, definition)
7671
@utils.hook("received.command.reloadmodule")
7772
@utils.kwarg("help", "Reload a module")
7873
@utils.kwarg("permission", "reloadmodule")
7974
@utils.spec("!<name>wordlower")
8075
def reload(self, event):
8176
name = event["spec"][0]
82-
self._catch(name, lambda: self._reload(name))
77+
self._catch(name,
78+
lambda: self.bot.modules.try_reload_module(self.bot, name))
8379
event["stdout"].write("Reloaded '%s'" % name)
8480

8581
@utils.hook("received.command.reloadallmodules")

0 commit comments

Comments
 (0)