python - on_message 等待用户对消息做出反应或超时,然后机器人再次发送另一条带有反应的消息
问题描述
如果你 DM 机器人,它会发送一条消息并添加一些反应,然后它会等待用户添加反应,然后再做某事。
我的问题是,如果用户再次 DM 机器人,它会发送另一条消息,如果用户对任何机器人消息做出反应,机器人会根据你从机器人收到的消息数量做两次或更多的事情。
如果当前有一条带有反应的消息,是否有办法让机器人不发送另一条消息,并等待用户先做出反应,然后机器人才能再次发送另一条带有反应的消息?谢谢。
async def on_message(self, message):
if message.author.bot:
return
if isinstance(message.channel, discord.DMChannel):
dm = await message.channel.send('test')
await dm.add_reaction("1️⃣")
def check(reaction, user):
return user == message.author and str(reaction.emoji) in ["1️⃣"]
while True:
try:
reaction, user = await self.client.wait_for("reaction_add", timeout=15, check=check)
if str(reaction.emoji) == "1️⃣":
# do something here
except asyncio.TimeoutError:
await dm.delete()
break
解决方案
通过为每条消息建立一个数据库来修复它。感谢那些试图提供帮助的人!
推荐阅读
- javascript - 笑话。测试在一个函数中执行 POST 和 fetch 的异步函数
- mysql - 在 WHERE 子句中使用来自 SELECT 的 COALESCE 的别名
- c++ - 现代 Cpp 项目中的 I18n
- java - 查询具有特定条件的 Spring DATA
- laravel - Laravel:更新作曲家错误并创建项目
- android - 使用 Gluon-mobile ShareService 从 android 上的应用程序打开 PDF 时出现异常
- twig - ServiceNotFoundException:依赖于不存在的服务“twig”
- javascript - 如何将通过 javascript 编码为 base64 字符串的文件转换为 Ruby 文件对象?
- go - 构建Android时在golang中读取Makefile变量
- ansible - Ansible在dict中组合数组