diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py index 4f36ab9a9..248a0e143 100644 --- a/discord/ext/commands/core.py +++ b/discord/ext/commands/core.py @@ -781,14 +781,19 @@ class Command(_BaseCommand): if self._max_concurrency is not None: await self._max_concurrency.acquire(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) + try: + 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) + except: + if self._max_concurrency is not None: + await self._max_concurrency.release(ctx) + raise def is_on_cooldown(self, ctx): """Checks whether the command is currently on cooldown.