Discord.js v13编写d100斜杠命令无法@提及用户昵称问题求助
问题根源
interaction.user 是 Discord 全局用户对象,仅存储用户名等跨服务器通用信息,不包含服务器专属昵称,也无法直接生成可触发提醒的@提及格式。服务器内的用户身份信息需要通过 interaction.member 获取。
常见错误原因
- 返回
undefined:大概率是你尝试读取interaction.user.nickname这类不存在的字段,昵称属于服务器专属属性,仅存在于interaction.member对象下,对应字段为nickname,如果用户未设置昵称该字段会返回null,统一获取显示名建议用interaction.member.displayName(优先返回昵称,无昵称则自动返回全局用户名)。 - 输出
userMention函数定义:是因为你没有调用该函数,仅把函数本身作为变量插入了字符串,正确用法需要传入用户ID作为参数,且使用前需先引入该函数。
实现方案
方案1:最简实现(无需额外引入)
直接在字符串中插入interaction.member,Discord.js会自动将其转换为符合要求的@提及格式,发送后会自动渲染为用户的服务器昵称,同时触发@提醒:
const { SlashCommandBuilder } = require('@discordjs/builders'); module.exports = { data: new SlashCommandBuilder() .setName('100') .setDescription('rolls a 100'), async execute(interaction) { await interaction.reply(`${interaction.member} rolled ${Math.round(Math.random() * 100)}`); }, };
方案2:显式调用工具函数
如果需要单独控制提及逻辑,可使用内置的userMention函数:
const { SlashCommandBuilder, userMention } = require('@discordjs/builders'); module.exports = { data: new SlashCommandBuilder() .setName('100') .setDescription('rolls a 100'), async execute(interaction) { // 生成@提及格式 const mention = userMention(interaction.user.id); await interaction.reply(`${mention} rolled ${Math.round(Math.random() * 100)}`); }, };
如果你只需要显示用户的服务器昵称,不需要触发@提醒,直接用${interaction.member.displayName}替换上述代码中的提及变量即可。
内容的提问来源于stack exchange,提问作者Vexel
相关产品推荐
相关产品推荐

