nextcord.py/discord.py开发时cogs扩展无法加载报错问题求助
nextcord.py Cogs 无法加载问题解决方案
问题根因
你遇到的报错由多个错误共同导致:
- 初始扩展列表手动添加了无
cogs.前缀的错误路径,对应报错中前3条加载失败记录 - 遍历cogs目录的路径拼写错误:
./сogs中的首字符是西里尔字母с,不是英文字母c,系统无法识别到正确的文件夹 - nextcord 2.x及以上版本中,
load_extension、unload_extension均为异步方法,你当前同步调用的写法完全无效 - 删除
if __name__ == '__main__'后命令无法触发,是因为此时所有cogs完全没有被加载,同时如果你主文件的命令也无法触发,大概率是你没有开启message_content网关意图
修复步骤
1. 修正cogs加载逻辑
将你原有代码中initial_extensions定义到if __name__ == '__main__'的片段全部替换为以下内容:
import asyncio # 初始化扩展列表为空,不需要手动添加 initial_extensions = [] # 修正路径拼写为英文c开头的cogs for filename in os.listdir('./cogs'): if filename.endswith('.py'): initial_extensions.append(f"cogs.{filename[:-3]}") if __name__ == '__main__': for extension in initial_extensions: try: # 异步加载扩展,2.x版本必须用异步方式调用 asyncio.run(bot.load_extension(extension)) except Exception as error: print(f'{extension} cannot be loaded. [{error}]')
2. 修正load/unload/reload命令的异步调用
三个管理命令里的加载/卸载方法都要加await,同时修正reload命令的返回提示错误:
@bot.command() async def load(ctx, extensions): if ctx.author.id == 606433100150472704: await bot.load_extension(f'cogs.{extensions}') await ctx.send("Cogs 已加载完成") else: await ctx.send("Вы не являетесь разработчиком...") @bot.command() async def unload(ctx, extensions): if ctx.author.id == 606433100150472704: await bot.unload_extension(f'cogs.{extensions}') await ctx.send("Cogs 已卸载完成") else: await ctx.send("Вы не являетесь разработчиком...") @bot.command() async def reload(ctx, extensions): if ctx.author.id == 606433100150472704: await bot.unload_extension(f'cogs.{extensions}') await bot.load_extension(f'cogs.{extensions}') await ctx.send("Cogs 已重载完成") else: await ctx.send("Вы не являетесь разработчиком...")
3. 开启必要的网关意图
在你初始化bot的代码处添加intent配置,同时确保Discord开发者后台的Bot页面已经开启Message Content Intent开关:
import nextcord from nextcord.ext import commands # 开启必要意图 intents = nextcord.Intents.default() intents.message_content = True # 必须开启才能读取前缀命令 # 初始化bot时传入intents,替换为你自己的命令前缀 bot = commands.Bot(command_prefix='!', intents=intents)
注意:每个存放在cogs目录下的py文件末尾必须定义
setup函数,用于将Cog实例注册到bot,否则也会出现加载失败的情况,示例如下:def setup(bot): bot.add_cog(HelpCog(bot)) # 替换为你自己的Cog类名
内容的提问来源于stack exchange,提问作者Maron
相关产品推荐
相关产品推荐

