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

如何在Discord.py中获取非同服务器但有共同服务器用户的头像?

获取与机器人有共同服务器用户的头像(Discord机器人实现)

核心逻辑

只要机器人和目标用户存在共同服务器,且机器人在该服务器拥有足够权限,就能通过用户ID直接获取用户对象,进而提取头像URL。

实现步骤(以主流Discord库为例)

1. 配置机器人权限与意图

  • 在Discord开发者门户中,为机器人启用Server Members Intent(成员意图);
  • 确保机器人在共同服务器中拥有查看成员的权限,否则无法获取用户数据。

2. 通过用户ID获取用户对象

调用机器人库提供的用户获取方法,无需机器人与用户在同一服务器,只要有共同服务器即可完成获取。

3. 提取头像URL

从获取到的用户对象中,调用头像相关方法生成可直接访问的URL。


代码示例

Discord.js(v14+)

// 假设已初始化Discord客户端client
const targetUserId = "123456789012345678"; // 目标用户ID

async function fetchUserAvatar(userId) {
  try {
    // 获取用户对象,支持跨服务器(只要有共同服务器)
    const user = await client.users.fetch(userId);
    // 生成高清动态头像URL(dynamic: true自动适配动图头像)
    const avatarUrl = user.displayAvatarURL({
      format: "png",
      size: 1024,
      dynamic: true
    });
    return avatarUrl;
  } catch (err) {
    console.error("获取头像失败:", err.message);
    // 处理异常:用户不存在、权限不足等
    return null;
  }
}

// 调用示例
fetchUserAvatar(targetUserId).then(url => console.log("头像URL:", url));

Discord.py(v2+)

import discord
from discord.ext import commands

# 初始化机器人,启用成员意图
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(command_prefix="!", intents=intents)

@bot.command()
async def get_avatar(ctx, user_id: int):
    try:
        # 通过ID获取用户对象
        user = await bot.fetch_user(user_id)
        # 获取指定大小的头像URL(16-4096之间的2的幂数)
        avatar_url = user.display_avatar.with_size(1024).url
        await ctx.send(f"目标用户头像:{avatar_url}")
    except discord.NotFound:
        await ctx.send("未找到该用户,请确认ID正确且与机器人有共同服务器。")
    except discord.Forbidden:
        await ctx.send("权限不足,请检查机器人在共同服务器的权限配置。")

bot.run("你的机器人令牌")

注意事项

  • 如果用户未设置自定义头像,上述方法会自动返回Discord默认头像;
  • 部分隐私设置可能影响获取,但只要机器人在共同服务器有权限,通常均可正常获取;
  • 务必添加错误处理,避免因异常导致机器人崩溃。

内容的提问来源于stack exchange,提问作者Just a random coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:42:40