discord.py wait_for('reaction_add') 与直接消息的功能不同
Posted
技术标签:
【中文标题】discord.py wait_for(\'reaction_add\') 与直接消息的功能不同【英文标题】:discord.py wait_for('reaction_add') functioning differently with direct messagesdiscord.py wait_for('reaction_add') 与直接消息的功能不同 【发布时间】:2021-07-10 21:44:23 【问题描述】:我的目标是让机器人对自己的消息做出反应,然后如果发送原始命令的用户也做出反应,则在该频道中发送回复。现在,如果命令是在服务器通道中发送的,则该功能可以工作,但如果作为直接消息发送给机器人,它不会等待您的反应。通过在检查过程中打印user.id
和ctx.author.id
的值,我注意到机器人有时会检查它自己的反应(user.id
返回机器人的ID)。我不确定这是否相关,因为无论如何它都会等待服务器频道中正确用户的反应。
wait_for()
和 on_reaction_add
的 API 文档
我希望此功能在服务器中工作并将消息直接发送到机器人,我错过了什么吗?谢谢!
@bot.command()
async def hello(ctx):
msg = await ctx.send(f'Hi ctx.author.mention')
await msg.add_reaction('✅')
def check(reaction, user):
print(user.id, ctx.author.id)
return reaction.message.id == msg.id and user.id == ctx.author.id and str(reaction.emoji) == '✅'
try:
reaction, user = await bot.wait_for('reaction_add', timeout=30.0, check=check)
except asyncio.TimeoutError:
pass
else:
await ctx.send('success')
【问题讨论】:
你确定它不起作用吗?我无法重现该问题。您可以将用于等待回复的代码放入 DM 中吗? 感谢格式化帮助 - 它在 try 下的 hello 函数中:reaction, user = await bot.wait_for('reaction_add', timeout=30.0, check=check) 您正在等待调用命令的人对发送的消息做出反应,如果我对随机消息(例如在 DM 中)做出反应,它将不起作用,它必须是机器人发送的那个. 不是随机消息,在 DM 中调用命令,并对机器人回复的消息做出反应并做出反应。 它对我有用,你启用了哪些意图? 【参考方案1】:毕竟这是一个意图问题,与this 帖子相同的权限问题。
在intents = discord.Intents.default()
之后,您还需要为您的应用程序here 启用服务器成员特权意图并在您的代码中设置intents.members = True
以赋予机器人所需的权限,使其在DMs 中工作
【讨论】:
【参考方案2】:你可以查看反动id
def check(reaction, user):
# let the user id str
print(str(reaction.author.id), str(ctx.author.id))
return reaction.message.id == msg.id and reaction.author.id == ctx.author.id and str(reaction.emoji) == '✅'
try:
# wait for the reactions
reaction, user = await bot.wait_for('reaction_add', timeout=30.0, check=check)
except asyncio.TimeoutError as error:
pass
else:
# except an error
await ctx.send('success')
【讨论】:
以上是关于discord.py wait_for('reaction_add') 与直接消息的功能不同的主要内容,如果未能解决你的问题,请参考以下文章
discord.py 如何使用 wait_for 等待作者消息?
在 discord.py wait_for 上带有 check() 的 TypeError
discord.py wait_for message... 如何取消息内容和写消息的人?