如何根据 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) 分离捕获的错误的主要内容,如果未能解决你的问题,请参考以下文章