discord.py“ wait_for”命令中的反应

时间:2020-05-09 22:04:57

标签: python discord.py

我已经写了一个命令。当您执行此命令时,漫游器会将消息发送到特定通道。他对此消息添加了反应(顺便说一下)。到目前为止。但是现在,当有人单击此响应时,我希望该机器人做出响应。在这种情况下,他应该将消息发送到特定频道。但这是行不通的。也没有错误代码,这意味着它可以工作,只有他不发送消息。

@bot.command()
async def buy(ctx, choice):
    channel = bot.get_channel(705836078082424914)
    user = ctx.message.author
    vcrole1 = get(user.guild.roles, id=703562188224331777)
    messagechannel = ctx.message.channel.id
    if ctx.message.channel.id == 705146663135871106:
        if choice == '1':
            if any(role.id == 703562188224331777 for role in ctx.message.author.roles):
                await user.remove_roles(vcrole1)
                await ctx.send(
                    "not important message")
                messtag1 = await channel.send('not important') 
                await messtag1.delete(delay=None)

                embed = discord.Embed(color=0xe02522, title='not important title', description=
                'not important description')
                embed.set_footer(text='not important text')
                embed.timestamp = datetime.datetime.utcnow()

                mess1 = await channel.send(embed=embed)
                await mess1.add_reaction('<a:check:674039577882918931>')

                def check(reaction, user):

                    return reaction.message == mess1 and str(reaction.emoji) ==  '<a:check:674039577882918931>'

                await bot.wait_for('reaction_add', check=check)
                channeldone = bot.get_channel(705836078082424914)
                await channeldone.send('test')

没有错误消息。

1 个答案:

答案 0 :(得分:0)

您的reaction.message == mess1条件似乎正在返回False,对于这种情况的发生原因,我无法缩小范围,但是如果这样做,我会对其进行编辑。

克服此问题的一种方法是评估消息的ID:

return reaction.message.id == mess1.id and str(reaction.emoji) == '<a:check:674039577882918931>'

当机器人做出反应时,这将评估为True,因此,我建议添加另一个条件来检查用户是否做出了反应,如果那是您希望用户执行的操作:

return .... and user == ctx.author

参考: