Move module black/white list to IRCBot, allow "safe" loading of all modules

This commit is contained in:
jesopo 2019-05-12 14:10:59 +01:00
parent bb073dcdce
commit 1c296826d7
3 changed files with 23 additions and 5 deletions

View file

@ -59,6 +59,13 @@ class Bot(object):
elif type == TriggerResult.Return: elif type == TriggerResult.Return:
return returned 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, def add_server(self, server_id: int, connect: bool = True,
connection_param_args: typing.Dict[str, str]={} connection_param_args: typing.Dict[str, str]={}
) -> IRCServer.Server: ) -> IRCServer.Server:

View file

@ -193,14 +193,26 @@ class ModuleManager(object):
return loaded_module return loaded_module
def load_modules(self, bot: "IRCBot.Bot", whitelist: typing.List[str]=[], 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(): for type, path in self.list_modules():
name = self._module_name(path) name = self._module_name(path)
if name in whitelist or (not whitelist and not name in blacklist): if name in whitelist or (not whitelist and not name in blacklist):
try: try:
self.load_module(bot, name) self.load_module(bot, name)
except ModuleWarning: 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): def unload_module(self, name: str):
if not name in self.modules: if not name in self.modules:

View file

@ -71,12 +71,11 @@ if args.module:
module.module.command_line(args.module_args) module.module.command_line(args.module_args)
sys.exit(0) sys.exit(0)
whitelist = bot.get_setting("module-whitelist", [])
blacklist = bot.get_setting("module-blacklist", [])
server_configs = bot.database.servers.get_all() server_configs = bot.database.servers.get_all()
if len(server_configs): if len(server_configs):
modules.load_modules(bot, whitelist=whitelist, blacklist=blacklist) bot.load_modules()
servers = [] servers = []
for server_id, alias in server_configs: for server_id, alias in server_configs: