diff --git a/redbot/core/bot.py b/redbot/core/bot.py index bf1d1fc7e..ce27164d5 100644 --- a/redbot/core/bot.py +++ b/redbot/core/bot.py @@ -172,7 +172,7 @@ class RedBase(BotBase, RpcMethodMixin): while pkg_name in curr_pkgs: curr_pkgs.remove(pkg_name) - def load_extension(self, spec: ModuleSpec): + async def load_extension(self, spec: ModuleSpec): name = spec.name.split('.')[-1] if name in self.extensions: return @@ -182,7 +182,11 @@ class RedBase(BotBase, RpcMethodMixin): del lib raise discord.ClientException('extension does not have a setup function') - lib.setup(self) + if asyncio.iscoroutinefunction(lib.setup): + await lib.setup(self) + else: + lib.setup(self) + self.extensions[name] = lib def unload_extension(self, name): diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py index 829353c97..a856205e4 100644 --- a/redbot/core/core_commands.py +++ b/redbot/core/core_commands.py @@ -226,7 +226,7 @@ class Core: return try: - ctx.bot.load_extension(spec) + await ctx.bot.load_extension(spec) except Exception as e: log.exception("Package loading failed", exc_info=e) await ctx.send(_("Failed to load package. Check your console or " @@ -261,7 +261,7 @@ class Core: try: self.cleanup_and_refresh_modules(spec.name) - ctx.bot.load_extension(spec) + await ctx.bot.load_extension(spec) except Exception as e: log.exception("Package reloading failed", exc_info=e) await ctx.send(_("Failed to reload package. Check your console or " diff --git a/redbot/core/events.py b/redbot/core/events.py index 920c5eb18..dda5b8125 100644 --- a/redbot/core/events.py +++ b/redbot/core/events.py @@ -52,7 +52,7 @@ def init_events(bot, cli_flags): for package in packages: try: spec = await bot.cog_mgr.find_cog(package) - bot.load_extension(spec) + await bot.load_extension(spec) except Exception as e: log.exception("Failed to load package {}".format(package), exc_info=e)