You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:55:16