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

Discord.js v14 修改昵称命令故障排查求助

Discord.js v14 昵称修改斜杠命令故障排查与修复

你的核心问题出在获取成员对象的方式上:

const member = interaction.author;

interaction.author返回的是User对象,这个对象不包含服务器相关的操作权限(比如修改昵称)。你需要用interaction.member来获取当前交互的GuildMember对象,这个对象才拥有setNickname()方法。

另外,建议加上错误处理逻辑,避免因权限不足、昵称格式违规等情况导致命令崩溃。

修正后的完整代码:

const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");

module.exports = {
    data: new SlashCommandBuilder()
      .setName("nickname")
      .setDescription("Change your nickname")
      .addStringOption(option =>
        option.setName("nickname")
        .setDescription("New Nickname")
        .setRequired(true)
        ),

    async execute(interaction) {
      const { options, member } = interaction;
      const nick = options.getString("nickname");
      
      try {
        // 使用GuildMember对象调用setNickname
        await member.setNickname(nick);
        
        const embed = new EmbedBuilder()
          .setDescription(`成功将你的昵称修改为 ${nick}`)
          .setColor(0xFFFFFE)
          .setTimestamp();

        await interaction.reply({
          embeds: [embed],
          ephemeral: true
        });
      } catch (err) {
        // 捕获错误并反馈给用户
        await interaction.reply({
          content: `修改昵称失败:${err.message}`,
          ephemeral: true
        });
      }
    }    
}

额外注意事项:

  • 确保你的机器人在目标服务器中拥有管理昵称(Manage Nicknames)的权限,否则会抛出权限不足的错误
  • 普通用户只能修改自己的昵称,若要支持修改他人昵称,需要添加用户选项并额外校验权限
  • Discord对昵称长度有上限(最多32字符),超出会触发错误,代码中的try/catch会捕获这类问题

内容的提问来源于stack exchange,提问作者ImAnthox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:45:30