【问题标题】:How to hide the DiscordAPIError (discord.js) (node.js)如何隐藏 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 没有足够的权限。尝试授予您的机器人管理员权限并将其保持在角色层次结构的顶部。

标签: node.js exception discord.js


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2020-05-06
    • 2021-06-29
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多