我有一个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
谢谢。
答案 0 :(得分:0)
我处理这个错误和 SHARDING_READY_DIED
错误已经有一段时间了。为了捕获错误,您必须在分片创建过程中添加错误事件监听器。
manager.on('shardCreate', async (shard) => {
console.log('Shard Launched')
shard.on('error', (error) => {
console.error(error)
})
})
如果在分片管理器上将 respawn 设置为 true,则分片将自动重启并且父进程不会崩溃。