首页 > 解决方案 > Discord py - 对带有冷却时间的消息做出反应(on_message)

问题描述

我想向我的不和谐机器人添加一个功能,它可以对特定消息做出反应,例如"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

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

标签: pythonpython-3.xdiscord.pydiscord.py-rewrite

解决方案


代码

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。我们没有变量globalcooldown因为我们不更新它。

反应

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

错误处理程序

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

编辑

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


推荐阅读