Node.js新手求助:如何让Discord Slash命令机器人显示提问用户及问题
解决方案
1. 定义person变量获取提问用户
在Discord.js的Slash命令交互逻辑里,发起命令的用户信息可以通过interaction.user对象直接获取,你可以根据需求选择显示用户的不同标识:
- 显示用户完整标签(如
JohnDoe#1234):const person = interaction.user.tag; - 显示纯用户名(不带#后缀):
const person = interaction.user.username; - 显示用户在当前服务器的昵称:
const person = interaction.member.displayName;(需要机器人有服务器成员权限)
2. 修正拼写错误
你代码里的queston是拼写失误,必须改成question,否则无法正确读取用户输入的问题,命令注册和参数获取的地方都要修正。
修改后的完整代码
命令处理代码:
if (name === 'ask') { const messages = ['no', 'yes', 'uhh', 'maybe']; const rnd = Math.floor(Math.random() * messages.length); const question = options.getString('question'); // 修正拼写 const person = interaction.user.tag; // 获取用户标签 const embed = new Discord.MessageEmbed() .setDescription(`${person} : ${question}\nBen : ${messages[rnd]}`) .setColor('RED'); interaction.reply({ embeds: [embed] }); }
命令注册代码:
commands.create({ name: "ask", description: "answers any question you ask", options: [ { name: "question", // 修正拼写 description: "the question you want ben to answer", required: true, type: Discord.Constants.ApplicationCommandOptionTypes.STRING } ] });
补充说明
interaction.user是Discord.js Slash命令交互对象的内置属性,默认指向发起命令的用户,无需额外配置权限(基础机器人权限即可)。- 建议用
const替代var,避免变量提升引发的潜在问题,这是现代JavaScript的通用最佳实践。
内容的提问来源于stack exchange,提问作者war
相关产品推荐
相关产品推荐

