Discord.py斜杠命令可运行但抛出错误,求原因及解决方法
问题解决
错误根源
你的代码存在两处问题:
- 未处理空参数:当用户执行命令时不指定成员,
member会是None,此时调用member.display_avatar会触发AttributeError - 对象类型错误:
member.display_avatar是Discord的Asset类实例,不能直接传递给ctx.send(),必须转换为可发送的格式(如图片URL)
修复代码
@cerium.slash_command(name="avatar", description="获取指定用户的头像") async def avatar(ctx, *, member: discord.Member = None): # 若未指定成员,默认使用命令发起者 target_member = member or ctx.author # 获取头像的直接访问链接 avatar_link = target_member.display_avatar.url # 方式1:发送Embed展示头像(推荐,更美观) embed = discord.Embed(title=f"{target_member.name}的头像") embed.set_image(url=avatar_link) await ctx.send(embed=embed) # 方式2:直接发送头像链接(简洁) # await ctx.send(avatar_link)
额外说明
display_avatar会优先返回用户的自定义头像,若用户没有自定义头像则返回默认头像- 用
member or ctx.author是Python中处理默认值的简洁写法,等价于member if member is not None else ctx.author
内容的提问来源于stack exchange,提问作者Bhavyadeep Yadav
相关产品推荐
相关产品推荐

