【问题标题】:how to handle a DiscordAPIError: Missing Permissions in discord.js when removing roles如何处理 DiscordAPIError:删除角色时 discord.js 中缺少权限
【发布时间】:2025-12-20 00:25:10
【问题描述】:

我有一个机器人可以删除用户的所有角色,但是,当机器人角色低于它试图删除的角色时。它显然没有权限,所以它抛出错误DiscordAPIError: Missing Permissions,使我的机器人崩溃。我该如何处理这个message.reply(member + 'roles are too high for me to remove') 当这种情况发生时,我想不出一种方法来编码这个。继承人目前删除角色的函数:

if (message.member.permissions.has('ADMINISTRATOR')) {
            if (!args[0]) {message.reply('you need to ping someone to smac after =smacmedown')
            } else {
            let member = message.mentions.members.first();
            member.roles.remove(member.roles.cache);
            }
        } else { message.reply('only admins can use the smacmedown command!:sob::sob:') }

感谢您的帮助:)

【问题讨论】:

  • 如果有人要说的话,我只是对代码进行了一些小修改以使其更好一点,将let member = message.mentions.members.first();移动到管理员if语句下并将if (!args[0])更改为@ 987654326@

标签: javascript node.js discord discord.js


【解决方案1】:

.remove() 返回一个承诺 (Promise<GuildMember>)。如果操作成功,它将与成员一起解决,并在任何类型的错误上拒绝错误对象。兑现承诺。

通过简单地添加一个.catch() 回调,promise 被处理,因此不会抛出一个Unhandled promise rejection error

ALSO:删除成员所有角色的最佳方法是member.roles.set([]);

member.roles.set([])
   .then(member => /* On Success */)
   .catch(err => /* On Error */);

如果你想使用 Async/Await

try {
   await member.roles.set([]);

   /* ... On Success */
} catch (err) {
   /* On Error */
}

这是GuildMemberRoleManager#remove()GuildMemberRoleManager#set() 的文档

【讨论】: