Ошибка в командной строке — «NameError: name 'extension' is not defined. Did you mean: 'Exception'?»

Рейтинг: 0Ответов: 1Опубликовано: 12.01.2023

Есть вот такой у меня код, это основной файл бота. Я решил сделать коги, что показалось мне отличным решением всех моих проблем, связанных с многострочностью строк в коде бота. И зачастую я в нём теряюсь. Но при запуске основного файла main.py (я использую .bat файл для запуска кода на своём компьютере) в командной строке я получаю ошибку:

C:\Users\user 2\Downloads\Папки\BOT DISCORD\BLACK RUSSIA BONUS>py main.py
Traceback (most recent call last):
  File "C:\Users\user 2\Downloads\Папки\BOT DISCORD\BLACK RUSSIA BONUS\main.py", line 93, in <module>
    bot.load_extension(f"cogs.{extension[:-3]}")
                               ^^^^^^^^^
NameError: name 'extension' is not defined. Did you mean: 'Exception'?

Код основного файла — main.py:

async def load(ctx, extension):
    if ctx.author.id == 737468084763230242:
        bot.load_extension("cogs.logs.py")
        bot.load_extension("cogs.moderation_commands")
        await ctx.send(f"Cogs были успешно загружены на сервер бота. Вызвал команду: {ctx.author.mention}")
    else:
        await ctx.send(f'Не удалось загрузить Cogs. Вы — не разработчик бота. Вызвал команду: {ctx.author.mention}')    

@bot.command()
async def unload(ctx, extension):
    if ctx.author.id == 737468084763230242:
        bot.unload_extension("cogs.logs.py")
        bot.unload_extension("cogs.moderation_commands")
        await ctx.send(f"Cogs были успешно выгружены с сервера бота. Вызвал команду: {ctx.author.mention}")
    else:
        await ctx.send(f'Не удалось выгрузить Cogs с сервера бота. Вы — не разработчик бота.')      


@bot.command()
async def reload(ctx, extension):
    if ctx.author.id == 737468084763230242:
        bot.unload_extension("cogs.moderation_commands")
        bot.unload_extension("cogs.logs.py")
        bot.load_extension("cogs.logs.py")
        bot.load_extension("cogs.moderation_commands")
        await ctx.send(f"Cogs были успешно перезагружены. Вызвал команду: {ctx.author.mention}")
    else:
        await ctx.send(f'Не удалось перезагрузить Cogs. Вы — не разработчик бота.')

for filename in os.listdir("./cogs"):
    if filename.endswith(".py"):
        bot.load_extension(f"cogs.{extension[:-3]}")

Ответы

▲ 0Принят

Во-первых, у вас никуда не определяется extension. Я предполагаю чей вы смотрели видео-урок. Вам необходимо сделать cogs.extension. Таким образом по названию файла (без .py) вы можете перезагрузить определенный cog.

bot.reload_extension(f"cogs.{extension}")

И ещё хотелось отметить, что cog можно перезагрузить одной строкой используя reload.

@bot.command() 
async def reload(ctx, extension): 
    if ctx.author.id == 737468084763230242: 
        bot.reload_extension(f"cogs.{extension}")
        await ctx.send(f"Cog были успешно перезагружены. Вызвал команду: {ctx.author.mention}")
    else: 
        await ctx.send(f'Не удалось перезагрузить Cogs. Вы — не разработчик бота.')

Во-вторых, ошибка которая у Вас возникает, заключается в строке загрузки самих когов. Вы допустили ошибку в (f"cogs.{extension[:-3]}"). Исправьте extension на filename.

for filename in os.listdir("./cogs"): 
    if filename.endswith(".py"): 
        bot.load_extension(f"cogs.{filename[:-3]}")