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

如何隐藏discord.js中删除角色时的DiscordAPIError(Node.js环境)

解决Discord机器人删除角色时的错误提示问题

嘿,我来帮你搞定这个烦人的错误提示问题!你遇到的两个核心问题:一是@everyone是服务器默认角色,根本无法删除;二是机器人权限不足,没法删除等级比自己高的角色。原来的代码直接输出冗长的错误堆栈,确实看着闹心,我们可以针对性处理——要么改成自定义友好提示,要么直接隐藏这些已知错误。

方案一:自定义错误提示(推荐)

我们可以提前过滤掉@everyone角色避免无效请求,然后在捕获错误时根据Discord的错误代码输出清晰提示,替换掉杂乱的堆栈信息:

message.guild.roles.cache.forEach(role => {
  // 提前跳过@everyone角色(它的ID和服务器ID完全一致)
  if (role.id === message.guild.id) {
    console.log(`无法删除${role.name}角色`);
    return;
  }

  role.delete()
    .then(deleted => console.log(`Deleted role ${deleted.name}`))
    .catch(error => {
      // 根据Discord返回的错误代码自定义提示
      switch(error.code) {
        case 50013:
          console.log(`${role.name}角色无法被删除(权限不足,角色等级高于机器人)`);
          break;
        case 50028:
          console.log(`${role.name}角色无法被删除`);
          break;
        default:
          // 未知错误保留原始日志,方便后续调试
          console.error(`删除${role.name}时发生意外错误:`, error);
      }
    });
});

方案二:完全隐藏已知错误

如果你不想看到任何相关错误提示,只保留成功删除的日志,可以这样写:

message.guild.roles.cache.forEach(role => {
  // 跳过@everyone,省得发送无效请求
  if (role.id === message.guild.id) return;

  role.delete()
    .then(deleted => console.log(`Deleted role ${deleted.name}`))
    .catch(error => {
      // 只在遇到未知错误时输出日志,已知的两种错误直接忽略
      if (![50013, 50028].includes(error.code)) {
        console.error(`删除${role.name}时发生意外错误:`, error);
      }
    });
});

关键细节说明

  • @everyone的ID和服务器ID是完全相同的,提前判断跳过可以减少不必要的请求和错误。
  • Discord返回的错误代码对应场景:50013代表权限不足(目标角色等级高于机器人),50028代表无效角色(比如无法删除的@everyone),针对这两个代码处理就能覆盖你遇到的所有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:17:44