Код делает то, что должен делать, но после каждого нажатия кнопки он говорит: «Это взаимодействие не удалось». Нажатие кнопки редактирует вставку, чтобы заменить ее на другую. Как мне избавиться от сообщения об ошибке взаимодействия после нажатия кнопки?
Проблема: https://i.stack.imgur.com/i4dTd.png
Код, полученный от: https://github.com/elixss/YouTube/ blob / main / source / buttons.py
Вот код:
@bot.group(invoke_without_command=True)
async def help(ctx):
# buttons
one = Button(style=1, label="Commands", id="em1")
two = Button(style=1, label="Depression", id="em2")
three = Button(style=1, label="Moderator", id="em3")
four = Button(style=1, label="Language", id="em4")
# embeds
em1 = Embed(title="Commands Plugin",color=0x5865F2)
em2 = Embed(title="Depression Plugin", description="placeholder", color=0x5865F2)
em3 = Embed(title="Moderator Plugin", description="placeholder", color=0x5865F2)
em4 = Embed(title="Language Plugin", description="placeholder", color=0x5865F2)
# main help embed
help_embed = Embed(description="> **Help Module**nPress on any button to view the commands for that selected plugin.",
color=discord.Color.random())
# buttons to embeds
buttons = {
"em1": em1,
"em2": em2,
"em3": em3,
"em4": em4
}
msg = await ctx.send(embed=help_embed,
components=[[one, two, three, four]])
while True:
event = await bot.wait_for("button_click", timeout=60.0)
if event.channel is not ctx.channel:
return
if event.channel == ctx.channel:
response = buttons.get(event.component.id)
await msg.edit(embed=response)
if response is None:
await event.channel.send("error, try again.")
2 ответа
Лучший ответ
Как сказал Элиас, вы должны реагировать на взаимодействия, иначе будет отображаться сообщение «Это взаимодействие не удалось», но не с обычным ctx.send(), а с (в вашем случае)
await event.respond(type=4, message="Responded!")
Если вы не хотите отправлять сообщение в ответ на нажатие кнопки или выбор в выборе, вы можете просто использовать type=6 без сообщения:
await event.respond(type=6)
Дополнительные типы см. В документация.
1
Chuaat
6 Сен 2021 в 18:48
Лучший способ сделать это — либо удалить все кнопки после нажатия, либо добавить время восстановления, которое автоматически удалит кнопки через определенное время.
В вашей ситуации это будет выглядеть примерно так:
msg = await ctx.send(embed=help_embed, components=[[one, two, three, four]])
try:
res = await client.wait_for("button_click", timeout = 60)
except asyncio.TimeoutError:
await msg.edit(components = []) #removes buttons from message
else:
if res.author == message.author:
#when button is clicked
await msg.edit(components = [])
Это также предотвращает ограничение скорости, поэтому у вас нет кнопок, постоянно ожидающих ответа.
0
Larg Ank
7 Сен 2021 в 00:22
Create an account to follow your favorite communities and start taking part in conversations.
r/Discord_Bots
I get it with every single interactable button on my bot (they all work). Defer works but it’s not ideal with the annoying extra message sent.
level 1
if you are getting an error message, something is not working properly.
you should try to understand the error message (that you haven’t posted), and figure out what’s wrong
level 2
It’s the message you get when interacting with a discord component button. «This interaction failed» happens every single time on multiple buttons despite everything working as expected.
Which probably means it’s expecting a special response i haven’t given it to signal the interaction has worked, I’m not sure what that is. Deferring works to stop the message though.
level 1
Does your code receive it? The error appears if you do not respond to the interaction within 3 seconds. Defer does this job, for example. Others include stuff like interaction.response.pong or interaction.response.edit_message do these too.
Also note that discord-py is no longer maintained
level 2
Response isn’t a valid attribute. Respond is, but respond doesn’t have the attribute pong or edit_message.
Defer does work, but i don’t want to use it because of the message it sends.
level 1
Having the same issue. My buttons edit an embed and it does what I want it to do (edit the embed page) but every time I click one of the buttons, I get the «this interaction failed»
About Community
![]()
Non-official subreddit for Discord bot developement
Дискорд – популярная бесплатная площадка для общения между пользователями. Программу используют те, кто играет в различные игры – дискорд позволяет корректировать действия и общаться в режиме реального времени, что очень удобно. Администрация на тематических серверах может устанавливать специальные музыкальные боты для трансляции музыки. По ряду причин, такие боты могут лагать и плохо работать на сервере. Чтобы наладить их функционирование, следует выполнить несколько простых действий.

Проблема с местоположением сервера
Проблема трансляции музыки с помощью бота в Дискорде связана с местоположением. По ряду причин из – за этого могут не транслироваться музыкальные композиции, или же болт вовсе перестанет работать. Исправляется это изменением местоположение сервера.
Если лагает музыкальный бот в дискорде, то причиной для этого может стать то, что программа автоматически выбирает точку подключения при создании сервера. Если она подключилась к той региональной точке, с которой создан сервер, то программа будет нормально функционировать. Но из – за возникающих сбоев программа может подключиться к другой региональной точке, из – за чего возникнет сильная задержка, из – за которой невозможно нормально смотреть видео или слушать музыку. Соответственно, это вредит и работе бота.
Сделать это можно, следуя этой инструкции:
- Войти в программу Дискорд.
- Открыть вкладку «Параметры».
- Выбрать «Настройки сервера».
- Перейти в «Обзор».
- Откроется окно со значок с флагом. Нужно выбрать функцию «Изменить».
- Откроется окно «Выберите регшион сервера». Пользователю придется выбрать из списка регион, где он находится.
- После этого нужно сохранить изменения.

Выполнив эти действия, у пользователя изменится местоположение сервера. Если местоположение изначально выбрано правильно, но музыкальный бот отказывается работать, некоторые пользователи советуют изменить местоположение. К примеру, сервер привязан к Росии по умолчанию, но его местоположение нужно изменить на США. После этого бот будет нормально функционировать.
Лагает сам бот — пробуем переустановить
Иногда проблема сбоев в работе бота заключается в его некорректной работе. Это можно исправить, переустанови музыкального бота.
Если лагает бот с музыкой в дискорде, нужно:
- Войти в приложение, перейти на сервер.
- Найти нужный бот в списке.
- Щелкнув по нему правой кнопкой мыши и выбрать «Удалить».
- Нужно выбрать новый бот, и установить его.
- Установив бота на сервер он будет показан как новый пользователь. Администратору потребуется выдать роль роботу, если та не определилась автоматически.
- Ввести команду (для каждого бота она своя) для прослушивания музыки.

Если бот не играет музыку, то его перестановка может решить проблемы с зависанием.
Лагает программа Дискорд — ждем окончания сбоя
Иногда причиной сбоя в работе бота является проблема в самом Дискорде. Причиной для появления сбоя может стать низкая скорость Интернет – соединения или же неверные настройки самого Дискорда.
Что делать в такой если бот не проигрывает музыку в Дискорде:
- Подождать или перезапустить программу. В большинстве случаев, сбой в Дискорде бывает временным.
- Проверить Интернет – соединение. Из – за никой скорости могут возникать сбои в работе.
- Переустановить Дискорд. Если же лаги не исчезают, а бот отказывается нормально работать, должна помочь перестановка программы.
- В некоторых случаях рекомендуется проверить, обновлены ли драйверы звуковой карты.
Исправить зависание Дискорда можно в кратчайшие сроки. Иногда даже не требуется ничего делать, а просто подождать, когда программа начнет нормально функционировать.
Дискорд – удобная платформа для общения, отличающаяся высокой оптимизацией. Однако, без сбоев и лагов в работе программы не удается обойтись. К счастью, устранить проблему с зависанием музыкального бота можно за считанные минуты.
@bot.command()
async def coin(ctx):
await ctx.channel.send(
"This is our **bet** coin : <:coiner:902807543569584158>",
components = [
Button(label = "Animated coin")
]
)
while True:
interaction = await bot.wait_for("button_click", check = lambda i: i.component.label.startswith("Animated"))
await interaction.respond(content = "<a:coinanimated:9028075435695848902>")
When I open discord and try to press button, it will write «this interaction failed» error
asked Oct 27, 2021 at 8:43
2
SOLVED
pip uninstall discord.py
pip install discord.py=1.7.3
Then just use same code
answered Oct 28, 2021 at 18:35
@bot.command()
async def coin(ctx):
await ctx.channel.send(
"This is our **bet** coin : <:coiner:902807543569584158>",
components = [
Button(label = "Animated coin")
]
)
while True:
interaction = await bot.wait_for("button_click", check = lambda i: i.component.label.startswith("Animated"))
await interaction.respond(content = "<a:coinanimated:9028075435695848902>")
When I open discord and try to press button, it will write «this interaction failed» error
asked Oct 27, 2021 at 8:43
2
SOLVED
pip uninstall discord.py
pip install discord.py=1.7.3
Then just use same code
answered Oct 28, 2021 at 18:35