discord.py wait_for('reaction_add') 与直接消息的功能不同

时间:2021-04-15 20:16:54

标签: python discord discord.py

我的目标是让机器人对其自己的消息做出反应,然后如果发送原始命令的用户也做出反应,则在该频道中发送回复。现在,如果命令在服务器通道中发送,则该功能可以工作,但如果作为直接消息发送给机器人,它不会等待您的反应。通过在检查期间打印 user.idctx.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')

2 个答案:

答案 0 :(得分:1)

毕竟这是一个意图问题,与 this 帖子相同的权限问题。 在 intents = discord.Intents.default() 之后,您还需要为您的应用程序 here 启用服务器成员特权意图,并在您的代码中设置 intents.members = True 以授予机器人在 DM 中工作所需的权限

答案 1 :(得分:0)

可以查看反动id

onActivityResult()