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

Discord Bot执行修改昵称命令时持续提示Missing Permissions错误

解决Discord Bot修改昵称时的"Missing Permissions"错误

问题原因分析

你的代码存在几个关键问题导致权限错误:

  • 依赖缓存获取成员对象(interaction.guild.members.cache.get),若成员不在缓存中会直接导致操作失败。
  • 未等待异步操作完成,setNickname是异步方法,直接调用会引发未处理的Promise异常。
  • 未捕获错误,无法精准判断权限失败的具体原因(比如Bot无法修改服务器所有者昵称)。

修改后的代码

const {Client, GatewayIntentBits, SlashCommandBuilder} = require('discord.js');
const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMembers,
    ]
});

client.on("ready", async () => {
    console.log("Bot is ready!");
    const nicknameCH = new SlashCommandBuilder()
        .setName('changenick')
        .setDescription('修改你的昵称')
        .addStringOption(option => 
            option.setName("newnick")
                .setDescription("新昵称")
                .setRequired(true)
        );
    await client.application.commands.create(nicknameCH);
});

client.on('interactionCreate', async (interaction) => {
    if(!interaction.isChatInputCommand()) return;
    if(interaction.commandName === 'changenick') {
        const newNick = interaction.options.getString("newnick");
        const targetMember = interaction.member; // 直接使用交互内置的成员对象,无需依赖缓存

        try {
            await targetMember.setNickname(newNick);
            await interaction.reply(`已将你的昵称修改为:${newNick}`);
        } catch (error) {
            let errorMsg = "修改昵称失败";
            if(error.code === 50013) {
                if(targetMember.id === interaction.guild.ownerId) {
                    errorMsg = "无法修改服务器所有者的昵称";
                } else {
                    errorMsg = "Bot权限不足,请确保Bot角色高于目标用户的所有角色,且拥有「管理昵称」权限";
                }
            }
            await interaction.reply({content: errorMsg, ephemeral: true});
        }
    }
});

client.login(TOKEN);

额外注意事项

  • Bot角色优先级:必须确保Bot的角色在服务器角色列表中位于所有普通用户角色之上,否则无法修改角色等级高于自己的用户昵称。
  • 服务器所有者限制:Discord平台限制任何Bot修改服务器所有者的昵称,即使Bot拥有管理员权限也无法绕过这一规则。
  • 权限确认:虽然管理员权限包含「管理昵称」权限,但如果使用自定义权限组,需明确为Bot分配ManageNicknames权限。
  • 意图优化:修改昵称仅需Guilds和GuildMembers两个意图,你原代码中的GuildMessages、MessageContent属于多余配置,可移除以减少不必要的权限请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:33:36