Ошибка disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: NameError: name 'Menu' is not defined

Решил значит сделать в боте меню через кнопки и решил для теста хотя бы просто кнопку добавить, так как с когами работаю впервые. Перерыл интернет и не нашёл ничего подобного

import disnake
from disnake.ext import commands
from typing import Optional


class commands(commands.Cog):

    def __init__(self, bot):
        self.bot = bot

    @commands.Cog.listener()
    async def on_ready(self):
        print(print(f"Bot {self.bot.user} is ready to work!"))

    class Menu(disnake.ui.View):
        def __init__(self):
            super().__init__(timeout=None)
            self.value: Optional[bool] = None

        @disnake.ui.button(label='1', style=disnake.ButtonStyle.gray)
        async def get_menu(self, button: disnake.Button, interaction: disnake.Interaction):
            await interaction.response.send_message("Ты нажал 1")

    @commands.command(name="menu")
    async def menu(self, ctx):
        view = Menu()

        await ctx.send("Меню", view=view)
        await view.wait()

def setup(bot):
    bot.add_cog(commands(bot))

в Pycharm красным подсвечивается строка view = Menu() но я никак не могу понять в чём дело

Пробовал тот же код запускать даже через основной файл бота, но у вы так тоже не работает


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

Автор решения: Forevor Base

Мне кажется ты кнопки совсем не так добавляешь...

Основываясь на документацию disnake, кнопки добавляются через disnake.Button. Такого view = Main() вообще не существует !! в документации.

Вот пример слеш-команды, в которой отправляется кнопочка.

@bot.slash_command()
async def button(inter):
    await inter.response.send_message("ураа кнопочка",
    components=[
        disnake.ui.Button(label="Название", style=disnake.ButtonStyle.blurple, custom_id="id")]
    )

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

Простите за очень поздний ответ, просто не мог увидить вопрос раньше. Надеюсь помог!

→ Ссылка