From b871241eac9c54aad31376035cfed136ad2e6d14 Mon Sep 17 00:00:00 2001 From: Will Date: Sun, 18 Feb 2018 21:12:58 -0500 Subject: [PATCH] [V3 Core] Add optional async setup function (#1314) --- redbot/core/bot.py | 8 ++++++-- redbot/core/core_commands.py | 4 ++-- redbot/core/events.py | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) 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)