← база знаний

Как устроен сын

Из чего собран

Сын написан на C# / .NET 10 поверх Discord.Net. Внутри он разбит на модули, каждый отвечает за своё:

Модуль Что делает
Audio8 музыка в голосовых каналах
Говорилка учится на чате и болтает сама
Картинки демотиваторы, шефограм, распознавание текста
Twitch следит за стримерами и пишет об эфирах
DTF мост в Telegram

Сообщение из чата проходит через обработчик команд: он отрезает префикс, находит команду, проверяет права и кулдауны и запускает её. Ошибки не роняют бота, а приходят ответом в чат.

Звук

Сам звук сын не кодирует. Этим занимается отдельный сервер Lavalink: он ищет треки на YouTube, SoundCloud и Spotify и стримит аудио прямо в голосовой канал Discord. Сын через библиотеку Lavalink4NET только командует: что играть, когда скипнуть, какой фильтр включить. Подробнее в музыке.

Где хранит данные

  • MariaDB: настройки серверов, отслеживаемые стримеры, мемы, база говорилки, лайки с сайта. Без базы сын не стартует.
  • Файлы: состояние плееров (чтобы продолжить музыку после рестарта) и выгрузки для сайта.

Где живёт

Сын крутится в Docker-контейнере на сервере. Рядом живут два канала:

  • stable: та версия, что у всех на серверах;
  • proto: тестовая сборка, на ней новые фичи обкатываются до релиза.

Версии и ядра

Номер версии читается как ядро.фича.фикс: 6.1.2 значит шестое ядро, первый фичевый релиз, второй фикс.

Ядро это большая перестройка: новый движок, рантайм или музыкальная библиотека. Все ядра и их стек видны в истории обновлений на главной. Релизы внутри ядра собираются автоматически из git-тегов.