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

使用discord.js开发Discord机器人:如何通过用户ID获取服务器昵称

通过用户ID获取Discord服务器昵称的实现方法

在discord.js中,服务器昵称是绑定在**服务器成员(GuildMember)**对象上的,而非用户(User)对象本身。要实现通过用户ID获取对应服务器昵称,核心是从目标服务器中获取该用户的成员对象,再提取昵称信息。

核心步骤

  1. 获取命令触发时所在的服务器对象(message.guild 或 interaction.guild,取决于你用的是前缀命令还是Slash命令)
  2. 调用服务器对象的 members.fetch(userId) 方法,异步获取用户的成员对象
  3. 从成员对象中读取 nickname 属性;若用户未设置服务器昵称, fallback 到 user.username(全局用户名)

代码示例

前缀命令场景(适用于discord.js v13/v14)

async function showCoinLeaderboard(message) {
    // 按金币数从高到低排序用户ID
    const sortedUsers = Object.entries(Coin).sort((a, b) => b[1] - a[1]);

    let leaderboardContent = "🏆 金币排行榜 🏆\n";
    for (const [userId, coinCount] of sortedUsers) {
        try {
            // 从当前服务器获取用户成员对象
            const member = await message.guild.members.fetch(userId);
            // 优先用服务器昵称,无则用全局用户名
            const displayName = member.nickname || member.user.username;
            leaderboardContent += `${displayName}: ${coinCount} 金币\n`;
        } catch (err) {
            // 处理用户已离开服务器的情况
            leaderboardContent += `用户ID ${userId}: ${coinCount} 金币(已离开服务器)\n`;
        }
    }

    // 发送排行榜
    message.channel.send(leaderboardContent);
}

Slash命令场景(discord.js v14+)

async function showCoinLeaderboard(interaction) {
    await interaction.deferReply(); // 处理异步操作可能的延迟

    const sortedUsers = Object.entries(Coin).sort((a, b) => b[1] - a[1]);
    let leaderboardContent = "🏆 金币排行榜 🏆\n";

    for (const [userId, coinCount] of sortedUsers) {
        try {
            const member = await interaction.guild.members.fetch(userId);
            const displayName = member.nickname || member.user.username;
            leaderboardContent += `${displayName}: ${coinCount} 金币\n`;
        } catch (err) {
            leaderboardContent += `用户ID ${userId}: ${coinCount} 金币(已离开服务器)\n`;
        }
    }

    await interaction.editReply(leaderboardContent);
}

注意事项

  • 确保机器人拥有 GUILD_MEMBERS 权限,否则无法获取服务器成员信息
  • 服务器昵称是服务器专属的,跨服务器场景下需从对应服务器获取成员对象
  • members.fetch() 是异步方法,必须放在 async 函数中并搭配 await 使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:53:21