Discord JS:UnhandledPromiseRejection警告:错误:Shard的客户端花费了太长时间才准备就绪

时间:2019-11-30 19:55:29

标签: node.js discord discord.js commando

我有一个Discord僵尸程序,它刚达到2500台服务器,并且停止了登录,因为显然限制为2500,然后您需要使用Sharding,这是我迄今为止从未听说过的。

因此,按照教程,我在机器人中添加了ShardManager:

const { ShardingManager } = require('discord.js');
const settings = require('./settings.json');

const manager = new ShardingManager('./bot.js', { token: settings.token });

manager.spawn();
manager.on('launch', shard => console.log(`Launched shard ${shard.id}`));

现在我改为使用该文件启动机器人,然后我认为它可以正常工作,但随后机器人又退出了,我收到一封来自discord的电子邮件,称由于登录了约1000个,他们将重置令牌24小时内。

我尝试再次启动bot并查看了输出(因为我的错误日志显示永久节点js似乎无法正常工作),并且出现了错误:

(node:2465) UnhandledPromiseRejectionWarning: Error: Shard 1's Client took too long to become ready.
    at Timeout.setTimeout [as _onTimeout] (/var/discord-WriterBot/node_modules/d                                                                                                iscord.js/src/sharding/Shard.js:89:31)
    at ontimeout (timers.js:498:11)
    at tryOnTimeout (timers.js:323:5)
    at Timer.listOnTimeout (timers.js:290:5)
(node:2465) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch                                                                                                 block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)

对于分片2同样如此。

我在ShardManager上做错什么了吗?我不太了解,但我相信我正确地遵循了说明。

如果有帮助,这是完整的机器人代码:https://github.com/cwarwicker/discord-WriterBot

谢谢。

1 个答案:

答案 0 :(得分:0)

我处理这个错误和 SHARDING_READY_DIED 错误已经有一段时间了。为了捕获错误,您必须在分片创建过程中添加错误事件监听器。

manager.on('shardCreate', async (shard) => {
  console.log('Shard Launched')
  shard.on('error', (error) => {
     console.error(error)
  })
})

如果在分片管理器上将 respawn 设置为 true,则分片将自动重启并且父进程不会崩溃。