Discord.js сегментирование, вызывающее проблемы с подключением

#javascript #node.js #discord #discord.js

#javascript #node.js #Discord #discord.js

Вопрос:

Недавно мой бот Discord попал на 2000 серверов, и самое время начать сегментирование бота. Я следовал руководству по Discord.js веб-сайт, но я заметил, что проблемы начинают появляться. Я заметил две основные проблемы: либо а) один или оба фрагмента будут случайным образом отключаться без видимой ошибки с моей стороны, либо б) один или оба фрагмента перестанут отвечать на команды, как если бы они не получали никаких событий из websocket. В настоящее время так выглядит мой код менеджера сегментирования (после добавления прослушивателей событий для отладки):

 import {createRequire} from "module"
const require = createRequire(import.meta.url)
require('dotenv').config()

const { ShardingManager } = require('discord.js')
const manager = new ShardingManager('./bot.js', { token: process.env.TOKEN })

manager.on('shardCreate', shard => {
    console.log(`Launched shard ${shard.id}`)
    shard.on('ready', () => {
        console.log('Shard ready')
    })
    shard.on('disconnect', (a, b) => {
        console.log('Shard disconnected')
        console.log(a)
        console.log(b)
    })
    shard.on('reconnecting', (a, b) => {
        console.log('Shard reconnecting')
        console.log(a)
        console.log(b)
    })
    shard.on('death', (a, b) => {
        console.log('Shard died')
        console.log(a)
        console.log(b)
    })
})
manager.spawn()
  

Единственными слушателями, которые вообще запускаются, являются shardCreate и ready . Я попытался применить те же прослушиватели к client.shard в bot.js , но по какой-то причине простое добавление слушателей вызвало появление какой-то ошибки, связанной с этим слушателем, и остановило выход бота в Интернет. Я думаю, что ошибки должны быть вызваны слушателями, потому что бот заранее подключался к Сети без каких-либо ошибок, прежде чем добавлять их, но после этого он даже не запускался. Может быть, это связано с «тихими» ошибками отклонения обещаний узла? (Но я обычно вижу их и в консоли)

Если у кого-нибудь есть какие-либо идеи о том, что может быть причиной этих проблем, они были бы очень признательны. Если нет, кто-нибудь знает способ выполнить сегментирование вручную вместо использования менеджера сегментирования с Discord.js ?

РЕДАКТИРОВАТЬ: Еще одна вещь, о которой я не упомянул, — это загрузка процессора. Всякий раз, когда сегмент заканчивается отключением, загрузка процессора зашкаливает и остается там до перезагрузки. Я провел анализ пометки узла и (при условии, что я правильно прочитал вывод) 70% операций были epoll_pwait . Я не совсем понимаю, что это значит, но я чувствую, что это может быть await на никогда не решенном обещании? Насколько я могу судить, в моем коде, похоже, нет ничего, что могло бы зависнуть, и проблема возникла только тогда, когда я начал сегментирование.