Discord.py 命令冷却

时间:2021-02-11 18:52:28

标签: python discord.py

我正在制作一个 discord.py 机器人,该机器人将拥有“revive”命令。该命令将发送 2 个 ping 以恢复聊天。我已经设置为只有拥有 MENTION EVERYONE 权限的人才能使用该命令,但当成员使用该命令时,冷却时间开始。那么有没有办法让成员不影响冷却时间?

@client.command()
@commands.cooldown(1.0, 3600.0, commands.BucketType.guild) 
async def revive(ctx):
    if ctx.author.guild_permissions.mention_everyone:
        await ctx.send(
            "I shall revive the CHAT, <@800171737832226827> <@&800168050077728808>"
        )
    else:
        embed = discord.Embed(title=None,
                              decription=None,
                              color=discord.Colour.blue())
        embed.add_field(
            name="Error!",
            value=
            "You do not have the permissions to do this! You need the permission: **Mention Everyone**"
        )
        await ctx.send(embed=embed)```


 

1 个答案:

答案 0 :(得分:0)

它会触发冷却时间,因为当普通成员使用该函数时,它实际上会进入该函数并开始执行其中编码的操作。

为避免触发冷却,您需要做的是添加检查以确保调用命令的用户具有正确的权限,但将其作为装饰器传递,在函数实际运行之前对其进行评估,因为它< em>装饰它。

在这种情况下,您需要在代码中添加 @commands.has_permissions(mention_everyone=True)

它应该是这样的:

@client.command()
@commands.has_permissions(mention_everyone=True)
@commands.cooldown(1.0, 3600.0, commands.BucketType.guild) 
async def revive(ctx):
    await ctx.send(
        "I shall revive the CHAT, <@800171737832226827> <@&800168050077728808>"
    )