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'))
额外注意事项
- Discord开发者后台配置:进入Discord开发者门户,找到你的机器人,在「Privileged Gateway Intents」中开启
Message Content Intent(如果你的机器人需要处理消息),否则机器人会无法接收消息命令。 - 路径检查:确保
cogs文件夹和主程序文件在同一层级目录下,避免出现找不到文件的错误。 - token安全:永远不要把机器人token硬编码在代码里,使用环境变量或者配置文件存储更安全。
内容的提问来源于stack exchange,提问作者따뜻한유자청
相关产品推荐
相关产品推荐

