Я пытаюсь реализовать бота для друга, в котором команда 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 самым последним сообщением пользователя, но это вернуло ту же проблему. Любая помощь будет оценена по достоинству!
mx == reaction.message
также должен быть частью оператора возврата.Фиксированный код:
Вы настоящий спасатель, большое вам спасибо! — person Joey; 01.12.2020