aboutsummaryrefslogtreecommitdiff
path: root/ModuleManager.py
diff options
context:
space:
mode:
authorGravatar jesopo2016-03-29 12:56:58 +0100
committerGravatar jesopo2016-03-29 12:56:58 +0100
commitf943d63098a50746f4e470e403a991a4d9713030 (patch)
treedeeb98058917d0155227211d72576f0cbab28d3f /ModuleManager.py
parentInitial commit (diff)
first commit.
Diffstat (limited to 'ModuleManager.py')
-rw-r--r--ModuleManager.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/ModuleManager.py b/ModuleManager.py
new file mode 100644
index 00000000..3f6fa9fc
--- /dev/null
+++ b/ModuleManager.py
@@ -0,0 +1,37 @@
+import glob, imp, inspect, os
+
+class ModuleManager(object):
+ def __init__(self, bot, directory="modules"):
+ self.bot = bot
+ self.directory = directory
+ self.modules = {}
+ def list_modules(self):
+ return sorted(glob.glob(os.path.join(self.directory, "*.py")))
+ def load_module(self, filename):
+ name = os.path.basename(filename).rsplit(".py", 1)[0]
+ with open(filename) as module_file:
+ while True:
+ line = module_file.readline().strip()
+ if line and line.startswith("#--"):
+ # this is a hashflag
+ if line == "#--ignore":
+ # nope, ignore this module.
+ return None
+ else:
+ break
+ module = imp.load_source("bitbot_%s" % name, filename)
+ assert hasattr(module, "Module"
+ ), "module '%s' doesn't have a Module class."
+ assert inspect.isclass(module.Module
+ ), "module '%s' has a Module attribute but it is not a class."
+ module_object = module.Module(self.bot)
+ if not hasattr(module_object, "_name"):
+ module_object._name = name.title()
+ return module_object
+ def load_modules(self):
+ for filename in self.list_modules():
+ module = self.load_module(filename)
+ if module:
+ assert not module._name in self.modules, (
+ "module name '%s' attempted to be used twice.")
+ self.modules[module._name] = module