我知道对于单独的命令有一个命令冷却时间,但我想知道你是否可以一次限制每个命令,所以无论这个人使用什么命令,在使用下一个命令之前它都会有一个冷却时间。因此,如果我运行 !test
,我将无法再使用 !test1
5 秒。
答案 0 :(得分:1)
只需创建一个全局冷却实例
global_cooldown = commands.CooldownMapping.from_cooldown(1, 5.0, commands.BucketType.user) # Feel free to change it
然后添加一个检查,如果您想要所有命令的全局冷却时间:
@bot.check
async def cooldown_check(ctx):
bucket = global_cooldown.get_bucket(ctx.message)
retry_after = bucket.update_rate_limit()
if retry_after:
raise commands.CommandOnCooldown(bucket, retry_after)
return True
所有命令都将共享冷却时间。
如果你想要一个带有共享冷却时间的命令的装饰器
def shared_cooldown():
def predicate(ctx):
bucket = global_cooldown.get_bucket(ctx.message)
retry_after = bucket.update_rate_limit()
if retry_after:
raise commands.CommandOnCooldown(bucket, retry_after)
return True
return commands.check(predicate)
@shared_cooldown()
async def foo(ctx):
...
@shared_cooldown()
async def baz(ctx):
...
foo
和 baz
将共享冷却时间。