Discord. net C# Bot - несколько сегментов подключаются и отключаются непрерывно - PullRequest
1 голос
/ 27 марта 2020

У меня есть бот Discord, использующий DiscordShardedClient с использованием Discord. net библиотека, у меня 16 осколков, обслуживающих гильдий бота.

В течение последних нескольких недель бот работал очень медленно. отвечать. Теперь только осколки № 9 и № 10 непрерывно отключаются с ошибкой: сервер пропустил сердцебиение, а затем снова подключился.

Теперь я подумал, что это что-то с пингом сервера. У меня бот проверяет пинг, и он постоянно ~ 30 мс, так что это не так. Кроме того, большая пропускная способность.

У меня также есть этот бот на 8-ядерном 16-поточном сервере с 32 ГБ ОЗУ и база данных на отдельном быстром сервере. Я не думаю, что есть аппаратное ограничение.

Кроме того, я увеличил количество осколков, надеясь, что, поскольку я обычно получаю в среднем ~ 2500 команд в час, это решит проблему.

Я также встроил функцию обнаружения спама, чтобы обнаруживать, а затем отключать пользователей, когда они спамят бота. Я сомневаюсь, что пользователь, спамящий в гильдии, взломает sh Осколок.

Также я знаком с ошибкой сердцебиения. Обычно это означает, что бот где-то завис и не может ответить на Discord. Обычно бот не переподключается, когда застревает на основной задаче. На этот раз, однако, он снова подключается.

Несколько вещей, которые я заметил в своем тестировании: бот быстрее и не взламывает sh, когда спрос низок в течение ночи. Я отладил код в поисках длительных задержек и не нашел ни одного. Доступ к базе данных и выполнение команд очень быстро. Просто кажется, что событие из DiscordShardedClient.MessageReceve задерживается. Также бот, кажется, становится немного медленнее со временем после запуска. Я проверил на утечки памяти и оптимизировал свои массивы и выдавил почти половину гигабайта оперативной памяти. Все еще не решил мою проблему.

...