def add_cog(self, cls):
"""Tries to load a cog.
If not all dependencies are loaded, will defer until they are.
"""
desc = getattr(cls, PLUGIN_DESC, None)
if not desc:
log.debug("Loading cog %s", cls)
return super().add_cog(cls)
depends = [self.get_cog(name) for name in desc.depends]
if not all(depends):
self._dango_unloaded_cogs[cls.__name__] = cls
return
self._config.load()
cgroup = self._config.root.add_group(utils.snakify(cls.__name__))
depends.insert(0, cgroup)
if desc.pass_bot:
depends.insert(0, self)
try:
cog = cls(*depends)
except config.InvalidConfig:
raise
finally:
self._config.save()
super().add_cog(cog)
setattr(cog, COG_DESC, CogDesc(datetime.datetime.utcnow()))
log.debug("Loaded dcog %s.%s", cls.__module__, cls.__name__)
# Try loading previously unloaded plugins.
unloaded_plugins = self._dango_unloaded_cogs
self._dango_unloaded_cogs = {}
for plugin in unloaded_plugins.values():
self.add_cog(plugin)
评论列表
文章目录