как заставить бота отвечать только на add_reaction в том же сообщении?

#python #discord.py

#python #discord.py

Вопрос:

 def isAdmin(reaction, user):
    for i in admins:
        if user.id == i: return (str(reaction.emoji) == '👍' or str(reaction.emoji) == '👎')
try: reaction, user = await self.bot.wait_for('reaction_add', timeout=43200, check=isAdmin)
except asyncio.TimeoutError: await msg.edit(embed=embedEnd)
else:
    resign_channel = discord.utils.get(ctx.guild.channels, name="resignings") 
    if str(reaction.emoji) == '👍':
        print('{}: {} resigned {} {}.'.format(extCalls.timeNow('datetime'), ctx.channel.category.name, firstName, lastName))
        await msg.edit(embed=embedFin)
        await resign_channel.send(embed=embedConf)
    else: await msg.edit(embed=embedEnd)
  

Это мой код, чтобы заставить бота ждать реакции на msg . Но, по какой-то причине, когда у меня есть два msg (сообщения), ожидающих реакции одновременно, когда я реагирую на одно сообщение, оба срабатывают успешно, даже если я не отреагировал на второе сообщение. Это чрезвычайно проблематично для системы утверждения на основе администратора … кто-нибудь знает, почему это происходит или как это исправить?

Ответ №1:

Этот код действительно запутанный, но если вы ищете способ дождаться реакции только на одно сообщение, вам следует добавить материал в свою команду проверки, например:

 @bot.command(name="some_command")
async def sc(ctx):
    msg = await ctx.send("Some interesting message!")
    def check(reaction, user):
        return reaction.message.id == msg.id
    try:
        reaction, user = await bot.wait_for("reaction_add", check=check,timeout=30.0)
    except asyncio.TimeoutError:
        await ctx.send("timeout")
        return
    await ctx.send(f"You reacted {str(reaction)}")

  

Комментарии:

1. Большое вам спасибо! Ты сделал мой день: D