如何隐藏 DiscordAPIError (discord.js) (node.js)

Posted

技术标签:

【中文标题】如何隐藏 DiscordAPIError (discord.js) (node.js)【英文标题】:How to hide the DiscordAPIError (discord.js) (node.js) 【发布时间】:2021-09-11 18:59:39 【问题描述】:

我正在尝试制作一个 Discord 机器人。 现在我正在尝试删除所有角色命令,但我不喜欢控制台中关于 @everyone 和高于机器人角色的角色的错误。 有什么解决方案可以将消息更改为 role 角色无法删除, 或完全隐藏它?

例子:

DiscordAPIError: Invalid Role
    at RequestHandler.execute (D:\SapphireNuker JS\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async RequestHandler.push (D:\SapphireNuker JS\node_modules\discord.js\src\rest\RequestHandler.js:39:14) 
  method: 'delete',
  path: '/guilds/835119368807383091/roles/835119368807383091',
  code: 50028,
  httpStatus: 400

DiscordAPIError: Missing Permissions
    at RequestHandler.execute (D:\SapphireNuker JS\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async RequestHandler.push (D:\SapphireNuker JS\node_modules\discord.js\src\rest\RequestHandler.js:39:14) 
  method: 'delete',
  path: '/guilds/835119368807383091/roles/859000573138305026',
  code: 50013,
  httpStatus: 403

DiscordAPIError: Missing Permissions
    at RequestHandler.execute (D:\SapphireNuker JS\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async RequestHandler.push (D:\SapphireNuker JS\node_modules\discord.js\src\rest\RequestHandler.js:39:14) 
  method: 'delete',
  path: '/guilds/835119368807383091/roles/859043233375977494',
  code: 50013,
  httpStatus: 403

我正在使用的代码:

message.guild.roles.cache.forEach(roles => 

   roles.delete()
   .then(deleted => console.log(`Deleted role $deleted.name`))
   .catch(console.error);

【问题讨论】:

与其试图隐藏错误,不如尝试修复它们。 Bot 没有足够的权限。尝试授予您的机器人管理员权限并将其保持在角色层次结构的顶部。 【参考方案1】:

您可以使用Promise.catch()try/catch。 try catch 的特点是它不会捕获异步错误。 promise.catch 的做法是这样的:

message.guild.roles.cache.forEach(async roles =>   
roles.delete()
   .then(deleted => console.log(`Deleted role $deleted.name`))
.catch(console.error);
)

我不明白为什么你的 .catch 之前没有工作,除非你出于某种原因记录它,而且它并没有结束你的节点进程。这是另一种停止错误的方法:

message.guild.roles.cache.forEach(async roles =>   
try 
await (roles.delete()
   .then(deleted => console.log(`Deleted role $deleted.name`)))
 catch(err) 
  console.error(err);

)

不过,最好使用第一个。但是,如果您不希望发生任何错误,只需使用 return 而不是 console.error

【讨论】:

以上是关于如何隐藏 DiscordAPIError (discord.js) (node.js)的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 DiscordAPIError[50001] OAuth2 问题?

DiscordAPIError:createOverwrite 上缺少访问权限

DiscordAPIError:无效的表单正文 - Discord 斜杠命令

DiscordAPIError:缺少权限

DiscordAPIError:无效的表单正文

DiscordAPIError:无法使用 Discord 嵌入发送空消息