diff --git a/discord/ext/commands/cooldowns.py b/discord/ext/commands/cooldowns.py index 38b2fab9e..4ca02b0df 100644 --- a/discord/ext/commands/cooldowns.py +++ b/discord/ext/commands/cooldowns.py @@ -238,9 +238,9 @@ class CooldownMapping: def create_bucket(self, message: Message) -> Cooldown: return self._cooldown.copy() # type: ignore - def get_bucket(self, message: Message, current: Optional[float] = None) -> Cooldown: + def get_bucket(self, message: Message, current: Optional[float] = None) -> Optional[Cooldown]: if self._type is BucketType.default: - return self._cooldown # type: ignore + return self._cooldown self._verify_cache_integrity(current) key = self._bucket_key(message) @@ -255,6 +255,8 @@ class CooldownMapping: def update_rate_limit(self, message: Message, current: Optional[float] = None, tokens: int = 1) -> Optional[float]: bucket = self.get_bucket(message, current) + if bucket is None: + return None return bucket.update_rate_limit(current, tokens=tokens) diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py index 7b57c7e4f..82022cae5 100644 --- a/discord/ext/commands/core.py +++ b/discord/ext/commands/core.py @@ -917,6 +917,8 @@ class Command(_BaseCommand, Generic[CogT, P, T]): return False bucket = self._buckets.get_bucket(ctx.message) + if bucket is None: + return False dt = ctx.message.edited_at or ctx.message.created_at current = dt.replace(tzinfo=datetime.timezone.utc).timestamp() return bucket.get_tokens(current) == 0 @@ -935,7 +937,8 @@ class Command(_BaseCommand, Generic[CogT, P, T]): """ if self._buckets.valid: bucket = self._buckets.get_bucket(ctx.message) - bucket.reset() + if bucket is not None: + bucket.reset() def get_cooldown_retry_after(self, ctx: Context[BotT], /) -> float: """Retrieves the amount of seconds before this command can be tried again. @@ -959,6 +962,8 @@ class Command(_BaseCommand, Generic[CogT, P, T]): """ if self._buckets.valid: bucket = self._buckets.get_bucket(ctx.message) + if bucket is None: + return 0.0 dt = ctx.message.edited_at or ctx.message.created_at current = dt.replace(tzinfo=datetime.timezone.utc).timestamp() return bucket.get_retry_after(current)