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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:36:04