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

求助:2021年Discord Bot更新后遇ExtensionNotFound及RuntimeWarning错误

修复Discord Bot的两类更新错误

一、协程未等待警告的修复

Discord.py 2.x版本后,bot.load_extension从同步方法改为异步协程,直接调用会触发未等待警告,同时无法正确加载扩展。

解决步骤:

  1. 将加载扩展的逻辑放到异步函数中,用await调用load_extension
  2. 使用asyncio.run()启动异步上下文,让协程能正常执行

修改后的核心代码片段:

import asyncio
from os import listdir, path
from os.path import isfile, join
import discord
from discord.ext import commands

cogs_dir = "cogs"
# 注意配置正确的Intents,Discord.py 2.x强制要求
bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

async def load_cogs():
    for extension in [f.replace('.py', '') for f in listdir(cogs_dir) if isfile(join(cogs_dir, f))]:
        try:
            await bot.load_extension(f"{cogs_dir}.{extension}")
            print(f"成功加载扩展 {extension}")
        except Exception as e:
            print(f'加载扩展 {extension} 失败: {str(e)}')

async def main():
    await load_cogs()
    await bot.start("你的Bot令牌")

if __name__ == '__main__':
    asyncio.run(main())

二、扩展加载失败(ExtensionNotFound)的修复

出现ExtensionNotFound: Extension 'cogs.mod' could not be loaded的常见原因及解决办法:

1. 检查Cogs文件夹结构

确保cogs是合法的Python包:

  • 在cogs文件夹内创建空的__init__.py文件(用来标识这是Python包,空文件即可)
  • 确认mod.py文件确实存在于cogs文件夹中,文件名拼写完全一致(Linux系统注意大小写区分)

2. 完善异常捕获范围

原代码只捕获了discord.ClientException和ModuleNotFoundError,但ExtensionNotFound是独立的异常类,需要添加到捕获列表中,以便精准定位问题:

except (discord.ClientException, ModuleNotFoundError, commands.ExtensionNotFound) as e:
    print(f'加载扩展 {extension} 失败: {str(e)}')

3. 验证路径正确性

如果项目存在目录嵌套,要确保cogs_dir的路径正确。比如cogs在src子目录下,就需要把cogs_dir改成src/cogs。

最终完整代码示例

import asyncio
from os import listdir
from os.path import isfile, join
import discord
from discord.ext import commands

# 配置Bot Intents,根据需求开启对应权限
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)

cogs_dir = "cogs"

async def load_all_cogs():
    # 仅遍历cogs下的.py文件
    cog_files = [f.replace('.py', '') for f in listdir(cogs_dir) if isfile(join(cogs_dir, f)) and f.endswith('.py')]
    for cog in cog_files:
        try:
            await bot.load_extension(f"{cogs_dir}.{cog}")
            print(f"✅ 加载扩展 {cog} 成功")
        except (commands.ExtensionNotFound, commands.ExtensionFailed, ModuleNotFoundError) as e:
            print(f"❌ 加载扩展 {cog} 失败: {str(e)}")

async def main():
    await load_all_cogs()
    await bot.start("你的Bot令牌")

if __name__ == '__main__':
    asyncio.run(main())

内容的提问来源于stack exchange,提问作者TrilogyFM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:20:27