Что нового в Echo
История обновлений бота, сайта и игр.
Последнее обновление — 7 ноября·203 записи
История обновлений бота, сайта и игр.
Последнее обновление — 7 ноября·203 записи
Еженедельные голосования приходят на все серверы
Голосование по расписанию открывалось, только если минута совпала с минутой из настроек — с запасом в две минуты, не больше. На двух десятках серверов бот рассылает по очереди, и Discord на каждой отправке просит подождать по три-четыре секунды: хвост списка до окна не доживал, и эти серверы молча оставались без голосования до следующей недели. Теперь бот запоминает, какое плановое открытие он уже отработал, и сравнивает с расписанием, а не с текущей минутой. Опоздал тик, затянулась рассылка, перезапустился бот — пропущенное открывается на следующем же проходе, в пределах шести часов от планового времени. Позже этого срока голосование не приходит: посреди дня оно уже никому не нужно.
Голосования больше не зависают
Опубликованное вручную из панели голосование, живущее по недельному расписанию, оставалось без срока закрытия — и выпадало сразу из обоих кругов: закрывать нечего, а открывать нельзя, потому что оно уже открыто. Такое висело в канале неделями. Теперь при публикации проставляется ближайшее плановое закрытие, а уже зависшие бот подхватывает сам.
Проверка роли перестала врать
Если голосование настроено «отправлять, только когда на роли есть люди», бот раньше смотрел в свою память об участниках. Сразу после перезапуска она пустая, роль выглядела пустой, и голосование не уходило. Теперь при пустом ответе состав роли перезапрашивается, а если проверить не удалось — голосование всё равно отправляется.
Бот сам отчитывается, все ли голосования открылись
Через двадцать минут после планового открытия в канал логов приходит короткий отчёт: сколько голосований открылось из скольких и что помешало остальным — выключенный модуль, удалённый канал, пустая роль. Когда открылись все, так и написано: тишина в этом канале больше не означает «всё хорошо, наверное». Отметка об отчёте хранится в базе, поэтому перезапуски не превращают сверку в поток одинаковых сообщений.
Отложенные посты больше не пропадают молча
Если пост не удавалось опубликовать — канал удалили, у бота отобрали права, Discord попросил подождать, — бот всё равно записывал «опубликовано». В панели стояла отметка о свежей публикации, в канале не было ничего, а разовый пост при этом выключался навсегда и терялся вместе с текстом. Теперь отметка ставится только по факту. Повторяющийся пост держит свой ритм и в следующий раз пробует снова; разовый не выключается из-за временной помехи — бот вернётся к нему через десять минут и будет пробовать сутки. Если канала уже нет, пост отключается сразу, а не делает вид, что всё прошло. Каждая неудача пишется в журнал с номером поста и причиной; розыгрыши, которые не смогли подвести итоги, тоже больше не молчат — раньше они пытались каждые полминуты, не оставляя следа.
Еженедельная сводка приходит один раз
Сводка владельцу сервера отправляется по понедельникам, а отметка «этому серверу уже отправили» жила только в памяти бота и стиралась при каждом перезапуске. Несколько выкладок за день — несколько одинаковых сводок в личке. Теперь отметка хранится в базе и ставится до отправки, одним неделимым запросом: даже перезапуск ровно в момент рассылки не приводит ко второму письму. Закрытая личка больше не вызывает попыток каждые полчаса до конца дня, а в журнале видно, сколько сводок ушло и сколько не дошло.
Музыка снова играет
YouTube отвечал отказом на любую попытку получить звук — не через раз, а на каждый ролик: бот честно пробовал пять раз подряд, потом искал ту же песню на SoundCloud, и всё это время в голосовом канале стояла тишина. Дело в том, каким приложением YouTube представляется программа, которая забирает звук: её обычный выбор перестал работать, а другое приложение из того же списка отдаёт те же ролики без единой осечки. Приложение вынесено в настройку — когда сломается и оно, достаточно вписать другое и перезапустить бота, не дожидаясь обновления.
Раньше команда сервера была подписью и готовым текстом: !правила — и всё. Теперь у неё есть аргументы, права, условия, действия и кнопки.
Аргументы. Команда спрашивает участника, роль, канал, число, файл или текст — Discord подсказывает их прямо при наборе. В ответе они подставляются по имени: «Выдал {роль} игроку {кого} на {срок} дней». Можно задать готовый список значений или свои подсказки, а из двух слов в названии получается подкоманда: /заявка подать, /заявка статус.
Права. Команду можно закрыть правами Discord — тогда её просто не видно тем, кому нельзя. Сверху свои условия: нужные роли, запрещённые роли, разрешённые каналы, кулдаун на человека и на весь сервер, лимит запусков, «один раз на человека», расписание «с 18:00 до 23:00».
Действия. Команда теперь не только отвечает: выдаёт и снимает роли (в том числе на срок), начисляет и списывает монеты, ставит тайм-аут, меняет ник, пишет в канал, открывает тикет или заявку на одобрение. Движок общий с «Панелями действий» — что умеет кнопка, то умеет и команда.
Кнопки и меню под ответом. У каждой кнопки своё действие и свои условия. Меню ролей, участников и каналов Discord собирает сам, а выбранное подставляется в действие: меню ролей + «выдать роль» — и получилась выдача любой роли из списка.
Форма перед выполнением. До пяти полей: причина, срок, ссылка на доказательства. Ответы уходят и в текст, и в действия.
Правый клик. Появился новый вид команд — пункт в меню по правому клику на участнике или на сообщении: «Досье», «Пожаловаться», «В цитаты».
!правила, !ip, !дискорд — бот отвечает вашим текстом или эмбедом. Настраивается в панели: echo-assistants.tech/dashboard → «Свои команды».Статистика в каналах
Роли по реакциям
Модули показываем в движении
Починили вёрстку на телефонах
Автопродление
Оплата: комиссия и починка зачисления
Команда /rollcall убрана
Формат ника не придирается к пробелам
Значки на карточке — по старшинству
Серверный тег убран полностью
Бункер: комната больше не застревает с ботом-ведущим
Правило «Пинг @everyone / @here» записывало одно нарушение три раза: Discord присылает отдельное событие на каждое действие правила автомодерации (блокировка, оповещение, тайм-аут), а у заблокированного сообщения нет id, по которому их можно было бы связать.
На сроке бана это не сказалось — он назначался один, — но в журнале защиты одно происшествие выглядело тремя, а сервер с порогом «3 пинга» наказывал бы за один.
Теперь происшествие узнаётся по серверу, автору и тексту, на котором поймали: сколько бы событий Discord ни прислал, наказание одно.
Генератор достижений
Новая общедоступная страница — echo-assistants.tech/achievement: плашка в духе игровых достижений с вашей подписью.
Меняется заголовок, строка достижения, цвет (золото, изумруд, аметист, лёд, графит) и значок-эмодзи. Картинку можно скачать или взять ссылкой — она рисуется на лету, поэтому в Discord подставляется сама и не требует загрузки файла.
Ширина подгоняется под текст: короткая подпись не болтается в пустой плашке, длинная не обрезается.
Гайды: семь новых статей
Раздел гайдов дополнен модулями, которых в нём не было: их писали до того, как эти функции появились.
Новые статьи: Кадровая система и выговоры, Игры Echo (Мафия, Бункер, Каракули), Музыка, Активность: баллы, задачи и топы, Страница набора сервера, Мониторинг серверов и «Пламя», .
Команда /hr-deploy убрана
Команда /hr-deploy удалена — её заменила кнопка «Опубликовать панель» в разделе «Кадры» на сайте.
Панель по-прежнему обновляется сама при сохранении настроек, а если нужно выложить её заново (пост удалили, форум пересоздали) — это делается кнопкой, без захода в Discord.
Главный рубильник — только у руководства проекта
Переключатель «Бот на этом сервере» убран со страницы обзора сервера: администрации он всё равно был виден только как надпись, а место занимал.
Управление переехало туда, где выдаётся Premium — в раздел «Серверы проекта» (Штаб → Разработка). Там весь список серверов Echo: главный рубильник, Premium и автобэкапы в одной таблице.
Доступ расширен: раньше это мог только разработчик, теперь — руководитель проекта и заместитель. Выдача значков осталась за разработчиком.
Данные ушедших серверов удаляются через месяц
Если бота убрали с сервера, его данные хранятся ещё 30 дней и затем удаляются полностью — настройки, логи, кадры, экономика.
Месяц отсрочки не случаен: сервер часто возвращают — перепутали, чистили роли, потеряли права. Вернули бота раньше — отсчёт отменяется, ничего не теряется. В списке серверов у таких строк видно, сколько дней осталось.
Мониторинг серверов: тройка лидеров и липкий поиск
Страница каталога стала удобнее:
Защита от @everyone и @here
В «Защите» появилось правило «Пинг @everyone / @here». Кто дёрнул всех — сообщение удаляется, а нарушитель получает наказание, которое вы выберете.
Наказание на срок. У правил защиты новое действие «Забанить на срок»: рядом указываете дни (по умолчанию 3), бот сам снимает бан, когда время вышло. «Забанить навсегда» осталось отдельным пунктом. Срок по умолчанию задаётся один раз в настройках защиты.
Кнопка «Поставить правило в Discord». Ставит правило автомодерации Discord на слова @everyone и @here: сообщение с пингом просто не публикуется — звонить он ни у кого не будет. Echo ловит срабатывание и наказывает автора по вашему правилу. Кнопка на странице «Защита», рядом с правилами; исключения берутся из белого списка защиты, оповещения — в канал журнала защиты.
Правило работает и с автомодерацией, заведённой раньше вручную. По умолчанию всё выключено — включается на странице «Защита».
Поддержка видит настройки сервера
Сотрудники отдела поддержки теперь могут открыть дашборд любого сервера с Echo — только на просмотр. Разбирать обращение по скриншотам и описаниям на словах больше не нужно.
Менять что-либо в этом режиме нельзя: сохранение, переключатели и удаление закрыты — и в интерфейсе, и на сервере. Сверху страницы висит пометка о режиме просмотра. Настройки правит только администрация сервера.
Кадры: кнопка «Опубликовать панель»
В разделе «Кадры» появилась кнопка «Опубликовать панель» — рядом с заголовком «Общие». Она выкладывает панель заново, ничего не меняя в настройках: пригодится, если пост удалили, форум пересоздали или панель нужна в новом канале заявлений.
Публикуются уже сохранённые настройки — несохранённые правки в форме в панель не войдут, о чём написано под кнопкой. Панель появляется в течение минуты. Команда удалена.
YouTube примерно в половине случаев отдаёт ссылку на звук, которая тут же отвечает отказом (403) — от этого трек мог молча не заиграть.
Бот и раньше пробовал ещё раз, но узнавал об отказе только через шесть секунд тишины и делал всего три попытки. Теперь отказ виден сразу — повтор уходит через секунду-две, попыток пять, и лишь потом бот ищет ту же песню на SoundCloud.
На слух: меньше пауз перед началом трека и заметно реже «песня пропустилась сама».
Пикер «🔗 Указать канал на другом сервере» есть почти во всех настройках, но сохранялся такой канал только в логах — в остальных модулях он молча превращался в «— не логировать —».
Теперь чужой канал сохраняется везде: тикеты (журнал событий и транскрипты), приветствия, модерация и автомодерация, защита, ролевые панели, панели действий, анкеты и панели анкет, тесты, состав, смены, голосования.
Бот научился слать в такие каналы во всех этих модулях — раньше часть из них искала канал только на своём сервере.
Исключение — канал-ловушка в защите: она ловит участников этого сервера, поэтому там только свои каналы.
Кадровая система тоже: заявки и журнал HR уходят в канал другого сервера, если он указан.
Разобрали свежие логи бота и сайта и починили всё, что там нашлось.
Команды модерации больше не отваливаются с «приложение не отвечает». У Discord на ответ есть три секунды, а /warn, /ban, /kick, /mute, /unmute до ответа успевали сходить в Discord по нескольку раз: найти участника, выдать наказание, отписать в мод-лог, написать нарушителю в личные сообщения. Все эти запросы стоят в общей очереди ограничений, и ожидания по 4–8 секунд в логах — обычное дело. К моменту ответа окно закрывалось: модератор видел ошибку, хотя наказание было применено, а дело заведено. Теперь такие команды сразу занимают место под ответ и дописывают его, когда работа закончена.
Кнопки «заглушить всех» и очистка списков в голосовых каналах — та же причина, то же лечение: заглушка каждого участника отдельный запрос, и в полном канале обход не укладывался в три секунды.
Отказы остались скрытыми. «У тебя нет прав», «роль выше моей» по-прежнему видит только тот, кто нажал.
Кнопка на сайте не пропадает после обновления. Когда сайт выкладывают заново, у открытых вкладок остаётся старый код, и нажатие уходит к действию, которого на сервере уже нет — со стороны кнопка просто перестаёт работать. Плашка «сайт обновился» была и раньше, но появлялась в течение пяти минут, и всё это время можно было жать впустую. Теперь несработавшее нажатие само её показывает — сразу.
Фон авто-баннера. Для сервера, у которого фон был сохранён полной ссылкой на наш же сайт, бот наматывал круг наружу и обратно. Пока снаружи всё хорошо — работает, при первой заминке — баннер без фона; за сутки таких отказов набралось 26. Теперь свой домен разворачивается на внутренний адрес: и надёжнее, и вчетверо быстрее. Ссылки на чужие сайты по-прежнему идут наружу.
Это не видно в интерфейсе, но объясняет, почему дальше будет меньше поломок.
Новый модуль для серверов с Премиумом. Очередь по запросам, панель с кнопками, права и настройки.
Как включить: команда /music play с названием или ссылкой — либо кнопка «Включить» на панели. Саму панель можно прислать в нужный канал командой /music panel.
Прошлись по логам бота и сайта и починили всё, что там накопилось.
Реакции больше не дёргают Discord впустую. На каждую реакцию на любом сообщении бот сначала запрашивал само сообщение и только потом смотрел, реакция-роль это вообще или нет. В 99% случаев — нет. Из-за этого он часами стоял в очереди ограничений Discord: 725 запросов, каждый по ~4 секунды ожидания. Теперь сперва дешёвая проверка, запрос — только если панель действительно нашлась.
Роли владельцев и премиума раздаются пачкой. Синхронизация каждые 15 минут спрашивала Discord про каждого владельца по отдельности — под восемьдесят запросов подряд, и бот упирался в ограничения ровно раз в 15 минут, как по часам. Теперь тот же список запрашивается одним запросом мимо этих лимитов.
Сайт больше не падает при обновлении. Сборка стирала рабочую папку прямо под работающим сервером: он умирал, поднимался заново, а вы в это время ловили 500. Так набежало 102 перезапуска. Теперь сборка идёт в отдельную папку и подменяется готовой — проверили на живом деплое: 42 проверки подряд, ни одного сбоя. Если новая сборка не поднимется, автоматически вернётся предыдущая.
Фон авто-баннера переживает перезапуск сайта. Раньше одна неудачная попытка — и баннер рисовался без фона. Теперь три попытки с паузой.
Журнал изменений чистится как обещано. Срок в 31 день выдерживался только на серверах, где продолжают менять настройки; на остальных записи лежали дольше. Теперь чистка идёт раз в сутки по всей базе.
Ещё: логи бота больше не забиваются короткими ожиданиями очереди (полная статистика всё так же собирается), и сайт переведён на новое имя прослойки в Next 16 — чтобы не отвалилось на следующем обновлении фреймворка.
В дашборде появилась вкладка «Журнал изменений» — доступна администраторам сервера и выше.
Панель берёт роли из своего снимка сервера, а он обновлялся только по событиям Discord. Если событие терялось (переподключение бота, сбой сети), роль навсегда застревала в панели под старым именем и на старой позиции — например переименованная сразу после создания роль сутки показывалась как «новая роль».
Кадровая система: надёжнее
Заявки больше не «зависают»: если сообщение с заявкой удалили, она автоматически снимается и не блокирует повторную подачу на 48 часов. Плюс убрали редкий «Сбой взаимодействия» при одобрении/отклонении заявок под нагрузкой.
Стабильнее фоновые задачи
Оптимизировали загрузку участников в фоновых задачах (авто-бэкапы, живые бэкапы, синхронизация ролей и значков): перевели их на более щадящий способ запроса к Discord. Меньше нагрузки, надёжнее срабатывают бэкапы и авто-роли.
Починили выдачу значков за роли на официальном сервере: сверка ролей и значков переставала отрабатывать из-за перегрузки запроса участников. Теперь значки за роли выдаются и снимаются надёжно.
Оформление ответа. Эмбед с полями, автором и временем, отправка в другой канал или в личные сообщения, автоудаление через N секунд, ветка под ответом, реакции, случайный ответ из списка и режим «молча» — когда команда только выполняет действия.
Журнал и перенос. Видно, кто, когда и с какими аргументами звал команду; есть выгрузка и загрузка файлом — перенести набор на второй сервер или сделать копию. И заготовки: правила, IP сервера, роль по кнопке, жалоба, предупреждение, досье.
Слэш-команды и пункты правого клика по-прежнему на Premium, префиксные — всем.
Мелочи, но по факту
Скорость и доступность сайта
Приветствие на официальном сервере
Готовимся к изменениям Discord
Тикеты открываются надёжнее
Выключенный бот теперь действительно выключен
Журнал удалённых сообщений перестал молчать
Разжигание
Обжалование
Бункер: тренировочные боты убраны
Ведение можно передать — во всех играх
Гайд «Защита от нюка» дополнен разделом про защиту от пинга @everyone и @here: как это работает вместе с автомодерацией Discord и почему в белый список нужно внести роли, которым пинговать положено.
Всего в разделе теперь 34 статьи.
Пинг настраивается у каждого правила защиты
Сводка «Итоги недели» больше не приходит сама
Лог защиты объясняет отказы и помнит, кто выдал роль
Проверка готовности защиты и тест правила
Зимний режим сайта
На сайте появился зимний режим — один переключатель в панели, и праздничное оформление включается на всех страницах сразу.
Что меняется: по всему сайту падает снег, под шапкой загорается гирлянда, фон получает холодную подсветку вместо тёплой.
Включается в разделе «Серверы проекта» (Штаб → Разработка) — доступно руководителю проекта и заместителю. Выкладки и перезапуска не требует: посетители видят изменение в течение полуминуты. У кого в системе стоит «уменьшить движение», снег не показывается.
Страница набора у сервера
У каждого сервера в каталоге появилась своя страница набора: /servers/<сервер>/nabor — шапка сервера, описание и карточки открытых вакансий. Ссылку можно кидать в чат или в шапку профиля, заявка подаётся прямо с сайта.
Вакансии собираются из форм модуля, но только из отмеченных: в конструкторе формы появился блок «Страница набора» с галочкой, полем «Должность» и короткой строкой о вакансии. По умолчанию галочка выключена — формы заводят и для внутренних дел, и вываливать их все посторонним нельзя.
Закрытые наборы со страницы не исчезают, а помечаются «закрыт» — так видно, что позиция вообще есть. На карточке сервера в каталоге кнопка «Набор» с числом открытых вакансий появляется, только когда сервер действительно кого-то ищет.
/hr-deployЗаодно починили выбор форум-канала: раньше смена уже выбранного форума в панели молча не сохранялась.
Кадры: «Повысить» снова видит ранги
В кадровой панели у действий «Повысить», «Понизить» и «Назначить ранг» список рангов был пуст — «нет вариантов», и повысить сотрудника было нельзя.
Причина: отдел в этих действиях не выбирают, и панель искала ранги «без отдела», а ранги почти всегда закреплены за отделом. Теперь отдел берётся у самого сотрудника — в списке его ранги: от стажёра до руководителя.
Если человек ещё нигде не числится, показываются все ранги с пометкой отдела — выбранный ранг заодно переводит его в свой отдел. То же исправление работает и для должностей.
Защита от @everyone включена на серверах Majestic
Защита от пинга @everyone и @here включена на всех 50 серверах Majestic.
Как это работает: правило автомодерации Discord не даёт сообщению с пингом опубликоваться, а Echo по факту срабатывания выдаёт нарушителю бан на 3 дня — он снимается автоматически, когда срок вышел.
Кому пинговать по-прежнему можно: ролям с правом «Упоминать @everyone» или «Администратор» — они внесены в исключения на каждом сервере (1047 записей), плюс владелец сервера. Всё это видно и правится на странице «Защита»: срок бана, наказание и список исключений.
Бот переживает аварии Discord спокойнее. 14 августа Discord отвечал 503 около получаса, и всё это время бот перезапускался каждые десять секунд — 322 раза за сутки. Толку ноль: пока чужой сервис лежит, следующая попытка не лучше предыдущей. Теперь пауза между попытками растёт с пяти секунд до двух минут и обнуляется после удачного входа.
Ещё: починили собственный мониторинг — из-за выключенного за ненадобностью музыкального движка он считал сервер «нездоровым» постоянно и потому молчал о настоящих проблемах.
Бот не падает от одного оборванного запроса. Необработанное отклонение промиса по умолчанию роняет весь процесс — из-за единственного оборвавшегося обращения к чужому серверу молчали сразу все 50 серверов. Теперь такое пишется в лог, и бот продолжает работать; всплеск подобных записей видит мониторинг. Заодно починили саму запись аварий: 14 августа настоящая причина потерялась, вместо неё в лог шесть раз подряд легло бессмысленное «Maximum call stack size exceeded» — Node подавился подготовкой трассировки.
Ещё завели себе ежедневную сводку по логам: мониторинг умел ловить только резкий всплеск ошибок, а ровный ручеёк — то, чем оказалась почти вся сегодняшняя починка, — проходил мимо него незамеченным.
У каждого чужого сообщения в чате «Мафии» и «Бункера» появилась кнопка жалобы — она проступает при наведении и не мозолит глаза. Жалоба уходит модерации вместе с текстом сообщения, автором и номером комнаты: чаты живут недолго и исчезают вместе с партией, поэтому текст сохраняется сразу.
Решение принимается там же, двумя кнопками: заблокировать — с выбором срока (день, три, неделя, месяц или навсегда) — либо отклонить. Что решили и кто решил, дописывается прямо в жалобу, так что история остаётся видимой.
Блокировка общая для всех игр. Закрыт чат — значит, закрыт и в «Мафии», и в «Бункере», иначе наказание обходилось бы переходом в соседнюю игру. Играть при этом никто не мешает: закрывается только возможность писать, включая чат мёртвых и чат мафии.
Пожаловаться можно только войдя на сайт и не чаще пяти раз в минуту — иначе кнопкой завалили бы канал модерации. На себя пожаловаться нельзя.
В панели сервера появился раздел «Сотрудничество» — он открыт владельцу и администраторам. Там сразу видно условия и то, как сервер им отвечает: сколько дней с ботом, участников, сообщений за две недели, сколько человек писало и в скольких днях была активность. Ничего присылать и доказывать не нужно — всё считается по данным, которые бот и так собирает.
Пока условия не выполнены, кнопки подачи нет: видно, чего именно не хватает. Когда всё сходится — можно коротко рассказать о сервере и подать заявку, дальше остаётся ждать решения.
Список команд на сайте отстал от бота — собрали заново.
/activity, /rep, /myrole и остальные разошлись по своим разделам. У каждого раздела теперь свой цвет — нужный видно раньше, чем читаешь подпись./music их тринадцать, и раньше они показывались как необязательные поля ввода — play?, skip?. Теперь это подкоманды, а их описания свёрнуты: страница перестала быть простынёй текста./ ставит курсор в поиск, Esc сбрасывает, рядом видно, сколько команд нашлось.Новый раздел в панели — для владельца и администраторов. Отвечает на один вопрос: сервер живёт или затухает.
Ничего включать не нужно: всё считается по данным, которые бот собирает и так. Глубже месяца заглянуть нельзя — старые дни не хранятся.
Раньше одобрение заявки ничего не меняло: статус менялся в базе, а сервер партнёром не становился. Теперь одобрение выдаёт настоящий статус — Premium на всё время партнёрства, отметку на карточке сервера в каталоге, значок владельцу и место в списке на странице партнёрства. Сам список берётся из базы, а не из файла, который всё это время оставался пустым.
Premium при этом выдаётся отдельно от оплаченной подписки: снятие партнёрства не отбирает то, за что человек заплатил. В Штабе рядом с очередью заявок появился список действующих партнёров — со снятием статуса и причиной.
По понедельникам бот присылает владельцу сервера короткую сводку в личные сообщения: сколько сообщений за неделю, рост это или спад к прошлой, сколько человек писало и сколько затихло. Аналитика в панели отвечает на тот же вопрос, но за ответом надо прийти — а приходят обычно тогда, когда спад уже случился.
Выключается там же, в разделе «Аналитика». Серверы, где за неделю почти не писали, сводку не получают — беспокоить там нечем.
Пропустить чужой трек может диджей или тот, кто его заказал; остальным — голосование.
Про звук отдельно. Разобрались, почему он звучал хуже, чем должен. YouTube отдаёт трек в том же формате, в котором Discord передаёт звук, а бот раскодировал его и кодировал заново — теряя качество на пустом месте. Теперь при обычной громкости исходник уходит нетронутым. Громкость больше не хрипит на больших значениях, битрейт берётся из настроек вашего голосового канала, а частота пересчитывается качественным способом. Отдельная настройка «выравнивать громкость между треками» помогает, когда одна запись орёт, а следующая еле слышна: по умолчанию она выключена — без неё звук идёт вообще без перекодирования, что чище.
Чего не будет, честно. ВК Музыка закрыла доступ сторонним приложениям, а Яндекс.Музыка не работает за пределами России, где стоит сервер бота. У Spotify и Apple Music звук защищён и ботам недоступен, а плейлисты Apple ещё и закрыты для чтения — поэтому по их ссылкам бот ищет ту же запись на YouTube или SoundCloud. Так устроены все музыкальные боты.
Музыка и озвучка «Мафии» больше не мешают друг другу: голосовое подключение у бота одно, и раньше одно вышибало другое. Теперь игра главнее — во время партии музыка не запустится, а если партия начинается под музыку, бот остановит её с предупреждением.
Испорченный телефон рисунками: один пишет фразу, другой её рисует, третий описывает рисунок словами. В конце показывают всю цепочку — от исходной фразы обычно не остаётся ничего.
До 14 игроков, партия на 10–20 минут, рисование прямо в Discord. Не успели нажать «Готово» — работа отправится сама за пару секунд до конца раунда.
Вкладка в дашборде для администраторов и выше: кто что менял в настройках сервера. Не «что-то поменяли», а конкретное поле по-русски и значения «было → стало» — «Ежедневная награда: 100 → 250», «Добавил в «Авто-роли»: @Новичок». Каналы и роли показаны именами.
У каждой записи помечено, кем человек был в тот момент: Руководитель проекта, Заместитель, Владелец сервера, Администратор или Доступ по роли. Фильтры по разделу, человеку и периоду. Хранится 31 день.
У кнопки-категории появилась настройка «Кто может нажимать». Пусто — как раньше, кнопка доступна всем; выбрали роли — открыть обращение по ней смогут только их обладатели, остальные получат вежливый отказ и не увидят форму.
Это не то же самое, что «роли поддержки»: те разбирают обращение, а эта настройка решает, кому вообще можно его создать. Пригодится для категорий вроде «Партнёрам» или «Только для персонала», когда панель общая.
Проверка стоит на всех входах сразу: кнопка панели, кнопка на панели действий и отправка формы — включая случай, когда форму открыли до того, как категорию ограничили.
Комната больше не пропадает при смене фазы: вспышка на переходе ночь/день заливала весь экран, и полторы секунды не было видно ни чата, ни игроков. Теперь это подсветка по краям.
Действия ботом в Discord сюда не попадают — для них по-прежнему модуль «Логи».
Единые иконки на кнопках вместо обычных эмодзи
Кнопки и меню бота там, где значок задаём мы, а не вы, перешли на фирменный набор иконок — как в панели приватных войсов.