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.command
s。否则,您将必须有一些全局变量来存储最后 x 个先前消息的时间戳,并在收到消息时更新它。您可能想参考discord.py
实现中的命令的冷却方式。
【参考方案1】:
你应该添加:
@commands.cooldown(1, 30, commands.BucketType.user)
这将增加每位用户每 30 秒使用 1 次的速率限制。
您可以将 BucketType 更改为 default
、channel
或 server
以创建全局、通道或服务器速率限制,但您只能对一个命令有 1 个冷却时间。
这也会导致on_command_error
中出现CommandOnCooldown
异常
【讨论】:
我已经将该命令编码到我的 Discord 机器人中。它似乎不起作用,因为我的命令列在 client.event 而不是 client.commands 下以上是关于Discord Python:如何在事件下添加冷却命令的主要内容,如果未能解决你的问题,请参考以下文章