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

discord.py获取用户头像时报Member对象无avatar_url属性错误如何解决

错误原因

你使用的discord.py为v2.0及以上版本,该版本对头像相关属性做了重构,旧v1.x版本中可用的avatar_url属性已被正式移除,因此调用Member对象的avatar_url会触发属性不存在的报错。

修复方案

新版本中需要先获取avatar头像资源对象,再调用其url属性拿到头像链接,同时需要补充用户未设置自定义头像时的兜底逻辑,取默认头像链接。

修复后基础代码

@bot.command()
async def avatar(ctx, *, avamember : discord.Member=None):
    # 未指定查询对象时默认返回指令发送者的头像
    if avamember is None:
        avamember = ctx.author
    # 优先取自定义头像,无自定义头像则取系统默认头像
    user_avatar = avamember.avatar if avamember.avatar else avamember.default_avatar
    await ctx.send(user_avatar.url)

支持直接传入用户ID查询的扩展代码

如果需要支持直接输入用户ID查询头像,可增加ID解析逻辑,示例如下:

@bot.command()
async def avatar(ctx, *, query=None):
    target_user = None
    if query is None:
        target_user = ctx.author
    else:
        # 尝试解析为用户ID
        try:
            user_id = int(query.strip())
            # 查询当前服务器内成员
            target_user = ctx.guild.get_member(user_id)
            # 若当前服务器不存在该成员,尝试查询全局用户
            if not target_user:
                target_user = await bot.fetch_user(user_id)
        except (ValueError, discord.NotFound):
            # 解析ID失败,尝试按用户名/提及解析成员
            target_user = await discord.ext.commands.MemberConverter().convert(ctx, query)
    user_avatar = target_user.avatar if target_user.avatar else target_user.default_avatar
    await ctx.send(user_avatar.url)

注意:使用全局用户查询功能需要在开发者门户开启members网关意图,同时在代码初始化bot时启用对应意图配置。

内容的提问来源于stack exchange,提问作者CINEMA Plus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:45:03