Из чего собран
Сын написан на C# / .NET 10 поверх Discord.Net. Внутри он разбит на модули, каждый отвечает за своё:
| Модуль | Что делает |
|---|---|
| Audio8 | музыка в голосовых каналах |
| Говорилка | учится на чате и болтает сама |
| Картинки | демотиваторы, шефограм, распознавание текста |
| Twitch | следит за стримерами и пишет об эфирах |
| DTF | мост в Telegram |
Сообщение из чата проходит через обработчик команд: он отрезает префикс, находит команду, проверяет права и кулдауны и запускает её. Ошибки не роняют бота, а приходят ответом в чат.
Звук
Сам звук сын не кодирует. Этим занимается отдельный сервер Lavalink: он ищет треки на YouTube, SoundCloud и Spotify и стримит аудио прямо в голосовой канал Discord. Сын через библиотеку Lavalink4NET только командует: что играть, когда скипнуть, какой фильтр включить. Подробнее в музыке.
Где хранит данные
- MariaDB: настройки серверов, отслеживаемые стримеры, мемы, база говорилки, лайки с сайта. Без базы сын не стартует.
- Файлы: состояние плееров (чтобы продолжить музыку после рестарта) и выгрузки для сайта.
Где живёт
Сын крутится в Docker-контейнере на сервере. Рядом живут два канала:
- stable: та версия, что у всех на серверах;
- proto: тестовая сборка, на ней новые фичи обкатываются до релиза.
Версии и ядра
Номер версии читается как ядро.фича.фикс: 6.1.2 значит шестое ядро, первый фичевый релиз, второй фикс.
Ядро это большая перестройка: новый движок, рантайм или музыкальная библиотека. Все ядра и их стек видны в истории обновлений на главной. Релизы внутри ядра собираются автоматически из git-тегов.