Discord机器人头像命令故障:无头像提示嵌入未正常显示
问题分析与修复方案
你的头像命令代码存在三个核心问题,导致「无头像时显示提示」的功能完全没生效:
- 完全没有添加判断用户是否拥有自定义头像的逻辑
- 两段
if分支的代码完全重复,属于冗余写法,没必要分开处理「指定用户」和「默认当前用户」的情况 - 获取头像链接时错误直接使用
member.avatar,正确的做法应该调用其url属性才能拿到可访问的图片地址
修复后的完整代码
@commands.command(aliases=['ava', 'аватарка']) async def avatar(self, ctx, *, member: discord.Member = None): # 若未指定成员,默认使用消息发送者 member = member or ctx.author # 判断用户是否有自定义头像 if not member.avatar: # 无头像时发送提示嵌入 embed = discord.Embed( title="Ошибка", description=f"Пользователь {member} не имеет кастомного аватара!", color=discord.Color.red(), timestamp=ctx.message.created_at ) embed.set_footer(text=f'Выполнено {ctx.author}', icon_url=ctx.author.avatar.url if ctx.author.avatar else ctx.author.default_avatar.url) await ctx.send(embed=embed) return # 有头像时发送头像嵌入 embed = discord.Embed(color=discord.Color.darker_grey(), timestamp=ctx.message.created_at) embed.set_author(name=f'Аватар {member}') embed.set_image(url=member.avatar.url) embed.set_footer(text=f'Выполнено {ctx.author}', icon_url=ctx.author.avatar.url if ctx.author.avatar else ctx.author.default_avatar.url) await ctx.send(embed=embed)
关键改动说明
- 用
member = member or ctx.author替代冗余的if not member判断,代码更简洁 - 新增
if not member.avatar判断,触发时发送红色提示嵌入,明确告知用户目标无自定义头像 - 所有头像链接均使用
.url属性(同时处理了发送者也无头像的极端情况,自动 fallback 到默认头像) - 移除了重复的代码块,逻辑更清晰
内容的提问来源于stack exchange,提问作者user21343500
相关产品推荐
相关产品推荐

