Всем привет! У меня тут вот ошибка взаимодействия. Использую библиотеку DiscordComponents а именно SelectMenu.
Так вот, когда я выбираю в меню какую то категорию, то он мне выводит сообщение, а когда я хочу поменять данную категорию, мне выводит «Ошибка взаимодействия»
Код:
@bot.command()
async def help(ctx):
home = discord.Embed(
title=’ Help’,
description=’Чтобы получить справку по категориям команд бота используйте меню, которое есть под сообщением.nn’
‘Не работает меню? Пропишите «s.help Модерация/Рейтинг/Активности/Экономика/Информация/Развлечения/Прочее«’,
colour=discord.Color.purple()
)
home.set_footer(icon_url=ctx.author.avatar_url, text=f»Запрошенно от {ctx.author}»)
await ctx.send(
embed=home,
components=[
Select(
placeholder=»Выберите категорию»,
options=[
SelectOption(label=»Модерация», value=»Модерация»),
SelectOption(label=»Рейтинг», value=»Рейтинг»),
SelectOption(label=»Активности», value=»Активности»),
SelectOption(label=»Экономика», value=»Экономика»),
SelectOption(label=»Информация», value=»Информация»),
SelectOption(label=»Развлечения», value=»Развлечения»),
SelectOption(label=»Прочее», value=»Прочее»)
]
)
]
)
interaction = await bot.wait_for(«select_option»)
selected = interaction.values[0]
if selected == «Модерация»:
moderation = discord.Embed(
title=» Модерация»,
description=f»«{p}ban [участник] [причина]« — Заблокировать участникаn «{p}kick [участник]« — Выгнать участникаn»
f»«{p}mute [участник]« — Заблокировать чат участникуn«{p}unmute [участник]« — Разблокировать чат участникуn»
f»«{p}warn [участник]« — Выдать предупреждение участникуn«{p}unwarn [участник]« — Убрать предупреждение у участникаn»
f»«{p}resetwarns [участник]« — Убрать все предупреждения участникаn«{p}clear [кол-во]« — Очистить чатn»
f»«{p}warns [участник]« — Посмотреть свои предупреждение/предупреждения участникаn»
f»«{p}antilink on/off« — Включить/выключить антилинк системуn«{p}lvlsystem on/off« — Включить/выключить систему уровней»
f»«n{p}addrole [роль] [цена]« — Добавить роль в магазинn«{p}removerole [роль]« — Удалить роль из магазинаn»
f»«{p}set« — Настройка»,
colour=discord.Color.purple()
)
moderation.set_footer(icon_url=ctx.author.avatar_url, text=f»Запрошенно от {ctx.author}»)
await interaction.edit_origin(embed=moderation)
elif selected == «Рейтинг»:
rating = discord.Embed(
title=» Рейтинг»,
description=f»«{p}leaderboards balance/level« — Топ по балансу/уровню»,
colour=discord.Color.purple()
)
rating.set_footer(icon_url=ctx.author.avatar_url, text=f»Запрошенно от {ctx.author}»)
await interaction.edit_origin(embed=rating)
elif selected == «Активности»:
activities = discord.Embed(
title=» Активности»,
description=f»«{p}youtube« — YouTube Togethern«{p}poker« — Покерn«{p}betroyal« — BetRoyal.ion»
f»«{p}fishington« — Fishington.ion«{p}chess« — Шахматы»,
colour=discord.Color.purple()
)
activities.set_footer(icon_url=ctx.author.avatar_url, text=f»Запрошенно от {ctx.author}»)
await interaction.edit_origin(embed=activities)
elif selected == «Экономика»:
economy = discord.Embed(
title=» Экономика»,
description=f»«{p}balance [участник]« — Показывает баланс участникаn«{p}tobank [сумма]« — Положить деньги в банкn»
f»«{p}withdraw [сумма]« — Обналичить деньги с банкаn«{p}beg« — Попрошайничать монетыn»
f»«{p}hunt« — Сходить на охотуn«{p}fish« — Сходить на рыбалкуn«{p}work« — Работатьn»
f»«{p}daily« — Ежедневная наградаn«{p}weekly« — Еженедельная наградаn«{p}reward« — Наградаn»
f»«{p}slots [сумма]« — Казиноn«{p}roulette [цвет] [сумма]« — Рулеткаn«{p}shop« — Магазинn«{p}buy [категория] [предмет]« — Купить что-то из магазинаn»
f»«{p}sell [категория] [предмет]« — Продать имуществоn«{p}buyrole [роль]« — Купить рольn«{p}roleshop« — Магазин ролейn»
f»«{p}addmoney [участник] [cумма]« — Начислить деньги участникуn«{p}takemoney [участник] [cумма]« — Отнять деньги у участникаn»
f»«{p}bonus« — Бонус для **Premium** пользователей»,
colour=discord.Color.purple()
)
economy.set_footer(icon_url=ctx.author.avatar_url, text=f»Запрошенно от {ctx.author}»)
await interaction.edit_origin(embed=economy)
elif selected == «Информация»:
info = discord.Embed(
title=» Информация»,
description=f»«{p}help« — Получить список команд ботаn«{p}profile« — Получить свой профильn»
f»«{p}avatar [участник]« — Получить аватарку участника/своюn«{p}ping« — Получить задержку ботаn»
f»«{p}version« — Получить версию ботаn«{p}server« — Получить информацию о сервереn»
f»«{p}bot« — Получить информацию о боте»,
colour=discord.Color.purple()
)
info.set_footer(icon_url=ctx.author.avatar_url, text=f»Запрошенно от {ctx.author}»)
await interaction.edit_origin(embed=info)
elif selected == «Развлечения»:
fun = discord.Embed(
title=» Развлечения»,
description=f»«{p}8ball [вопрос]« — Задать вопрос шаруn«{p}coin« — Подкинуть монеткуn»
f»«{p}knb [предмет]« — Поиграть с ботом в камень-ножницы-бумагаn»
f»«{p}iq [участник]« — Узнать IQ участникаn«{p}try [действие]« — Попытаться что то сделатьn»
f»«{p}kill [участник]« — Убить участникаn«{p}kiss [участник]« — Поцеловать участникаn»
f»«{p}pat [участник]« — Погладить участникаn«{p}poke [участник]« — Ткнуть участникаn»
f»«{p}hug [участник]« — Обнять участникаn«{p}eat [участник]« — Покушать»,
colour=discord.Color.purple()
)
fun.set_footer(icon_url=ctx.author.avatar_url, text=f»Запрошенно от {ctx.author}»)
await interaction.edit_origin(embed=fun)
elif selected == «Прочее»:
other = discord.Embed(
title=» Прочее»,
description=f»«{p}afk« — Отойтиn«{p}say« — Сказать от лица ботаn«{p}tinyurl [ссылка]« — Укоротить ссылкуn»
f»«{p}rand [число] [число]« — Рандомное число»,
colour=discord.Color.purple()
)
other.set_footer(icon_url=ctx.author.avatar_url, text=f»Запрошенно от {ctx.author}»)
await interaction.edit_origin(embed=other)
The code does what is supposed to do, but after each button press it says «This interaction failed». Pressing the button edits the embed to change it to another. How would I get rid of that interaction failed message after pressing a button?
the issue: https://i.stack.imgur.com/i4dTd.png
code received from: https://github.com/elixss/YouTube/blob/main/source/buttons.py
Here is the code:
@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.")
I’m trying to make buttons with discord.py, everything is good and the buttons work well, but even though it gives the error message «This interaction failed»
async def dashboard():
embed=discord.Embed(title="Tile", description="Desc", color=0x00ff00)
embed.add_field(name="Fiel1", value="hi", inline=False)
embed.add_field(name="Field2", value="hi2", inline=False)
channel = bot.get_channel(dashboard_channel_id)
await channel.send(
embed=embed,
components=[[
Button(label="عام"),
Button(label="خاص"),
Button(label="كتم الصوت"),
Button(label="فك كتم الصوت"),
]]
)
for the buttons to react I use the on_button_click event
@bot.event
async def on_button_click(interaction):
print("Button clicked")
I tried using on_error event so I can prevent the «This interaction failed» message but that did not work, I just want it not to show this error even if the code is invalid. instead, i want to raise it
Код делает то, что должен делать, но после каждого нажатия кнопки он говорит: «Это взаимодействие не удалось». Нажатие кнопки редактирует вставку, чтобы заменить ее на другую. Как мне избавиться от сообщения об ошибке взаимодействия после нажатия кнопки?
Проблема: 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
Дискорд – популярная бесплатная площадка для общения между пользователями. Программу используют те, кто играет в различные игры – дискорд позволяет корректировать действия и общаться в режиме реального времени, что очень удобно. Администрация на тематических серверах может устанавливать специальные музыкальные боты для трансляции музыки. По ряду причин, такие боты могут лагать и плохо работать на сервере. Чтобы наладить их функционирование, следует выполнить несколько простых действий.
Проблема с местоположением сервера
Проблема трансляции музыки с помощью бота в Дискорде связана с местоположением. По ряду причин из – за этого могут не транслироваться музыкальные композиции, или же болт вовсе перестанет работать. Исправляется это изменением местоположение сервера.
Если лагает музыкальный бот в дискорде, то причиной для этого может стать то, что программа автоматически выбирает точку подключения при создании сервера. Если она подключилась к той региональной точке, с которой создан сервер, то программа будет нормально функционировать. Но из – за возникающих сбоев программа может подключиться к другой региональной точке, из – за чего возникнет сильная задержка, из – за которой невозможно нормально смотреть видео или слушать музыку. Соответственно, это вредит и работе бота.
Сделать это можно, следуя этой инструкции:
- Войти в программу Дискорд.
- Открыть вкладку «Параметры».
- Выбрать «Настройки сервера».
- Перейти в «Обзор».
- Откроется окно со значок с флагом. Нужно выбрать функцию «Изменить».
- Откроется окно «Выберите регшион сервера». Пользователю придется выбрать из списка регион, где он находится.
- После этого нужно сохранить изменения.
Выполнив эти действия, у пользователя изменится местоположение сервера. Если местоположение изначально выбрано правильно, но музыкальный бот отказывается работать, некоторые пользователи советуют изменить местоположение. К примеру, сервер привязан к Росии по умолчанию, но его местоположение нужно изменить на США. После этого бот будет нормально функционировать.
Лагает сам бот — пробуем переустановить
Иногда проблема сбоев в работе бота заключается в его некорректной работе. Это можно исправить, переустанови музыкального бота.
Если лагает бот с музыкой в дискорде, нужно:
- Войти в приложение, перейти на сервер.
- Найти нужный бот в списке.
- Щелкнув по нему правой кнопкой мыши и выбрать «Удалить».
- Нужно выбрать новый бот, и установить его.
- Установив бота на сервер он будет показан как новый пользователь. Администратору потребуется выдать роль роботу, если та не определилась автоматически.
- Ввести команду (для каждого бота она своя) для прослушивания музыки.
Если бот не играет музыку, то его перестановка может решить проблемы с зависанием.
Лагает программа Дискорд — ждем окончания сбоя
Иногда причиной сбоя в работе бота является проблема в самом Дискорде. Причиной для появления сбоя может стать низкая скорость Интернет – соединения или же неверные настройки самого Дискорда.
Что делать в такой если бот не проигрывает музыку в Дискорде:
- Подождать или перезапустить программу. В большинстве случаев, сбой в Дискорде бывает временным.
- Проверить Интернет – соединение. Из – за никой скорости могут возникать сбои в работе.
- Переустановить Дискорд. Если же лаги не исчезают, а бот отказывается нормально работать, должна помочь перестановка программы.
- В некоторых случаях рекомендуется проверить, обновлены ли драйверы звуковой карты.
Исправить зависание Дискорда можно в кратчайшие сроки. Иногда даже не требуется ничего делать, а просто подождать, когда программа начнет нормально функционировать.
Дискорд – удобная платформа для общения, отличающаяся высокой оптимизацией. Однако, без сбоев и лагов в работе программы не удается обойтись. К счастью, устранить проблему с зависанием музыкального бота можно за считанные минуты.
Go to Discord_Bots
r/Discord_Bots
r/Discord_Bots
Non-official subreddit for Discord bot developement
Members
Online
•
by
m33ster_robot
How do I stop the interaction failed message?
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.