discord.py 2.0机器人重载扩展报错:TypeError参数缺失求助
问题分析
触发的两类TypeError核心原因完全一致:你直接调用了commands.Bot类的reload_extension方法,但reload_extension是实例方法,必须通过已初始化的Bot实例(而非类本身)调用。
- 第一个错误是因为调用类方法时缺少
self参数(也就是Bot实例本身); - 第二个错误是当你传入
name参数时,类会把这个参数当作self,导致真正需要的name参数缺失。
修复方案
修改reload.py中的命令函数,使用ctx.bot(当前命令绑定的Bot实例)来调用reload_extension:
import discord import settings from discord.ext import commands @commands.hybrid_command(name="reload", description="Reloads all extensions") async def reload(ctx): for cmd_file in settings.CMDS_DIR.glob("*.py"): if cmd_file.name != "__init__.py": extensions = f"extension.{cmd_file.name[:-3]}" # 关键修改:用ctx.bot(机器人实例)调用reload_extension await ctx.bot.reload_extension(extensions) print(f"Reloaded extension: {extensions}") # 可选:给用户发送操作反馈 await ctx.send("所有扩展已重载完成!") async def setup(bot): bot.add_command(reload)
额外建议
ctx.bot和你在main.py中创建的bot对象是同一个实例,能正确执行扩展重载逻辑;- 建议给该命令添加权限校验,比如仅允许机器人所有者(你和女友)使用,避免误操作:
@commands.hybrid_command(name="reload", description="Reloads all extensions") @commands.is_owner() async def reload(ctx): # 原有逻辑
内容的提问来源于stack exchange,提问作者ndzin
相关产品推荐
相关产品推荐

