#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
на никогда не решенном обещании? Насколько я могу судить, в моем коде, похоже, нет ничего, что могло бы зависнуть, и проблема возникла только тогда, когда я начал сегментирование.