Полный ребилд: кроссплатформа, микросервисы, контейнеры и .NET 10
Шестое ядро под кодовым названием Ubique (от лат. “везде”). Ровно про это релиз, все и везде изменено, улучшено и доработано.
Всё на кнопках
- Все кнопки, списки и формы теперь построены на интеракшенах Discord. Реакции-кнопки ушли в прошлое: больше никаких «нажми 1️⃣ под сообщением», залипаний и двойных срабатываний.
- Нажатие проверяет, кто жмёт и где: чужую панель не перелистнёшь, а музыкой управляет только тот, кто сидит в том же войсе.
- Панели настроек, статуса и почтовых ящиков открываются эфемерно, их видишь только ты.
- Где нужно ввести текст, открывается форма: приветствие, статус бота, выбор трека из очереди, причина тех. работ.
- Единая листалка для всех длинных списков: помощь, очередь, инфа о сервере. Одна логика страниц ◀️ ▶️ везде, без перескоков через страницу.
Кроссплатформа
- Сын живёт в Telegram: @sblngavnabot. Работает он там через собственный мост DTF: команда из Telegram выполняется тем же кодом, что и в Discord, а ответ перерисовывается текстом или картинкой почти один в один с эмбедом.
- В группах команды пишутся через слэш (
/погода Москва), в личке можно просто текстом. Что работает в Telegram, видно по метке Tg в списке команд. /хелптакже может сразу отобразить доступные команды.- Кнопки Discord превращаются в инлайн-кнопки Telegram и нажимаются так же: погода листается по вкладкам прямо в чате.
- Telegram-чат привязывается к серверу, а аккаунт к Discord-аккаунту, поэтому команды видят тебя как участника сервера.
/инфав Telegram показывает чат или человека: по@упоминанию, по ответу на сообщение или про тебя самого в личке.
Музыка Audio8
- Новый музыкальный модуль Audio8 на Lavalink4NET вместо Victoria: быстрее, стабильнее и переписан целиком.
- Новая панель «сейчас играет» на кнопках: ⏭️ скип, ⏮️ назад, ⏸️ пауза и продолжение, 🔁 повтор, 📜 лист. Кнопка i разворачивает панель с дополнительными действиями, а состояние (пауза, повтор) видно прямо по цвету кнопок.
- Лист с формой: из очереди можно выбрать трек по номеру, сразу его включить и при желании выкинуть всё, что стоит перед ним.
- Играй+: если поиск пустой, сын говорит, какой источник отвалился, ищет сразу во всех источниках и предлагает до трёх умных вариантов запроса (раскладка, транслит, обрезки). Выбор кнопками 1️⃣ 2️⃣ 3️⃣.
- В начало листа: под сообщением «добавлено в очередь» кнопка ставит твой трек следующим, а потом можно сразу скипнуть текущий. Работает, пока трек в очереди, без таймера.
- Недавние плейлисты сервера (
х нед) возвращаются в очередь одной кнопкой. - Резерв на yt-dlp: если YouTube отдал трек, но играть не даёт,
х резервдостаёт его через наш агент. А если и резерв не справился, теперь честно говорит почему: протухли куки, YouTube просит доказать, что ты не бот, или пора обновить yt-dlp. - Источник по умолчанию настраивается на сервер:
х источник ютуб | спотик | склауд. Spotify и SoundCloud ищутся напрямую, миксы и радио YouTube грузятся нормально, битые ссылки на плейлисты чинятся сами. - Умный шафл (треки одного автора не идут пачкой), фильтры найткор, слоу, 8д, караоке и вибрато и триумфальное возвращение басс буста.
- Плееры переживают рестарт: очередь, позиция трека, громкость и фильтры сохраняются и восстанавливаются, музыка продолжается с той же секунды.
х лавастатрасширен дополнительной сервисной информацией.
Картинки
Совершенно новый (старый) модуль, теперь перестроенный на SkiaSharp:
х демот заголовок | подпись: демотиватор на картинку, ответ на сообщение с картинкой или аватарку. Без текста выдаёт случайный демотиватор от говорилки.х шфгр: нейросеть находит все лица на картинке и превращает их в шефа, а с@юзерв этого кента.х скан: распознаёт текст на картинке, можно указатьрусилиенг.х монетка @кент: 3D-монетка с аватарками крутится и решает спор.х обоссать @кент: анимированная гифка, без комментариев.- Картинки работают и в личке с ботом =)
Говорилка 2.0
- Говорилка собирает не только фразы, но и картинки из чата и иногда сама отвечает демотиватором со своей подписью.
- Генератор цепи Маркова переписан, база переехала в MariaDB: повторы отсеиваются, мусор чистится, упоминания людей вырезаются.
- Из базы говорилки строится семантическое ядро: самые частые слова и связи между ними живым графом на сайте во вкладке Семантика.
Подсказки вместо пустоты
- Если команда введена неправильно, сын пишет, что не так («не хватает: <текст>», «ожидал число вместо
abc», «не нашёл участника»), как надо и пример. - Опечатался в названии или набрал в английской раскладке: «🤔 такой команды нет, может
х погода?». - У внутренних ошибок появился код, по которому её сразу видно в логах.
х памагипоказывает команды вместе с аргументами, а все подсказки, справка и список команд на сайте берутся из одной базы.
Настройки, удобства, исправления
- Настройки на каждый сервер свои.
х инфапоказывает сводку, а кнопка ⚙️ открывает панель: выбор роли-суперюзера, канала и роли приветствия, канала стримов прямо из списков Discord, текст приветствия через форму. Сброс одним снятием выбора. - Роль-суперюзер открывает доступ к настройкам и служебным командам на конкретном сервере.
- Приветствия: новичок получает сообщение в канале и роль автоматически, роль выдаётся даже без канала приветствий.
- Twitch: сын пишет в канал стримов сервера, когда отслеживаемый стример выходит в эфир, с превью и ссылкой.
- Погода переписана: сейчас, 24 часа и 5 дней, переключение кнопками и в Discord, и в Telegram.
- Статус сына
х ст: панель со списками статуса и активности и формой для текста и ссылки стрима. Тот же статус видно в карточке на сайте. - Почта
х почта @кент <текст>: письмо в личку от имени сына, можно анонимно (анон) и с вложениями, а получатель может ответить прямо на письмо. - Ротация карт Apex
х карты, курсы и крипта, рецепты, шутки, гонки и сапёр переведены на общие хелперы и работают стабильнее. - Убраны мусорные команды которые выводили только картинку…
- Слэш-команды больше не двоятся.
Портал
- sbln.portal переписан с нуля: история всех версий с первой, таймлайн по ядрам, живой статус сына в карточке Discord, общие лайки (тысяча кликов всё ещё ШЕФ).
- База знаний: как всё устроено и как этим пользоваться, плюс справочник команд прямо из бота.
Экосистема Lois Media
Этим пользуемся только мы, но рассказать стоит, тут половина работы релиза.
- R-WATCHER: дозор за нодами Remnawave. Регулярно проверяет ноды и клиентские порты по TCP, TLS и QUIC (включая Reality), следит за сроками сертификатов и шлёт алерты в Telegram, когда нода падает и когда поднимается.
рв: панель управления нодами на кнопках. Выбор ноды из списка, рестарт одной или всех, тех. работы с причиной через форму и снятие одной кнопкой «Работы завершены».рв диаг: диагностика одной карточкой: API, бэкенд, упавшие ноды, проблемные порты и падения за сутки с простоем.- ragent: агент на нодах,
рв рагентуправляет им из Discord. Показывает диск, сканирует SNI и подбирает лучший домен, чистит место кнопкой, а заодно держит музыкальный резерв на yt-dlp с cookies, через которыйх резервдостаёт треки. - Печкин (PPM): собственная временная или постоянная доменная почта.
х печкиноткрывает панель ящиков: создать временный на 15 минут или постоянный, открыть инбокс, обновить и удалить кнопками. Письма видишь только ты, лимиты на временные ящики в сутки и на постоянные защищают от спама. - Книжный клуб: получил новый внешний вид системы оценивания с динамической формой.
- Говорилка получила единую админку
говори свою БД.
Под капотом
- Пул воркеров. На старте сын сразу поднимает прогретый пул рабочих потоков, не меньше 32 и по 8 на каждое ядро процессора. Обычно .NET добавляет потоки по одному-два в секунду, и при наплыве команд всё ждало бы разгона. Теперь воркеры уже стоят наготове и подхватывают команды мгновенно.
- Все команды и кнопки асинхронные. Каждая уходит своему воркеру и выполняется независимо, без общей очереди. Пока у кого-то качается трек, рисуется демотиватор или грузится погода, остальные получают ответ сразу, а одна зависшая команда больше не тормозит бота целиком.
- Порядок там, где он нужен. У каждого сервера свой замок на плеер: команды одного сервера выполняются по очереди и не ломают друг другу очередь треков, а разные серверы друг друга не ждут вообще.
- Тяжёлое под контролем. Картинки рендерятся не больше двух одновременно, yt-dlp на агенте работает в двух потоках, поэтому даже лавина команд не кладёт сервер.
- Всё в едином контейнере: .NET 10, ffmpeg для звука, Tesseract для распознавания текста, нейросеть для поиска лиц, отдельно живёт только Lavalink.
- Версии собираются автоматически из git-тегов: номер теперь честно читается как ядро.фича.фикс.
- Новая структура ядра: все сервисы через DI, аккуратный запуск и остановка, сын не стартует без базы и честно об этом говорит.
- Один конфиг вместо зоопарка с автосинхронизацией, общие хелперы вместо повторов, уборка кода по всему проекту.
- Общий обработчик ошибок для команд, кнопок и Telegram.
Спасибо всем, кто пользовался сыном последние 5 лет, смеялся, ловил баги и наслаждался его музыкой. Надеюсь, Ubique понравится ещё больше.