我想向我的 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
我希望我的需要是可以理解的。 如果您有任何问题,请随时提问。
答案 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
变量。