Как завершить взаимодействие с кнопкой Disnake
У меня есть прослушиватель on_button_click
, в котором прослушиваются все нажатия кнопок. Но у меня есть взаимодействие, редактирующее исходное сообщение, в котором при нажатии кнопок выскакивает "Ошибка взаимодействия". Я пробовал в конце участка кода вставлять return
, но не венчалось успехом.
Код (часть вырезана, так как код огромный):
@commands.Cog.listener()
async def on_button_click(self, inter: disnake.MessageInteraction):
button_id = inter.component.custom_id
message_inter: disnake.Message = inter.message
guild = inter.guild
author: disnake.User = inter.author
if button_id.startswith("leaderboard_"):
data = button_id.split("_")
page = int(data[2])
if data[1] == "balance":
data = then.get_balance_top(page)
next_page = False
if data["pages"] > 1 and page < data["pages"]:
next_page = True
prev_page = False
if page != 1:
prev_page = True
components = [
disnake.ui.Button(
style = disnake.ButtonStyle.gray,
emoji = Icon.back,
disabled = not prev_page,
custom_id = f"leaderboard_balance_{page}_b"
),
disnake.ui.Button(
style = disnake.ButtonStyle.gray,
emoji = Icon.refresh,
custom_id = f"leaderboard_balance_{page}_r"
),
disnake.ui.Button(
style = disnake.ButtonStyle.gray,
emoji = Icon.forward,
custom_id = f"leaderboard_balance_{page}_f",
disabled = not next_page
)
]
color = config.embed_color
message = disnake.Embed(
title = f"{Icon.money} Топ баланса сервера",
timestamp = inter.created_at,
color = color
)
await message_inter.edit(embed = message, components = components)
Ответы (1 шт):
Автор решения: ArkaDarkTime
→ Ссылка
Если вы хотите чтоб кнопка(и) была доступна всегда:\
- Если создавали кнопку(и) через View:
Укажите параметр timeout none:
view = disnake.ui.View(timeout=None)
Если отправили кнопки через components, то ошибки быть не должно
- Если вы хотите убрать сообщение "Ошибка взаимодействия", но оставить кнопку неактивной, то, насколько мне известно, это нельзя сделать.
Удачи, отпишитесь если нужно что-то еще!