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

Discord.py Cogs模块加载报错求助:主程序第22行与示例Cog文件第18行错误排查

修复Discord机器人主程序与Cog文件的错误

看起来你遇到的是discord.py版本迁移导致的常见问题——你的代码是基于v1.x的写法,但现在使用的是v2.0+版本,这两个版本在扩展加载机制上有不少关键变化。我来帮你逐个排查并修复这两个错误:

一、修复Cog文件第18行的错误

在discord.py 2.0及以上版本中,setup函数必须定义为异步函数,并且调用client.add_cog()时需要使用await关键字。修改后的示例Cog代码如下:

import discord
from discord.ext import commands

class Example(commands.Cog):
    def __init__(self, client):
        self.client = client

    @commands.Cog.listener()
    async def on_ready(self):
        print('Bot is online.')

    @commands.command()
    async def ping(self, ctx):
        await ctx.send('Pong!')

async def setup(client):  # 改为异步函数
    await client.add_cog(Example(client))  # 添加await关键字

二、修复主程序第22行及相关命令的错误

主程序里的load、unload、reload命令涉及的扩展操作,在v2.x中全部变为异步方法,必须添加await;同时,在client.run()之前加载Cogs的逻辑也需要调整为异步执行。另外,v2.x强制要求启用Intents,否则机器人无法接收事件(比如上线通知、消息等)。修改后的主程序代码:

import discord
import os
from discord.ext import commands

# 配置Intents,v2.x必须设置
intents = discord.Intents.default()
intents.message_content = True  # 如果需要处理消息内容,必须开启这个权限

client = commands.Bot(command_prefix='.', intents=intents)

@client.command()
async def load(ctx, extension):
    await client.load_extension(f'cogs.{extension}')  # 添加await

@client.command()
async def unload(ctx, extension):
    await client.unload_extension(f'cogs.{extension}')  # 添加await

@client.command()
async def reload(ctx, extension):
    await client.unload_extension(f'cogs.{extension}')  # 添加await
    await client.load_extension(f'cogs.{extension}')  # 添加await

# 异步加载所有Cog文件
async def load_all_cogs():
    # 先检查cogs目录是否存在,避免报错
    if not os.path.exists('./cogs'):
        print("警告:cogs目录不存在,跳过加载扩展")
        return
    for filename in os.listdir('./cogs'):
        if filename.endswith('.py'):
            # 去除.py后缀,得到模块名
            await client.load_extension(f'cogs.{filename[:-3]}')

# 在启动机器人前执行异步加载
client.loop.run_until_complete(load_all_cogs())

# 建议用环境变量存储token,不要硬编码在代码里
client.run(os.getenv('DISCORD_BOT_TOKEN'))

额外注意事项

  1. Discord开发者后台配置:进入Discord开发者门户,找到你的机器人,在「Privileged Gateway Intents」中开启Message Content Intent(如果你的机器人需要处理消息),否则机器人会无法接收消息命令。
  2. 路径检查:确保cogs文件夹和主程序文件在同一层级目录下,避免出现找不到文件的错误。
  3. token安全:永远不要把机器人token硬编码在代码里,使用环境变量或者配置文件存储更安全。

内容的提问来源于stack exchange,提问作者따뜻한유자청

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:32:37