如何通过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
相关产品推荐
相关产品推荐

