Ошибка в командной строке — «NameError: name 'extension' is not defined. Did you mean: 'Exception'?»
Есть вот такой у меня код, это основной файл бота. Я решил сделать коги, что показалось мне отличным решением всех моих проблем, связанных с многострочностью строк в коде бота. И зачастую я в нём теряюсь. Но при запуске основного файла 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]}")
Ответы (1 шт):
Во-первых, у вас никуда не определяется 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]}")