Что нового в Echo
История обновлений бота, сайта и игр.
Последнее обновление — 15 октября·159 записей
Сентябрь202616 записей
- 30ср
Капча при верификации больше не отвечает «Код неверный» на верный код
Верификация
- Исправлено: после верного кода роль выдавалась, но ответ «Готово» иногда не успевал дойти, окно показывало ошибку, а повторная отправка того же кода приходила с «Код неверный или устарел»
- теперь бот сразу принимает код и отвечает, даже если Discord медленно выдаёт роли
- если доступ уже выдан, повторная отправка кода отвечает «Готово», а не ошибкой
- Кнопка «Подтвердить» без капчи тоже больше не теряет ответ на медленной выдаче роли
- Исправлено: после верного кода роль выдавалась, но ответ «Готово» иногда не успевал дойти, окно показывало ошибку, а повторная отправка того же кода приходила с «Код неверный или устарел»
Карточка приветствия, считалка, прилипающие сообщения и мат, который не долетает до чата
Приветствия
- Карточка картинкой к приветствию: аватар новичка, ник, «Ты 1500-й участник» и название сервера
- бесплатно — 6 шаблонов («Аврора», «Закат», «Полночь», «Бумага», «Неон», «Океан») и свои заголовок и подпись; живой предпросмотр в панели
- с Premium — свой фон, шрифт, цвета и такая же карточка при прощании
- во время рейда карточки не рисуются — приветствия уходят обычным текстом, бот не отстаёт
Считалка
- Новый модуль: участники по очереди пишут числа, ошибка сбивает счёт; рекорд сервера и роль рекордсмену
- можно разрешить примеры вместо чисел («2+3») и выбрать, что делать при ошибке: сбрасывать, прощать одну или не сбрасывать
- удалили или исправили последнее число — бот напомнит, каким оно было
- топ участников — в панели и кнопкой под сообщениями бота
Прилипающие сообщения
- Правила или подсказка всегда последним сообщением в канале — бот сам переставляет их вниз, дожидаясь паузы в переписке
- Текст или карточка; бесплатно — один канал, с Premium — до 25
Автомодерация
- Карточка картинкой к приветствию: аватар новичка, ник, «Ты 1500-й участник» и название сервера
- 28пн
Интеграции, турниры, кланы, поиск напарников, тикеты в форуме и роли за стаж
Интеграции
- Новый модуль в разделе «Сервер»: ваша игра, сайт или CRM передаёт Echo данные участников (фракция, ранг, VIP, уровень), а бот выдаёт роли по правилам
- правило — атрибут, условие и роль: «faction = police», «level ≥ 20», «vip = да»; условие перестало выполняться — роль снимается
- снимаются только роли, выданные интеграцией: роль, которую человеку выдали руками, не трогается
- Привязка аккаунтов: игра выдаёт код, игрок вводит его в Discord — кнопкой на панели «Привязать аккаунт» или командой /link
- Прямая выдача и снятие ролей запросом API — только тех ролей, которые отметил владелец; роли с правами модерации и управления выдать нельзя
- Журнал: кто, каким ключом и что сделал; документация с примерами — на странице «Разработчикам»
- Новый модуль в разделе «Сервер»: ваша игра, сайт или CRM передаёт Echo данные участников (фракция, ранг, VIP, уровень), а бот выдаёт роли по правилам
Premium, Сообщения-карточки, Активность
Лимиты бесплатной версии, вопросы в активности и правка карточек
Premium
- Бесплатно можно завести до 2 панелей тикетов по 3 категории, до 3 отделов, 10 рангов и 10 должностей в кадровой системе и до 5 наград за уровни; с Premium — без ограничений (категорий в панели — до 10)
- если панелей или отделов уже больше, ничего не отключается: они работают и правятся как раньше, но новые сверх этого добавить нельзя
- Транскрипты закрытых тикетов без Premium хранятся 30 дней, с Premium — год
- до сих пор они хранились без срока; уже сохранённые начнут удаляться не раньше 28 октября — есть месяц, чтобы продлить Premium или сохранить нужное
- Текст удалённых и изменённых сообщений для логов бот помнит 7 дней, с Premium — 90 (раньше всем 30)
- новый срок для бесплатных серверов начнёт действовать через неделю, с 5 октября
- Бесплатно можно завести до 2 панелей тикетов по 3 категории, до 3 отделов, 10 рангов и 10 должностей в кадровой системе и до 5 наград за уровни; с Premium — без ограничений (категорий в панели — до 10)
Статусы голосовых, поля в окнах, награда за тег, карточки и опросы Discord
Приватные голосовые
- Под названием личной комнаты теперь виден статус — строка в списке каналов
- «Во что играем»: бот сам пишет игру участников, например «🎮 CS2 · 4»; пока никто не играет, статус пустой
- «Свой текст»: владелец пишет что угодно — «ищем пятого на рейтинг»
- «Ничего»: статус пустой
- На панели комнаты новая кнопка «Статус» — выбор режима и свой текст в одном окне
- Выбор запоминается вместе с другими настройками комнаты и применяется к следующей
- Администратор может выключить автостатус или свои статусы: Голосовые → «Статус «во что играем»» и «Свой статус комнаты»
Поля в окнах Discord
- Под названием личной комнаты теперь виден статус — строка в списке каналов
Картинки в панели тикетов
Тикеты
- В сообщение с кнопкой тикета теперь можно добавить картинку: большую под текстом и маленькую в углу
- в панели: Тикеты → панель → «Сообщение панели» — вставьте ссылку или загрузите файл с компьютера
- картинки появятся в Discord после сохранения и публикации панели
- В сообщение с кнопкой тикета теперь можно добавить картинку: большую под текстом и маленькую в углу
Картинки в форме тикета
Тикеты
- В форму перед открытием тикета можно добавить поле для файлов: участник прикладывает скриншоты или записи экрана прямо в окне, и они приходят в первое сообщение тикета вместе с ответами
- включается в панели, в настройках кнопки тикета: «Файлы в форме» — до 1, 3, 5 или 10 файлов
- поле занимает одно из пяти мест формы
- если у кнопки нет вопросов, форма появится только с полем для файлов
- В форму перед открытием тикета можно добавить поле для файлов: участник прикладывает скриншоты или записи экрана прямо в окне, и они приходят в первое сообщение тикета вместе с ответами
Генератор иконок для ролей — для всех
Инструменты
- Генератор иконок для ролей открыт всем, без выбора сервера: нарисуйте иконку роли, аватар или баннер сервера и скачайте PNG
- ссылка — в подвале сайта, в разделе «Ресурсы»
- поставить иконку на роль сразу, без скачивания, по-прежнему можно из панели сервера
- В панели сервера у редактора появился свой пункт меню — «Иконки ролей» в разделе «Сервер»: раньше до него было не добраться
- Генератор иконок для ролей открыт всем, без выбора сервера: нарисуйте иконку роли, аватар или баннер сервера и скачайте PNG
- 27вс
Echo говорит на пяти языках
Язык бота
- В панели сервера на главной странице появился выбор языка бота: русский, английский, немецкий, испанский или украинский
- На выбранном языке бот отвечает на команды и ведёт панели, тикеты, кадры, смены, музыку, экономику, модерацию и журналы
- Мафия, Бункер и Каракули идут на языке сервера: роли, карточки, события, сообщения ведущего
- язык партии задаётся при её создании и не меняется до конца игры
- Описания slash-команд и названия параметров Discord показывает на языке приложения каждого участника
- Новый сервер сразу получает язык своего сервера Discord, у уже подключённых остаётся русский
- Заготовки по умолчанию — приветствие, работы и товары экономики, кнопки тикетов, голосования — создаются на языке сервера; тексты, которые вы написали сами, не меняются
Музыка
- 21пн
Тикеты открываются даже после удаления ролей поддержки
Кнопка тикета отвечала «Не удалось создать тикет. Проверь права бота» — при исправных правах. Панель тикетов хранит роли поддержки, а на сервере их со временем удаляют и заводят заново. Если хотя бы одна роль из настроек панели больше не существовала, бот не мог собрать права для нового канала и тикет не создавался вовсе — ни у кого на сервере. Сообщение при этом кивало на права бота, и найти причину было невозможно.
- Теперь удалённые роли просто пропускаются: тикет создаётся, доступ получают автор и живые роли поддержки.
- Чтобы вернуть команду в тикеты, проверьте роли поддержки в настройках панели на сайте и укажите актуальные.
- 20вс
Длинные списки — по 25 на страницу
Раньше многие разделы выводили всё разом: чейнджлог на две сотни записей, каталог серверов с «показать ещё», рейтинги мафии и бункера на пятьдесят строк, отзывы, сделки. Теперь везде не больше 25 строк на экране, остальное — по страницам с номерами внизу; номер страницы живёт в адресе, ссылкой на вторую страницу можно поделиться.
- Чейнджлог: страницы по 25 записей, фильтр по разделу при листании сохраняется.
- Каталог серверов: вместо «показать ещё» — страницы; при смене фильтра или поиска возвращаемся на первую.
- Рейтинги мафии и бункера, отзывы о сервере, сделки и отзывы в «Сделках», начисления партнёра — то же листание.
- Панель сервера: ответы на тесты и формы, таблица лидеров теста, архив обращений, статистика смен и поддержки, журнал изменений (страницы вместо «показать ещё»), журнал защиты, розыгрыши, резервные копии, журнал вызовов команды.
- Штаб: промокоды, партнёры, баг-репорты, платежи, журнал штаба, история начислений, игроки Minecraft, пробные периоды, очередь поддержки, жалобы и апелляции.
- 15вт
Премиум-модерация: выключатель формата ника заработал
Галочка «Требовать формат ника» ничего не выключала. Стоило задать хоть один формат и включить «Роли по нику», как бот откатывал роли и слал уведомления «ник участника не соответствует формату сервера» — даже когда владелец снимал главную галочку. Теперь она действительно главная: без неё ни «Роли по нику», ни «Охрана смены ника» не срабатывают, а под галочкой появилась подсказка об этом.
Один замок вместо двух. У раздела была своя галочка «Разрешить администраторам пользоваться этими инструментами» — отдельно от общего замка «Доступ администраторов» на обзоре. Они спорили друг с другом: на обзоре раздел открыт, а у администратора он не открывается, потому что кто-то снял внутреннюю галочку (её мог снять и сам администратор, закрыв раздел от себя). Внутренняя галочка убрана; кому из администраторов доступна премиум-модерация, решает только замок на обзоре.
Мониторинг: ссылку на сервер бот делает сам
Карточка без ссылки больше не висит впустую. Владелец включал «Показывать в каталоге», а поле «Ссылка-приглашение» оставлял пустым — карточка попадала в каталог, но без кнопки «Войти», и людям было некуда нажимать. Одиннадцать серверов стояли так неделями. Теперь поле можно не заполнять: Echo стоит на сервере и сам создаёт вечное приглашение — в канал правил или системный канал, а если их нет, в первый текстовый, где ему разрешено звать людей. Сразу после сохранения карточки, а не по расписанию. Если у сервера есть собственный адрес discord.gg/имя — берётся он.
- 14пн
Обновление
Панели действий: удалённая панель больше не висит в канале
В чём была проблема. Панель удаляли или переносили в другой канал, а сообщение с кнопками оставалось на месте. Кнопки выглядели живыми, но записи о панели уже не было — участники жали «Получить роль» и получали «Панель не найдена», админ был уверен, что панель давно снёс.
Что стало. При удалении панели сообщение в Discord снимается вместе с ней, как у форм, тикетов и ролевых панелей. При переносе в другой канал старое сообщение убирается, а в новом бот выкладывает свежее.
- Если такое сообщение уже висит на сервере — удалите его руками, новых не появится.
Обновление
Безопасность сайта: обновления и защита входа
Движок сайта обновлён. Next.js поднят до 16.3.5. В версиях до неё разработчики нашли дыру в обработке картинок: особым файлом в формате AVIF можно было заставить сервер выполнить чужой код, без всякого входа. Мы этот формат раздаём, так что заплатка касалась нас напрямую. Заодно обновлена почтовая библиотека — в ней чинили обход проверки адреса получателя.
Вход считает попытки по аккаунту. Раньше неудачные попытки пароля считались по адресу посетителя, а его сайту сообщает заголовок запроса — и на домены игры, которые открыты напрямую, этот заголовок можно было прислать поддельный и менять на каждой попытке. Починено с двух сторон. Во-первых, сайт больше не верит заголовку: настоящий адрес ему передаёт сам сервер, тем же путём, каким пришло соединение, — подставить туда чужой нельзя. Во-вторых, счётчик теперь стоит и на самом нике: пятнадцать промахов подряд — и вход в этот аккаунт замирает на десять минут, откуда бы ни стучались. Побочно починились и журналы: раньше все посетители были записаны одним адресом, и разбирать по ним было нечего.
- 3чт
Обновление
Музыка снова играет
Больше половины суток бот отказывался включать что-либо с ютуба: в ответ на любой трек — «формат недоступен». В логе за десять часов набралось одиннадцать тысяч таких отказов.
Причина в том, каким клиентом бот представляется ютубу. Клиенты ломаются по очереди и без предупреждения: прошлый раз мы уходили с одного, потому что тот стал отвечать отказом в доступе, — теперь перестал отдавать звуковые дорожки его сменщик.
Чинили дважды. Сначала вернули звук, отдав выбор клиента самой качалке. Потом убрали саму возможность повториться: теперь при отказе, похожем на сломанного клиента, бот сам переходит к следующему в очереди и повторяет попытку. Раньше это означало сутки тишины и правку руками.
Кнопка отклонения в кадровых заявках
Нажатие на «отклонить» иногда молчало: у нажатия есть три секунды на ответ, и запрос к базе перед показом окна успевал их съесть. Теперь окно с причиной открывается сразу, а проверки — при отправке.
Обновление
Ивенты: анонсы и победители
Новый раздел в панели управления — «Ивенты». Он для команд, которые регулярно проводят мероприятия и каждый раз собирают один и тот же пост руками: баннер, призовой фонд, тег роли.
Теперь мероприятия живут в справочнике: у каждого своё название, картинка и призовой фонд. Ивент-команда жмёт кнопку на панели, выбирает мероприятие из списка — и анонс уходит в канал готовым. Публикация победителя устроена так же: выбрал мероприятие, вписал имя, статик и фотоотчёт.
Справочник правится и с сайта, и прямо из Discord — кнопкой на самой панели, чтобы за добавлением нового конкурса не приходилось идти в браузер. Тексты обеих публикаций свои: в них подставляются название мероприятия, призовой фонд, имя победителя и статик.
- 2ср
Панели действий: пятое поле формы и длинные цепочки действий
В чём была проблема. Оба случая выглядели как поломка, а были молчаливым обрезанием при сохранении: редактор принимал сколько угодно, кнопка «Сохранить» отрабатывала без ошибки, а лишнее не доезжало до базы.
Поля формы заявок. Пятое поле пропадало: сохранялось только четыре, хотя Discord разрешает пять строк в окне и весь остальной бот работает именно с пятью. Теперь пятое поле сохраняется и показывается.
Цепочка действий. Сохранялись только первые пять действий — поэтому шестое и дальше «не срабатывали» и казалось, что после пятого ломается проверка условий. На деле их просто не было. Предел поднят до двадцати пяти: этого хватает на длинные цепочки с условиями, а выполняет их бот по очереди, как и раньше.
- Заодно длинный ответ такой цепочки больше не роняет нажатие: раньше при выходе за предел Discord кнопка отвечала «не удалось выполнить действие», хотя действия уже выполнились.
Спасибо @Metallist (баг #29) и @VanGex (баг #28) — оба репорта попали точно в причину.
- 1вт
Свой бот больше не работает без Echo
В чём была проблема. Свой бот подключается отдельно от Echo, и на сервере, с которого Echo убрали, он продолжал работать как ни в чём не бывало: настройки хранятся ещё неделю на случай возвращения, а всё это время бот держал сессию и отвечал на команды. Со стороны это выглядело так, будто выгнать Echo нельзя — он остаётся под другим именем.
Что стало. Нет Echo — нет и своего бота: он не поднимается вовсе, а не отключается после подъёма. В панели у такого бота теперь стоит «отключён» с прямой причиной, а не «подключён» у бота, которого нет. Вернёте Echo — свой бот поднимется сам следующим проходом, ничего перенастраивать не нужно.
Август2026103 записи
- 31пн
Музыка больше не роняет бота целиком
В чём была проблема. На сервере не оказалось ffmpeg — программы, через которую бот пропускает звук. Каждая попытка включить музыку упиралась в его отсутствие, и вместо отказа одного трека падал весь процесс: на минуту отваливались все серверы разом. Нажатые в этот момент кнопки и команды отвечали «приложение не ответило вовремя» — со стороны это выглядело как случайные сбои на ровном месте, хотя причина была одна.
Что стало. ffmpeg установлен, музыка играет. А чтобы это не повторилось, отказ запуска обрабатывается там же, где и отказ источника: не заигравший трек теперь остаётся не заигравшим треком и уводит плеер к следующему, вместо того чтобы гасить бота.
- Причина отказа пишется в лог с названием и ссылкой на трек — раньше в логе оставалась голая системная ошибка без единого намёка, на чём именно всё сломалось.
- 30вс
Заявка больше не запирает человека навсегда
Одобренная бессрочная заявка считалась активной вечно. Если у кнопки включено «один активный запрос на человека», а срок не задан, то после первого же одобрения подать заявку снова было нельзя — никогда. Панель вступления во фракцию превращалась в одноразовую на всю жизнь, а бот советовал «дождитесь окончания» того, что не кончится.
Теперь активной считается только та заявка, которая действительно активна: ещё не рассмотренная либо одобренная на срок, пока срок идёт. Одобренная бессрочно не мешает подать новую.
- Сообщение стало точнее: «ещё на рассмотрении — дождитесь решения» и «уже действует одобренная заявка — дождитесь окончания срока» вместо одной фразы на оба случая.
Цепочки действий: условия заработали, а формы стали отправляться
Условие на заявке, тикете и форме не проверял никто. В цепочке действий у каждого шага можно указать «выполнять, только если есть роль». Для выдачи ролей, монет и сообщений это работало. Но заявка, тикет и форма без рассмотрения исполняются иначе — они забирают нажатие себе и открывают окно, — и выбирались просто как «первое действие такого типа», не глядя на условие.
Из-за этого ветвление не работало вовсе. Цепочка вида «заявка в канал A, если роль A → заявка в канал B, если роль B» всегда отправляла заявку в канал A: условие первого шага никто не смотрел, а до второго дело уже не доходило. Сколько бы шагов вы ни настроили, срабатывал первый.
Кнопка «Написать в канал» с полями формы не отправлялась. Отправка формы приходит отдельным событием, и бот заново искал нужное действие в цепочке — по тому же правилу «первое подходящее». Если перед формой стоял любой другой шаг, находился он, вид действия не совпадал, и вместо отправленной формы человек получал ошибку. Заявки в цепочке из нескольких штук по той же причине уходили не в тот канал, даже когда окно открывалось от правильной.
Схема панели: видно всю цепочку сразу
У панелей действий появился режим «Схема». Предпросмотр показывает, что будет, если нажать одну конкретную кнопку. Когда кнопок десяток, у половины свои условия, а у меню ещё и пункты со своими цепочками — собрать картину целиком можно было только в голове.
- Схема разворачивает панель деревом: кнопка → условия доступа → форма → пронумерованные шаги, а у меню отдельная ветка на каждый пункт.
Видно то, что раньше приходилось помнить. У каждой кнопки её цвет, тип, значок замка при условиях доступа и значок формы, если бот что-то спросит перед действием. Кнопка «Настроить» на узле прокручивает к его настройкам и подсвечивает их.
Карта панелей: все панели сервера на одном холсте
Отдельная страница, куда ведёт кнопка «Карта панелей». Холст тянется мышью, приближается колесом, узлы перетаскиваются, раскладка запоминается. Тикет-панели показаны отдельными узлами, и от кнопки, которая открывает тикет, к ней ведёт стрелка: раньше эта связь существовала только в голове — панель действий и тикет-панель живут в разных разделах.
Поля в настройках снова видно
В «Ролях по реакциям» форма выглядела сломанной. Карточка и поля ввода оказались одного цвета, рамок нет — на экране висели только подсказки, и было непонятно, куда нажимать. Теперь у каждого поля свой лейбл и видимые границы. Та же ошибка нашлась и исправлена в «Активности / баллах».
- 28пт
Форма, которую не нужно одобрять, и тихий час по своему поясу
Кнопка панели может открывать форму, ответы из которой сразу уходят карточкой в канал. Раньше форма была только у заявки на одобрение, и отчёт о проделанном — «сдал смену», «запись с рейда», «вынес предупреждение» — приходилось оформлять как заявку с кнопкой «одобрить», которую жали не глядя. Теперь у действия «Написать в канал» есть свои поля и пинг ролей: заполнил — ушло по адресу.
Тихий час в отклике на теги считается в своём часовом поясе. По умолчанию московский, но у команды из другого города «не дёргать с 23 до 8» означало нашу ночь, а не их. В настройке появился выбор пояса — от Калининграда до Камчатки.
Напоминания по заявкам можно ставить лестницей: через сколько минут звать дежурных, кого звать вторым шагом и нужно ли повторять дальше.
Авто-сообщение с удалённым каналом больше не бьётся в стену. Если канал удалили, публикация останавливается, а владельцу приходит уведомление — раньше бот пытался отправить его каждые полчаса бесконечно, и об этом никто не знал.