В чем моя ошибка? disnake buttons

class MyView(disnake.ui.View):
    def __init__(self):
        super().__init__(timeout=None)
    @disnake.ui.button(label="Button 1", style=disnake.ButtonStyle.primary, custom_id='bt1')
    async def first_button_callback(self, button: disnake.ui.Button, interaction: disnake.CommandInteraction):
        await interaction.response.send_message("You pressed me!", ephemeral = True)



    @disnake.ui.button(label="Button 2", style=disnake.ButtonStyle.primary, custom_id='bt2')
    async def second_button_callback(self, button: disnake.ui.Button, interaction: disnake.CommandInteraction):
        await interaction.response.send_message("You pressed me!", ephemeral = True)




@bot.command()
async def bb(ctx, interaction: disnake.MessageInteraction):
    view = MyView()
    await ctx.send("Нажми на меня, придурок", view=view)
    if interaction.component.custom_id == 'bt1':
        await interaction.response.send_message('Вы нажали на 1 попку')
    elif interaction.component.custom_id == 'bt2':
        await interaction.response.send_message('Вы нажали на 2 попку')```

Ответы (1 шт):

Автор решения: Rainbowfoxz

Проблема в вашем коде заключается в том, что вы пытаетесь обрабатывать взаимодействия с кнопками в команде bb, однако, в данном случае interaction не имеет атрибута component. Взаимодействия с кнопками обрабатываются в методах, которые вы определили в классе MyView.



class MyView(disnake.ui.View):
    def __init__(self):
        super().__init__(timeout=None)

    @disnake.ui.button(label="Button 1", style=disnake.ButtonStyle.primary, custom_id='bt1')
    async def first_button_callback(self, button: disnake.ui.Button, interaction: disnake.MessageInteraction):
        await interaction.response.send_message('Вы нажали на 1 попку', ephemeral=True)

    @disnake.ui.button(label="Button 2", style=disnake.ButtonStyle.primary, custom_id='bt2')
    async def second_button_callback(self, button: disnake.ui.Button, interaction: disnake.MessageInteraction):
        await interaction.response.send_message('Вы нажали на 2 попку', ephemeral=True)


@bot.command()
async def bb(ctx):
    view = MyView()
    await ctx.send("Нажми на меня, придурок", view=view)

Теперь при нажатии на кнопки Button 1 и Button 2 будут вызываться соответствующие методы first_button_callback и second_button_callback, и отправляться соответствующие сообщения.

→ Ссылка