Discord Python:如何在事件下添加冷却命令

Posted

技术标签:

【中文标题】Discord Python:如何在事件下添加冷却命令【英文标题】:Discord Python: How to add cooldown command under an event 【发布时间】:2019-02-19 18:38:39 【问题描述】:

我看过其他关于如何制作冷却命令的帖子。一个答案正是我想要的,但这只是因为我做了他们所做的。现在我想正式将命令实施到我的 Discord 机器人中。我注意到我测试的冷却命令只在@client.command 而不是@client.event 下工作(客户端是对象)。 我的所有命令都列在事件事物下,所以我需要有关如何添加冷却命令而无需重写很多东西的帮助。到目前为止,这就是我对冷却命令的了解。

from discord.ext.commands import Bot
from discord.ext import commands

client = Bot(command_prefix="?")

@client.event
@command.cooldown(5, 30, commands.BucketType.user)
async def on_message(message):
    if message.content.upper().startswith("?HELLO"):
        msg = 'Hello 0.author.mention :banana:'.format(message)
        await client.send_message(message.channel, msg)

@on_message.error
async def on_message_error(self, error, ctx):
    if isinstance(error, commands.CommandOnCooldown):
    msg = ':exclamation: This command is on cooldown, please try again in :.2fs :exclamation:'.format(error.retry_after)
    await self.send_message(ctx.message.channel, msg)

我只是以一个命令为例来说明我有什么样的格式。我收到了@on_message.error 的错误(这是一个错误的尝试,所以我没想到它会起作用)。我想在连续 5 次尝试相同的命令后设置一个 30 秒的冷却时间,并设置一个错误消息让机器人响应计时器。考虑到我在制作这个机器人方面已经走了多远,我真的不想为了一个命令的工作而重写整个事情:/

【问题讨论】:

如果你想使用commands功能,你必须使用commands。此外,您拥有的 cooldown 装饰器将允许用户在任何 30 秒内调用命令不超过 5 次。 我明白了。我不介意使用与现在完全不同的冷却命令。这只是我在另一篇文章中测试的一个命令。 无论如何,我建议将您的命令重构为commands.commands。否则,您将必须有一些全局变量来存储最后 x 个先前消息的时间戳,并在收到消息时更新它。您可能想参考discord.py 实现中的命令的冷却方式。 【参考方案1】:

你应该添加:

@commands.cooldown(1, 30, commands.BucketType.user)

这将增加每位用户每 30 秒使用 1 次的速率限制。

您可以将 BucketType 更改为 defaultchannelserver 以创建全局、通道或服务器速率限制,但您只能对一个命令有 1 个冷却时间。

这也会导致on_command_error 中出现CommandOnCooldown 异常

【讨论】:

我已经将该命令编码到我的 Discord 机器人中。它似乎不起作用,因为我的命令列在 client.event 而不是 client.commands 下

以上是关于Discord Python:如何在事件下添加冷却命令的主要内容,如果未能解决你的问题,请参考以下文章

discord.py 中 on_message 的冷却时间

我如何为 client = discord.Client() 使用 discordpy 冷却命令 [关闭]

Discord.js 命令冷却时间

用于检查每个冷却时间的冷却命令 (Discord.js)

命令冷却 discord.js

Discord.js 命令冷却时间 + 剩余时间