Discord py - 对带有冷却时间的消息作出反应 (on_message)

Discord py - react to a message with cooldown (on_message)

我想为我的 discord 机器人添加一项功能,它可以对 "react to me" 等特定消息做出反应。但只有 5 分钟一次。我怎样才能在 on_message 事件中为它设置冷却时间?

示例:

Today, 15:00 - User#0001: React to me, bot
-- BOT REACTS TO MESSAGE
Today, 15:01 - User#0001: React to me!!
-- BOT DOESNT REACT, CAUSE OF COOLDOWN
Today, 15:06 - User#0001: React to me
-- BOT REACTS TO MESSAGE

我希望我需要的是可以理解的。 如果您有任何问题,请随时提出。

代码

last_used = 0
cooldown = 300
@client.event
async def on_message(message):
    global last_used
    if message.content == "react to me":
        if time.time() > last_used+cooldown:
            await message.add_reaction("")
            last_used = time.time()
        else:
            await message.channel.send("You are on a cooldown!")

正在导入

我们导入 time 模块(这是 python 内置的,所以不需要 pip install 它)所以我们可以跟踪当前时间。

变量

last_used 变量是上次使用“对我做出反应”消息的时间。我们可以在第一次使用时将其默认为 0。

cooldown变量是消息的冷却时间

因为这不在 class 中,我们必须 global last_used 变量。我们不 global cooldown 变量,因为我们不更新它。

反应中

我们先检查消息内容是否等于“react to me”。如果是,那么我们会做一些快速计算。如果当前时间(我们使用 time.time() 来获取时间)晚于 last_used+cooldown(这将检查冷却计时器是否已启动),那么我们做出反应,并将 last_used 设置为等于到当前时间。

错误处理程序

如果不是这种情况,我们会抛出一个错误,提示“冷却计时器尚未启动!”。

编辑

这个变量将用于你所有的用户,所以如果你想扩展到多个服务器,我建议你为所有的用户创建一个数据库last_used变量。