python - 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
我希望我需要什么是可以理解的。如果您有任何问题随时问。
解决方案
代码
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
变量创建一个数据库。
推荐阅读
- java - 创建 Kafka Producer 以发送列表中的每条消息
- ruby-on-rails - AWS ElasticBeanstalk + Ruby on Rails:Bundler `shared_helpers` 错误
- c - 将返回对象指针的函数强制转换为返回 void 指针的函数是否合法?
- python - 使用 openimageio 从 32 位 exr 转换为 8 位 tiff 图像的正确方法是什么
- sql - 反透视 JSON 数据字段的最佳方法
- javascript - 向服务人员发送消息以跳过等待
- java - 使用 Logger.java 指定日志的位置
- tree - Graphviz 中树形图的平行边
- python - 需要帮助:AttributeError:“SQLAlchemy”对象没有属性“模型”
- swift - MacOS、AppleScript 和 Git