DiscordJS中从Interaction获取用户ID失败的问题求助
在DiscordJS中从Interaction对象获取用户ID的问题
我正在DiscordJS中尝试从Interaction对象获取用户ID,编写了名为'test'的命令,该命令包含必填选项'testing',当用户输入'1'时,应返回命令所在的频道ID以及执行该命令的用户ID。
我的test.js代码如下:
module.exports = { name: "test", description: "example", options: [ { name: "testing", description: "testing only.", type: 3, required: true, }, ], async execute(_bot, say, interaction, args) { let object1 = args[0].value; if (object1 == '1') { await say(interaction, 'Channel ID : ' + interaction.channel_id + '\nUser : '+ interaction.message.author.id); } else { return; } }, };
但我无法成功获取用户ID,尝试了以下几种写法均无效:
interaction.member.id; interaction.user.id; interaction.user_id; interaction.member_id; interaction.guildmember.id;
解决方案
问题核心
你代码里有两个关键错误:
- 频道ID的属性名用错了,新版本DiscordJS采用驼峰命名的
channelId,而非channel_id - 用户ID的获取路径错误,Slash命令的交互对象里不存在
message.author(这是普通消息对象的属性),得从交互对象自身的用户属性获取
正确获取方式
针对Slash命令的Interaction对象:
- 用户ID:优先用
interaction.user.id,这个属性在服务器和私信场景下都能稳定返回发起交互的用户ID;如果需要服务器成员专属属性,再用interaction.member.user.id(注意member仅在服务器内存在) - 频道ID:直接用
interaction.channelId
修正后的代码
把execute函数改成这样即可:
async execute(_bot, say, interaction, args) { let object1 = args[0].value; if (object1 == '1') { await say(interaction, `Channel ID : ${interaction.channelId}\nUser : ${interaction.user.id}`); } else { return; } }
之前写法无效的原因
interaction.member.id:服务器场景下可以用,但私信中member会是undefined,通用性不如interaction.user.idinteraction.user_id/interaction.member_id:这是DiscordJS旧版本的属性命名,新版本已改为驼峰式的userId/memberId,直接访问user.id更符合对象调用逻辑interaction.guildmember.id:拼写错误,正确属性名是interaction.member(驼峰命名)
内容的提问来源于stack exchange,提问作者Jada Developer
相关产品推荐
相关产品推荐

