是否可以每 x 秒将用户限制为 1 个命令?

时间:2021-05-09 08:34:12

标签: discord discord.py

我知道对于单独的命令有一个命令冷却时间,但我想知道你是否可以一次限制每个命令,所以无论这个人使用什么命令,在使用下一个命令之前它都会有一个冷却时间。因此,如果我运行 !test,我将无法再使用 !test1 5 秒。

1 个答案:

答案 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):
    ...

foobaz 将共享冷却时间。