Discord.py bot test命令运行报错 参数user转换discord.member失败且缺失参数
Discord机器人test命令异常修复方案
错误根因
- 调用
!test无参数报错:你在定义user参数时未设置默认值,discord.py的命令校验逻辑会在进入函数前就检测到参数缺失,直接抛出错误,不会执行你函数内部写的user==None兜底判断。 - 带@用户调用报错:类型注解大小写错误,discord.py中成员类型的正确写法是
discord.Member(首字母大写),你写的小写discord.member是模块路径,无法用于参数类型转换。 - 额外隐藏问题:你代码中写死了取命令发送者
ctx.author的头像,即便传入其他用户参数也不会生效;发送文件时调用的discord.file也是大小写错误,正确为discord.File。
修复后完整代码
@bot.command() async def test(ctx, user: discord.Member = None): # 无参数时默认取命令发送者 if user is None: user = ctx.author test = Image.open("test.jpg") # 改为取传入用户的头像,符合参数设计逻辑 asset = user.avatar_url_as(size=128) data = BytesIO(await asset.read()) pfp = Image.open(data) pfp = pfp.resize((177,177)) test.paste(pfp,(446,339)) test.save("test1.jpg") # 修正File类大小写错误 await ctx.send(file=discord.File('test1.jpg'))
可选优化
如果遇到用户设置了服务器头像隐私、或者没有自定义头像的场景,可在头像读取逻辑外层加try-except块捕获异常,做默认头像的兜底处理,避免命令崩溃。
内容的提问来源于stack exchange,提问作者justarandomguy123
相关产品推荐
相关产品推荐

