From 967d43c35b4d4c288d47a9eb9d374bef34292f1d Mon Sep 17 00:00:00 2001 From: Rapptz Date: Sat, 17 Sep 2016 15:01:56 -0400 Subject: [PATCH] [commands] Allow coroutine functions in Bot.command_prefix --- discord/ext/commands/bot.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/discord/ext/commands/bot.py b/discord/ext/commands/bot.py index d9e02f1fe..fd7881821 100644 --- a/discord/ext/commands/bot.py +++ b/discord/ext/commands/bot.py @@ -161,7 +161,8 @@ class Bot(GroupMixin, discord.Client): indicate what the prefix should be, or a callable that takes in the bot as its first parameter and :class:`discord.Message` as its second parameter and returns the prefix. This is to facilitate "dynamic" - command prefixes. + command prefixes. This callable can be either a regular function or + a coroutine. The command prefix could also be a list or a tuple indicating that multiple checks for the prefix should be used and the first one to @@ -234,10 +235,14 @@ class Bot(GroupMixin, discord.Client): # internal helpers + @asyncio.coroutine def _get_prefix(self, message): prefix = self.command_prefix if callable(prefix): - return prefix(self, message) + ret = prefix(self, message) + if asyncio.iscoroutine(ret): + ret = yield from ret + return ret else: return prefix @@ -787,7 +792,7 @@ class Bot(GroupMixin, discord.Client): if self._skip_check(message.author, self.user): return - prefix = self._get_prefix(message) + prefix = yield from self._get_prefix(message) invoked_prefix = prefix if not isinstance(prefix, (tuple, list)):