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

时间:2021-01-16 17:15:09

标签: python python-3.x discord.py discord.py-rewrite

我想向我的 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

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

1 个答案:

答案 0 :(得分:1)

代码

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 变量是消息在 内的冷却时间。

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

反应

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

错误处理程序

如果不是这种情况,我们会抛出一个错误,提示“冷却时间还没有到!”。

编辑

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