You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:54:03