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
相关产品推荐
相关产品推荐

