discord.py开发Slash Commands机器人如何获取Nitro用户服务器专属头像
解决方案
discord.py的Member对象中,avatar_url是对应用户全局默认头像的属性,Nitro用户设置的服务器专属头像是独立字段,不会覆盖该属性。你需要使用2.0及以上版本的discord.py,该版本已内置服务器专属头像的相关支持。
修改后的代码逻辑如下:
# userobj 是斜杠命令传入的用户对象 # context 是斜杠命令的上下文对象 # 优先从缓存获取成员,缓存不存在时主动拉取服务器成员数据 member = context.guild.get_member(userobj.id) if not member: member = await context.guild.fetch_member(userobj.id) if member: # 优先取当前服务器专属头像,不存在则 fallback 到全局默认头像 target_avatar = member.guild_avatar_url if member.guild_avatar else member.avatar_url print(target_avatar)
补充说明
- 如需自定义头像的尺寸、格式,可调用URL对象的对应方法,例如
target_avatar.with_size(2048)获取2048px尺寸的头像,target_avatar.with_format("webp")获取WebP格式的头像。 - 如果你使用的是discord.py 1.x旧版本,没有内置相关属性,可以手动从成员的原始数据中提取服务器头像哈希,拼接格式为
https://cdn.discordapp.com/guilds/{服务器ID}/users/{用户ID}/avatars/{服务器头像哈希}.png,更推荐直接升级discord.py到2.0+版本简化开发。
内容的提问来源于stack exchange,提问作者Slagt
相关产品推荐
相关产品推荐

