Skip to content

Commit cdad18c

Browse files
feat: cooldown upgrades (#1323)
1 parent c2e49e6 commit cdad18c

File tree

5 files changed

+327
-92
lines changed

5 files changed

+327
-92
lines changed

interactions/__init__.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
T_co,
3939
utils,
4040
)
41+
from .client import const
4142
from .models import (
4243
ActionRow,
4344
ActiveVoiceState,
@@ -328,10 +329,11 @@
328329
WebhookMixin,
329330
WebhookTypes,
330331
WebSocketOPCode,
332+
SlidingWindowSystem,
333+
ExponentialBackoffSystem,
334+
LeakyBucketSystem,
335+
TokenBucketSystem,
331336
)
332-
from .api import events
333-
from . import ext
334-
from .client import const
335337

336338
__all__ = (
337339
"__api_version__",
@@ -413,6 +415,10 @@
413415
"cooldown",
414416
"Cooldown",
415417
"CooldownSystem",
418+
"SlidingWindowSystem",
419+
"ExponentialBackoffSystem",
420+
"LeakyBucketSystem",
421+
"TokenBucketSystem",
416422
"CustomEmoji",
417423
"CustomEmojiConverter",
418424
"DateTrigger",

interactions/models/__init__.py

+8
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,10 @@
212212
cooldown,
213213
Cooldown,
214214
CooldownSystem,
215+
SlidingWindowSystem,
216+
ExponentialBackoffSystem,
217+
LeakyBucketSystem,
218+
TokenBucketSystem,
215219
CustomEmojiConverter,
216220
DateTrigger,
217221
dm_only,
@@ -361,6 +365,10 @@
361365
"cooldown",
362366
"Cooldown",
363367
"CooldownSystem",
368+
"SlidingWindowSystem",
369+
"ExponentialBackoffSystem",
370+
"LeakyBucketSystem",
371+
"TokenBucketSystem",
364372
"CustomEmoji",
365373
"CustomEmojiConverter",
366374
"DateTrigger",

interactions/models/internal/__init__.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,16 @@
8686
UserConverter,
8787
VoiceChannelConverter,
8888
)
89-
from .cooldowns import Buckets, Cooldown, CooldownSystem, MaxConcurrency
89+
from .cooldowns import (
90+
Buckets,
91+
Cooldown,
92+
CooldownSystem,
93+
MaxConcurrency,
94+
SlidingWindowSystem,
95+
ExponentialBackoffSystem,
96+
LeakyBucketSystem,
97+
TokenBucketSystem,
98+
)
9099
from .listener import listen, Listener
91100
from .protocols import Converter
92101
from .extension import Extension
@@ -121,6 +130,10 @@
121130
"cooldown",
122131
"Cooldown",
123132
"CooldownSystem",
133+
"SlidingWindowSystem",
134+
"ExponentialBackoffSystem",
135+
"LeakyBucketSystem",
136+
"TokenBucketSystem",
124137
"CustomEmojiConverter",
125138
"DateTrigger",
126139
"dm_only",

interactions/models/internal/command.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from interactions.client.utils.misc_utils import get_parameters, get_object_name, maybe_coroutine
2424
from interactions.client.utils.serializer import no_export_meta
2525
from interactions.models.internal.callback import CallbackObject
26-
from interactions.models.internal.cooldowns import Cooldown, Buckets, MaxConcurrency
26+
from interactions.models.internal.cooldowns import Cooldown, Buckets, MaxConcurrency, CooldownSystem
2727
from interactions.models.internal.protocols import Converter
2828

2929
if TYPE_CHECKING:
@@ -283,19 +283,21 @@ def wrapper(coro: CommandT) -> CommandT:
283283
return wrapper
284284

285285

286-
def cooldown(bucket: Buckets, rate: int, interval: float) -> Callable[[CommandT], CommandT]:
286+
def cooldown(
287+
bucket: Buckets, rate: int, interval: float, cooldown_system: typing.Type[CooldownSystem] | None = None
288+
) -> Callable[[CommandT], CommandT]:
287289
"""
288290
Add a cooldown to a command.
289291
290292
Args:
291293
bucket: The bucket used to track cooldowns
292294
rate: How many commands may be ran per interval
293295
interval: How many seconds to wait for a cooldown
294-
296+
cooldown_system: The cooldown system to use
295297
"""
296298

297299
def wrapper(coro: CommandT) -> CommandT:
298-
cooldown_obj = Cooldown(bucket, rate, interval)
300+
cooldown_obj = Cooldown(bucket, rate, interval, cooldown_system=cooldown_system)
299301

300302
coro.cooldown = cooldown_obj
301303

0 commit comments

Comments
 (0)