Ошибка взаимодействия дискорд бот

I have created button roles using discord.py/pycord and they work pretty well but after some time the interaction gets failed it works well for some time but later it starts getting failed. How can...

I have created button roles using discord.py/pycord and they work pretty well but after some time the interaction gets failed it works well for some time but later it starts getting failed. How can it work forever and also surpass reboots

Code:

client.command()
async def genderrole(ctx: commands.Context):
    embed= discord.Embed(
        title= "Assign yourself Gender Roles by clicking on below given options", 
        description="<a:Arrow:944179619433676800> All the members are requested to click on below options in order to get gender roles", 
        color= discord.Colour.green()
        )


    button= Button(label= "Male", style= discord.ButtonStyle.green, emoji= "<a:male:945567841615241276>")
    button1= Button(label= "Female", style= discord.ButtonStyle.green, emoji= "<a:female:945567715530272778>")

    async def male(interaction: discord.Interaction):
        role = ctx.guild.get_role(945566721861906465)
        member = ctx.guild.get_member(interaction.user.id)
        if role in interaction.user.roles:
            await interaction.user.remove_roles(role)
            await interaction.response.send_message(f"{role} role has been taken from you", ephemeral=True)
        else:
            await member.add_roles(role)
            await interaction.response.send_message(f"{role} role has been given to you", ephemeral=True)
    button.callback=male

    async def female(interaction: discord.Interaction):
        role = ctx.guild.get_role(945566773548298252)
        member = ctx.guild.get_member(interaction.user.id)
        if role in interaction.user.roles:
            await interaction.user.remove_roles(role)
            await interaction.response.send_message(f"{role} role has been taken from you", ephemeral=True)
        else:
            await member.add_roles(role)
            await interaction.response.send_message(f"{role} role has been given to you", ephemeral=True)
    button1.callback=female

    view = View(button, button1)
    await ctx.send(embed=embed, view=view)

Help would be appreciated

asked Feb 23, 2022 at 7:44

IDK's user avatar

1

you can use the on_interaction event ,this event has oe argument wich is an instance to a Interaction class so, you can use it as a you normaly do with it but there are an exception you should add a custom_id argument to these button so your code will look somthing like this

#the command part
client.command()
async def genderrole(ctx: commands.Context):
    embed= "do what you did before"
    #buttons right here
    button = Button(..., custom_id="any id you want")
    button1 = Button(..., custom_id="any id you want")
    #just a note don't make the ids the same
    view = View(button, button1)
    await ctx.send(embed=embed, view=view)
#the event part
@client.event
async def on_interaction(interaction):
    #put here avery function you did create before 
    ...
    #now the callback
    if interaction.custom_id == "the id you put for 'button'":
        await male(interaction): #just pass interaction as an argument
    elif interaction.custom_id == "the id you put for 'button1'":
        await female(interaction)

so this ‘on_interaction’ will trigger every time you someone click a button in the server that the bot on.
Bonus information:
you should add some functions or a way to dedect the specific server that the button is clicked on in you’re case you do not need this

more information about the Interaction class check the officiel document
https://docs.pycord.dev/en/master/api.html?highlight=interaction#discord.Interaction

if anything goes wrong please let me know

answered May 16, 2022 at 18:58

Youssef Hmidi's user avatar

I have created button roles using discord.py/pycord and they work pretty well but after some time the interaction gets failed it works well for some time but later it starts getting failed. How can it work forever and also surpass reboots

Code:

client.command()
async def genderrole(ctx: commands.Context):
    embed= discord.Embed(
        title= "Assign yourself Gender Roles by clicking on below given options", 
        description="<a:Arrow:944179619433676800> All the members are requested to click on below options in order to get gender roles", 
        color= discord.Colour.green()
        )


    button= Button(label= "Male", style= discord.ButtonStyle.green, emoji= "<a:male:945567841615241276>")
    button1= Button(label= "Female", style= discord.ButtonStyle.green, emoji= "<a:female:945567715530272778>")

    async def male(interaction: discord.Interaction):
        role = ctx.guild.get_role(945566721861906465)
        member = ctx.guild.get_member(interaction.user.id)
        if role in interaction.user.roles:
            await interaction.user.remove_roles(role)
            await interaction.response.send_message(f"{role} role has been taken from you", ephemeral=True)
        else:
            await member.add_roles(role)
            await interaction.response.send_message(f"{role} role has been given to you", ephemeral=True)
    button.callback=male

    async def female(interaction: discord.Interaction):
        role = ctx.guild.get_role(945566773548298252)
        member = ctx.guild.get_member(interaction.user.id)
        if role in interaction.user.roles:
            await interaction.user.remove_roles(role)
            await interaction.response.send_message(f"{role} role has been taken from you", ephemeral=True)
        else:
            await member.add_roles(role)
            await interaction.response.send_message(f"{role} role has been given to you", ephemeral=True)
    button1.callback=female

    view = View(button, button1)
    await ctx.send(embed=embed, view=view)

Help would be appreciated

asked Feb 23, 2022 at 7:44

IDK's user avatar

1

you can use the on_interaction event ,this event has oe argument wich is an instance to a Interaction class so, you can use it as a you normaly do with it but there are an exception you should add a custom_id argument to these button so your code will look somthing like this

#the command part
client.command()
async def genderrole(ctx: commands.Context):
    embed= "do what you did before"
    #buttons right here
    button = Button(..., custom_id="any id you want")
    button1 = Button(..., custom_id="any id you want")
    #just a note don't make the ids the same
    view = View(button, button1)
    await ctx.send(embed=embed, view=view)
#the event part
@client.event
async def on_interaction(interaction):
    #put here avery function you did create before 
    ...
    #now the callback
    if interaction.custom_id == "the id you put for 'button'":
        await male(interaction): #just pass interaction as an argument
    elif interaction.custom_id == "the id you put for 'button1'":
        await female(interaction)

so this ‘on_interaction’ will trigger every time you someone click a button in the server that the bot on.
Bonus information:
you should add some functions or a way to dedect the specific server that the button is clicked on in you’re case you do not need this

more information about the Interaction class check the officiel document
https://docs.pycord.dev/en/master/api.html?highlight=interaction#discord.Interaction

if anything goes wrong please let me know

answered May 16, 2022 at 18:58

Youssef Hmidi's user avatar

У меня есть очень простой скрипт, который выводит сообщение с кнопкой с командой? Place

При нажатии на эту кнопку бот отвечает привет пользователю, который нажал ее.

Если кнопка не используется в течение > примерно 3 минут, она начинает возвращать сообщение «Ошибка взаимодействия».

enter image description here

После этого кнопка становится бесполезной. Я предполагаю, что есть какой-то внутренний тайм-аут, который я не могу найти в документах. Кнопка делает то же самое, используя discord.py (2.0) или pycord. В консоль ничего не попадает. Как будто нажатие кнопки не подхватывается.

Очень редко кнопка снова начинает работать, и в консоль попадает множество этих ошибок:

discord.errors.NotFound: 404 Not Found (error code: 10062): Unknown interaction
Ignoring exception in view <View timeout=180.0 children=1> for item <Button style=<ButtonStyle.success: 3> url=None disabled=False label='click me' emoji=None row=None>:

Я предполагаю, что тайм-аут = 180 является причиной этой проблемы, но кто-нибудь знает, как остановить этот тайм-аут и почему это происходит? Я не вижу в документах ничего о кнопках дискорда, которые можно использовать только в течение 3 минут.

import discord

from discord.ext import commands
intents = discord.Intents.default()
intents.members = True
intents.message_content = True
bot = commands.Bot(command_prefix="?", intents=intents)


embed1=discord.Embed(title="Test", description = f"TESTING",color=0xffffff)   
print("bot connected")
 
@ bot.command(name='place')
async def hello(ctx):
    view = discord.ui.View()
    buttonSign = discord.ui.Button(label = "click me", style= discord.ButtonStyle.green)


    async def buttonSign_callback(interaction):
        userName = interaction.user.id
        embedText = f"test test test"
        embed=discord.Embed(title="Test", description = embedText,color=0xffffff)
        await interaction.response.send_message(f"Hi <@{userName}>")

       

    buttonSign.callback = buttonSign_callback
    view.add_item(item=buttonSign)
    await ctx.send(embed = embed1,view = view)

bot.run(TOKEN)

1 ответ

Лучший ответ

Объяснение

По умолчанию View в discord.py 2.0 имеют тайм-аут 180 секунд (3 минуты). Вы можете исправить эту ошибку, передав None в качестве времени ожидания при создании представления.

Код

@bot.command(name='place')
async def hello(ctx):
    view = discord.ui.View(timeout=None)

Ссылки

discord.ui.View.timeout


4

TheFungusAmongUs
20 Май 2022 в 03:12

Боты – популярный вид интеграций, использующийся практически на каждом сервере в Discord. Однако не все подобные утилиты корректно функционируют после их добавления. Иногда бот отображается не в сети, соответственно, он никак не реагирует на команды пользователя и не выполняет свои обязанности.

Есть несколько причин появления такой проблемы, с которыми я и предлагаю разобраться далее.

Причина 1: Сбой авторизации бота

Это непопулярная причина, поскольку в большинстве случаев боты всегда успешно добавляются на сервер и сразу отображаются в сети, то есть готовы к работе. Однако проверка авторизации займет буквально пару секунд, поэтому и советую обратить внимание на этот аспект в первую очередь. Найдите неактивного бота в списке участников сервера и кликните по нему левой кнопкой мыши.

Открытие панели управления участником для проверки работоспособности бота в Discord

Появится панель управления участником с информацией о нем. Если там есть кнопка «Добавить бота» или «Авторизовать бота», нажмите ее и еще раз пройдите те же самые шаги, связанные с выбором сервера и подтверждением предоставления интеграции необходимых прав.

Повторная авторизация для проверки работоспособности бота в Discord

Вы можете не перезагружать Дискорд, поскольку изменения должны вступить в силу сразу же. Если после нескольких повторных попыток авторизации через данную панель бот так и не заработал, переходите к разбору следующих причин и методов их решения.

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Причина 2: Некорректная работа интеграции

В Discord бот считается за интеграцию и начинает свою работу сразу же после добавления. Конечно, для этого он должен отображаться в сети. Если у вас возникла рассматриваемая проблема, попробуйте проверить интеграцию и, в случае необходимости, полностью удалить ее с повторным добавлением на сервер.

  1. Найдите неактивного бота в списке участников и щелкните по нему правой кнопкой мыши.

  2. Из появившегося контекстного меню выберите пункт «Управление интеграцией».Переход к интеграциям для проверки работоспособности бота в Discord

  3. Ознакомьтесь с предоставленными и отсутствующими правами. Убедитесь в том, что интеграция имеет необходимый уровень доступа, чтобы оставаться активной и выполнять команды пользователя. Если это не так, откройте раздел с ролями, выберите отдельную роль целевого бота и предоставьте ей необходимые права.Проверка прав доступа интеграции для проверки работоспособности бота в Discord

  4. Если с доступом все нормально, но интеграция все еще не работает, удалите ее полностью при помощи кнопки в этом же окне.Кнопка удаления интеграции для проверки работоспособности бота в Discord

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

Причина 3: Бот сломан или отключен создателем

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

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

  2. Найдите свежие отзывы и почитайте, что пишут о боте пользователи. Если не вы один столкнулись с его нерабочим состоянием, то причина проблемы непосредственно в интеграции, и исправить ее может только создатель.Чтение отзывов на открытых площадках для проверки работоспособности бота в Discord

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

Причина 4: Проблема в работе Discord

Допустим, при чтении отзывов и после обращения в поддержку оказалось, что у всех бот работает корректно, только у вас он не в сети. Случается такое довольно редко, но может быть вызвано сбоями в работе самого Discord. Исправляется это тремя простыми шагами.

  1. Откройте утилиту «Выполнить», используя для этого стандартное сочетание клавиш Win + R. Введите в поле поиска %appdata% и подтвердите переход по данному пути.Переход к локальным файлам для проверки работоспособности бота в Discord

  2. Откроется список папок, среди которых нужно найти «Discord» и удалить данную папку.Удаление локальных файлов для проверки работоспособности бота в Discord

  3. Обязательно завершите все процессы программы через «Диспетчер задач», после чего повторите запуск мессенджера и проверьте, помогло ли это исправить проблему с работой бота.Завершение процессов для проверки работоспособности бота в Discord

Некоторые пользователи рекомендуют очистить весь мусор на компьютере или переустановить Дискорд. Можете сделать это, если ничего из перечисленного выше не помогло, но я не вижу взаимосвязи в этих действиях, если другие боты на сервере функционируют корректно.

В большинстве случаев проблема кроется именно на стороне создателя данной интеграции. Возможно, именно сейчас он исправляет неполадку, а вам нужно лишь немного подождать, чтобы бот снова заработал.

Понравилась статья? Поделить с друзьями:
  • Ошибка взаимодействия дискорд mid journey
  • Ошибка взаимодействия discord py
  • Ошибка взаимной проверки подлинности bluetooth
  • Ошибка весов error 11
  • Ошибка верстки что это