【发布时间】:2021-06-12 03:34:36
【问题描述】:
我有一个 discord.py 机器人,我想编写代码来执行以下操作:
- 当用户键入命令时,机器人应向用户发送 DM
- 然后,它应该对此消息添加反应(竖起大拇指和竖起大拇指)
- 最后,它应该等待用户对其中一种反应做出反应。
现在基于文档和以前的项目,我想出了这个添加反应的功能:
async def get_reacts(user, client, message, emojis, timeout=None):
for emoji in emojis:
await message.add_reaction(emoji)
try:
def check(reaction, reactor):
return reactor.id == user.id and reaction.emoji in emojis
reaction, user = await client.wait_for("reaction_add", check=check, timeout=timeout)
return reaction.emoji
except:
pass
此代码在服务器中运行良好,但当消息在 DM 中时,它会做一些特殊的事情。首先,它根本没有检测到用户的反应。当我在 check 函数中放置一个打印语句时,它告诉我它解析了一个反应,而那个反应是机器人本身对拇指向下的反应。当我对消息做出反应时,从未调用过检查函数。
我看到其他一些解决方案使用 Cog 侦听器来处理所有添加的反应,并使用全局消息列表。但是,这对我的机器人不起作用,因为它所做的一切都在一个命令中。此外,它会占用大量内存。这就是我改用client.wait_for 方法的原因。
在 DM 中使用 client.wait_for 有问题吗?我应该改用 Cog 监听器吗?还是我的代码有问题?任何帮助表示赞赏。提前致谢!
编辑: Intents enabled:无(我需要一个 Intent 来检查 DM 反应吗?)
编辑 2: 添加了默认意图,仍然是同样的问题
编辑 3:
我如何使用get_reacts 函数:
msg = await context.author.send("Message")
reaction = await get_reacts(context.author, self.client, msg, ["????", "????"])
【问题讨论】:
-
您启用了哪些意图?您能否也将其添加到问题中
-
@ŁukaszKwieciński 我编辑了问题
标签: python discord discord.py