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

如何通过Discord.JS获取交互(/命令)发起用户的ID

问题分析与解决方案

你的代码能发送回复但控制台无输出,核心原因是guild.members.fetch可能抛出异常却未被捕获,导致后续console.log代码无法执行;另外其实无需额外fetch就能拿到基础用户ID和用户名。

修正后的代码

if (interaction?.data?.name === 'test') {
    await interaction.createMessage({
        content: 'test'
    });
    
    // 直接从interaction.user获取基础用户数据,无需额外请求
    const userName = interaction.user.username;
    const userId = interaction.user.id;
    let nickName = userName; // 默认用用户名
    
    // 仅在服务器环境下尝试获取昵称
    if (interaction.guild) {
        try {
            const interactionMember = await interaction.guild.members.fetch(interaction.user.id);
            nickName = interactionMember.nickname ?? userName; // 若没有昵称则用用户名
        } catch (error) {
            console.error('获取服务器成员数据失败:', error);
        }
    }

    console.log(nickName, userName, userId);
}

关键说明

  • 基础用户数据无需fetch:interaction.user已经包含id、username等核心字段,直接使用即可,这部分不会出错。
  • 捕获fetch异常:调用guild.members.fetch可能因权限不足、用户不存在等原因失败,必须用try/catch包裹,避免代码中断。
  • 校验服务器环境:interaction.guild为空时(比如在DM中使用命令),不存在服务器昵称,直接使用用户名即可。
  • 权限检查:确保机器人拥有GUILD_MEMBERS权限,否则无法获取服务器成员的昵称数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:15:43