aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar jesopo2019-05-12 14:10:59 +0100
committerGravatar jesopo2019-05-12 14:10:59 +0100
commit1c296826d7e20def21ec577c71590dee4bb1c0e1 (patch)
tree99bfbc84a4fcd8f31541664fca4cd187c0db1cd7 /src
parentHandle ERR_SASLALREADY (diff)
signature
Move module black/white list to IRCBot, allow "safe" loading of all modules
Diffstat (limited to 'src')
-rw-r--r--src/IRCBot.py7
-rw-r--r--src/ModuleManager.py16
2 files changed, 21 insertions, 2 deletions
diff --git a/src/IRCBot.py b/src/IRCBot.py
index 8879b328..a3cc84c1 100644
--- a/src/IRCBot.py
+++ b/src/IRCBot.py
@@ -59,6 +59,13 @@ class Bot(object):
elif type == TriggerResult.Return:
return returned
+ def load_modules(self, safe: bool=False
+ ) -> typing.Tuple[typing.List[str], typing.List[str]]:
+ whitelist = self.get_setting("module-whitelist", [])
+ blacklist = self.get_setting("module-blacklist", [])
+ return self.modules.load_modules(self, whitelist=whitelist,
+ blacklist=blacklist, safe=safe)
+
def add_server(self, server_id: int, connect: bool = True,
connection_param_args: typing.Dict[str, str]={}
) -> IRCServer.Server:
diff --git a/src/ModuleManager.py b/src/ModuleManager.py
index f764b445..49d00772 100644
--- a/src/ModuleManager.py
+++ b/src/ModuleManager.py
@@ -193,14 +193,26 @@ class ModuleManager(object):
return loaded_module
def load_modules(self, bot: "IRCBot.Bot", whitelist: typing.List[str]=[],
- blacklist: typing.List[str]=[]):
+ blacklist: typing.List[str]=[], safe: bool=False
+ ) -> typing.Tuple[typing.List[str], typing.List[str]]:
+ fail = []
+ success = []
for type, path in self.list_modules():
name = self._module_name(path)
if name in whitelist or (not whitelist and not name in blacklist):
try:
self.load_module(bot, name)
except ModuleWarning:
- pass
+ fail.append(name)
+ continue
+ except Exception as e:
+ if safe:
+ fail.append(name)
+ continue
+ else:
+ raise
+ success.append(name)
+ return success, fail
def unload_module(self, name: str):
if not name in self.modules: