如何根据 OPCODE (discord.js) 分离捕获的错误

Posted

技术标签:

【中文标题】如何根据 OPCODE (discord.js) 分离捕获的错误【英文标题】:How to separate caught errors based on their OPCODE (discord.js) 【发布时间】:2019-09-04 22:34:53 【问题描述】:

所以基本上,我有一个机器人,它的部分功能是在公会(discord 服务器)内创建通道。我有通用错误处理程序和捕获块,但我想知道如何分离错误操作码'30013'的'最大公会频道数达到(500)',如果这是错误,它会显示一条消息,说明已创建最大数量的频道,并允许捕获其他错误.

理想情况下,仍然可以捕获所有错误,但如果错误是所需的错误,它将按照我的要求执行,而不是像错误处理程序那样简化错误 JSON 响应。

【问题讨论】:

这不是您问题的答案,但您不应将错误处理用作程序工作流程的一种手段。尽可能最好,只要它在您的控制范围内,您应该尽可能避免错误。我根据您给出的示例这么说,如果您知道可以创建的最大通道数为 500,则应在创建新通道之前检查当前通道数。如果创建一个新的将超过该限制,请通知用户该限制。这样您就不必捕获错误。您应该捕获的错误是您无法控制且无法提前检查的错误。 ^ 您可以简单地检查guild.channels.size 并完全避免错误。 @slothiful @Anu6is 这个想法不是我用它来控制工作流程,但我明白你在说什么。你的建议已经是我的了,但是偶尔会出现这样的情况,如果服务器是499个频道,两个人偶然同时尝试创建频道,它会返回错误,并且不会发送“容量” " 我与guild.channels.size合并的消息 @Timesis 它确实会发送消息,只是针对第二个运行用户的命令。 @slothiful 我从第一手资料中知道,无论是由于我糟糕的编码、VPS 的选择还是不和谐的 API,它都不会返回错误而不是消息,如果这没有发生,我就不会在这里发这个帖子了。 【参考方案1】:

检查错误对象并查看它与其他对象的区别(很可能是它的code 属性)。一旦你知道了,检查你的 catch 块中的属性与所需的属性。如果匹配,请继续使用您的特定代码。

【讨论】:

如何做到这一点?【参考方案2】:

如果收到的错误响应与 this link 匹配,则这些行应该可以工作。

try 
    // You code here

catch(err) 
    if (err.code == 30013) 
    // feedback code here
    

由于我不确定您是否使用异步,所以我将展示标准 try/catch 格式与 .catch。无论如何,逻辑应该是相同的。

【讨论】:

以上是关于如何根据 OPCODE (discord.js) 分离捕获的错误的主要内容,如果未能解决你的问题,请参考以下文章

Discord.JS - Hypixel Discord 机器人

Discord.js v12.2.0 |根据反应添加角色

discord.js V12中根据反应赋予角色时出错

Discord.js v12.2.0 |根据反应添加角色

discord.js v12 中的 TempMute

使用客户端的参数根据用户留在命令中的参数创建自定义嵌入消息(Discord JS)