Discord机器人Music类运行报__init__缺少必填参数'config'如何解决?
报错根因
你定义的Music Cog的构造函数__init__要求传入bot和config两个参数,但你加载这个Cog时只传了bot参数,缺少config参数导致报错。
解决思路
方案1:加载Cog时传入配置对象
首先找到你加载Cog的代码位置,按你使用的discord.py版本对应修改:
- 旧版(v1.x及更早):原来的加载代码通常为
bot.add_cog(Music(bot)),修改为:# your_config为你提前读取好的全局配置字典 bot.add_cog(Music(bot, your_config)) - 新版(v2.x及以后,Cog单独写在模块文件中):找到模块下的
setup函数,修改为:async def setup(bot): # 如果已经把配置提前挂载到bot实例上,直接取即可 config = bot.config await bot.add_cog(Music(bot, config))
方案2:简化Cog构造函数,直接从bot实例取配置
如果不想每次加载Cog都传配置,可以把配置提前挂载到bot实例上,修改Music类的构造函数,省去手动传config的步骤:
class Music(commands.Cog): """Bot commands to help play music.""" def __init__(self, bot): self.bot = bot self.config = bot.config[__name__.split(".")[-1]] # 从bot实例取预存的配置 self.states = {} self.bot.add_listener(self.on_reaction_add, "on_reaction_add")
使用该方案需要你在初始化bot之后、加载Cog之前,提前给bot挂载配置:bot.config = 你的全局配置字典。
额外注意项
要确保你的配置字典存在和Music类所在模块名一致的key,否则后续会触发KeyError报错。
内容的提问来源于stack exchange,提问作者Hydra
相关产品推荐
相关产品推荐

