X-Git-Url: https://jfr.im/git/erebus.git/blobdiff_plain/28d7d32f3ea101f458ffedc6b00c50b260140e71..63f741c2dfb3021753ac398f72abbd326dd92e70:/ctlmod.py diff --git a/ctlmod.py b/ctlmod.py index 25046aa..d5e6deb 100644 --- a/ctlmod.py +++ b/ctlmod.py @@ -1,3 +1,6 @@ +# Erebus IRC bot - Author: John Runyon +# module loading/unloading/tracking code + import sys import modlib @@ -5,13 +8,16 @@ modules = {} dependents = {} def isloaded(modname): return modname in modules -def modhas(modname, attname): return getattr(self.modules[modname], attname, None) is not None +def modhas(modname, attname): return getattr(modules[modname], attname, None) is not None def load(parent, modname): if not isloaded(modname): mod = __import__(modname) reload(mod) + if not hasattr(mod, 'modinfo'): + return modlib.error('no modinfo') + if 1 not in mod.modinfo['compatible']: return modlib.error('API-incompatible') @@ -42,19 +48,19 @@ def unload(parent, modname): unload(parent, dependent) for dep in dependents[modname]: dependents[dep].remove(modname) - self.modules[modname].modstop(parent) + return modules[modname].modstop(parent) else: return modlib.error('already unloaded') def reloadmod(parent, modname): if isloaded(modname): - if modhas(modname, 'modrestart'): self.modules[modname].modrestart(parent) - else: self.modules[modname].modstop(parent) + if modhas(modname, 'modrestart'): modules[modname].modrestart(parent) + else: modules[modname].modstop(parent) - reload(self.modules[modname]) + reload(modules[modname]) - if modhas(modname, 'modrestarted'): self.modules[modname].modrestarted(parent) - else: self.modules[modname].modstart(parent) + if modhas(modname, 'modrestarted'): modules[modname].modrestarted(parent) + else: modules[modname].modstart(parent) else: load(parent, modname)