[commands] Add Command.cooldown_after_parsing keyword argument.
This controls the behaviour of cooldown execution order. This does not change the default behaviour however.
This commit is contained in:
parent
a1caaf8dcf
commit
c96642860c
@ -156,6 +156,10 @@ class Command(_BaseCommand):
|
|||||||
requirements are met (e.g. ``?foo a b c`` when only expecting ``a``
|
requirements are met (e.g. ``?foo a b c`` when only expecting ``a``
|
||||||
and ``b``). Otherwise :func:`.on_command_error` and local error handlers
|
and ``b``). Otherwise :func:`.on_command_error` and local error handlers
|
||||||
are called with :exc:`.TooManyArguments`. Defaults to ``True``.
|
are called with :exc:`.TooManyArguments`. Defaults to ``True``.
|
||||||
|
cooldown_after_parsing: :class:`bool`
|
||||||
|
If ``True``\, cooldown processing is done after argument parsing,
|
||||||
|
which calls converters. If ``False`` then cooldown processing is done
|
||||||
|
first and then the converters are called second. Defaults to ``False``.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __new__(cls, *args, **kwargs):
|
def __new__(cls, *args, **kwargs):
|
||||||
@ -222,6 +226,7 @@ class Command(_BaseCommand):
|
|||||||
self._buckets = CooldownMapping(cooldown)
|
self._buckets = CooldownMapping(cooldown)
|
||||||
|
|
||||||
self.ignore_extra = kwargs.get('ignore_extra', True)
|
self.ignore_extra = kwargs.get('ignore_extra', True)
|
||||||
|
self.cooldown_after_parsing = kwargs.get('cooldown_after_parsing', False)
|
||||||
self.cog = None
|
self.cog = None
|
||||||
|
|
||||||
# bandaid for the fact that sometimes parent can be the bot instance
|
# bandaid for the fact that sometimes parent can be the bot instance
|
||||||
@ -631,17 +636,24 @@ class Command(_BaseCommand):
|
|||||||
if hook is not None:
|
if hook is not None:
|
||||||
await hook(ctx)
|
await hook(ctx)
|
||||||
|
|
||||||
async def prepare(self, ctx):
|
def _prepare_cooldowns(self, ctx):
|
||||||
ctx.command = self
|
|
||||||
await self._verify_checks(ctx)
|
|
||||||
|
|
||||||
if self._buckets.valid:
|
if self._buckets.valid:
|
||||||
bucket = self._buckets.get_bucket(ctx.message)
|
bucket = self._buckets.get_bucket(ctx.message)
|
||||||
retry_after = bucket.update_rate_limit()
|
retry_after = bucket.update_rate_limit()
|
||||||
if retry_after:
|
if retry_after:
|
||||||
raise CommandOnCooldown(bucket, retry_after)
|
raise CommandOnCooldown(bucket, retry_after)
|
||||||
|
|
||||||
await self._parse_arguments(ctx)
|
async def prepare(self, ctx):
|
||||||
|
ctx.command = self
|
||||||
|
await self._verify_checks(ctx)
|
||||||
|
|
||||||
|
if self.cooldown_after_parsing:
|
||||||
|
await self._parse_arguments(ctx)
|
||||||
|
self._prepare_cooldowns(ctx)
|
||||||
|
else:
|
||||||
|
self._prepare_cooldowns(ctx)
|
||||||
|
await self._parse_arguments(ctx)
|
||||||
|
|
||||||
await self.call_before_hooks(ctx)
|
await self.call_before_hooks(ctx)
|
||||||
|
|
||||||
def is_on_cooldown(self, ctx):
|
def is_on_cooldown(self, ctx):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user