Как мне заставить моего бота отвечать только на реакции на определенное сообщение? | discord.py

#python #python-3.x #discord.py #discord.py-rewrite

#python #python-3.x #discord.py #discord.py-переписать

Вопрос:

Я пытаюсь реализовать бота для друга, в котором команда «info» будет отображать информацию пользователя на одной странице встраивания, а на следующей будут отображаться любые символы, принадлежащие пользователю (читать через gspread).

 mx = await ctx.send(embed=contents[0])   
  await mx.add_reaction("◀")
  await mx.add_reaction("▶")

  def check(reaction, user):
    return user == ctx.author and str(reaction.emoji) in ["◀", "▶"]

  while True:
    try:
      reaction, user = await client.wait_for("reaction_add", timeout=20, check=check)
      if str(reaction.emoji) == "▶" and cur_page != pages:
        cur_page  = 1
        await mx.edit(embed=contents[cur_page - 1])
        await mx.remove_reaction(reaction, user)
      elif str(reaction.emoji) == "◀" and cur_page > 1:
        cur_page -= 1
        await mx.edit(embed=contents[cur_page - 1])
        await mx.remove_reaction(reaction, user)
      else:
        await mx.remove_reaction(reaction, user)
    except asyncio.TimeoutError:
      await mx.clear_reaction("◀")
      await mx.clear_reaction("▶")
      break 
 

Проблема в том, что всякий раз, когда пользователь отправляет более одной информационной команды, при реагировании это приводит к редактированию всех их сообщений, которые все еще активны, а не только того, на которое они реагируют. Я тоже пытался:

 def check(reaction, user):
    return user == ctx.author and str(reaction.emoji) in ["◀", "▶"]
    mx == reaction.message
 

Но это не решило проблему. Я также пробовал сбрасывать .json и заменять mx.id с самым последним сообщением пользователя, но это вернуло ту же проблему. Любая помощь будет оценена!

Ответ №1:

mx == reaction.message также должно быть частью инструкции return .

Исправлен код:

 def check(reaction, user):
    return user == ctx.author and str(reaction.emoji) in ["◀", "▶"] and mx == reaction.message
 

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

1. Вы — абсолютный спаситель, большое вам спасибо!