discord.py机器人使用cogs后slash命令运行报参数重复错误求助
错误排查与修复方案
核心报错原因
TypeError: add() got multiple values for argument 'x' 报错的根本原因是:Cog类中的所有命令方法属于类的实例方法,第一个参数必须是类实例本身(即self),你漏写了这个参数导致参数顺序全部错位。
具体错位逻辑:调用方法时系统会自动传入类实例作为第一个参数,你的方法第一个参数写的是ctx,此时类实例就会被赋值给ctx,原本应该传入的ctx被赋值给x,你手动输入的x参数就变成了多余的重复值,触发报错。
修复步骤
- 给Cog类内所有的斜杠命令方法加上
self作为第一个参数,以add方法为例,修改后代码如下:
- 给Cog类内所有的斜杠命令方法加上
@cog_ext.cog_slash(description = "Add two numbers") async def add(self, ctx, x: float, y : float) : def addition(x : float, y : float) : return x + y response = (f"The result of addition between {x} and {y} is {addition(x, y)}.") await ctx.send(response)
subs、multi、div等其他所有命令方法都要做相同修改,在第一个参数位置加上self
- 修正Cog类的构造函数写法:Python的类构造函数需要双下划线包裹,你当前的
_init_要改成__init__,否则类初始化会存在隐患:
- 修正Cog类的构造函数写法:Python的类构造函数需要双下划线包裹,你当前的
class UpdateCode(commands.Cog) : def __init__(self, client) : self.client = client
- 可选语法修复:main.py里的status列表中,
" Schrodinger's cat ???"这行末尾缺少逗号,会导致前后两个字符串自动拼接,建议补上逗号。
- 可选语法修复:main.py里的status列表中,
全部修改完成后重启机器人即可正常触发斜杠命令。
内容的提问来源于stack exchange,提问作者Daniesh Rieza
相关产品推荐
相关产品推荐

