Что нового в Echo
История обновлений бота, сайта и игр.
Последнее обновление — 7 ноября·203 записи
История обновлений бота, сайта и игр.
Последнее обновление — 7 ноября·203 записи
Новый дизайн всех карточек, аниме, цены скинов CS2 и пиар для серверов каталога
Статус своего бота и месяц бэкапов в Premium
Обновление
Echo на 10 языках: турецкий, португальский, польский, казахский и белорусский
Лимиты бесплатной версии, вопросы в активности и правка карточек
Обновление
Витрина ролей за рубли и два пакета Premium
Кнопка тикета отвечала «Не удалось создать тикет. Проверь права бота» — при исправных правах. Панель тикетов хранит роли поддержки, а на сервере их со временем удаляют и заводят заново. Если хотя бы одна роль из настроек панели больше не существовала, бот не мог собрать права для нового канала и тикет не создавался вовсе — ни у кого на сервере. Сообщение при этом кивало на права бота, и найти причину было невозможно.
Раньше многие разделы выводили всё разом: чейнджлог на две сотни записей, каталог серверов с «показать ещё», рейтинги мафии и бункера на пятьдесят строк, отзывы, сделки. Теперь везде не больше 25 строк на экране, остальное — по страницам с номерами внизу; номер страницы живёт в адресе, ссылкой на вторую страницу можно поделиться.
Галочка «Требовать формат ника» ничего не выключала. Стоило задать хоть один формат и включить «Роли по нику», как бот откатывал роли и слал уведомления «ник участника не соответствует формату сервера» — даже когда владелец снимал главную галочку. Теперь она действительно главная: без неё ни «Роли по нику», ни «Охрана смены ника» не срабатывают, а под галочкой появилась подсказка об этом.
Один замок вместо двух. У раздела была своя галочка «Разрешить администраторам пользоваться этими инструментами» — отдельно от общего замка «Доступ администраторов» на обзоре. Они спорили друг с другом: на обзоре раздел открыт, а у администратора он не открывается, потому что кто-то снял внутреннюю галочку (её мог снять и сам администратор, закрыв раздел от себя). Внутренняя галочка убрана; кому из администраторов доступна премиум-модерация, решает только замок на обзоре.
Мониторинг: ссылку на сервер бот делает сам
Карточка без ссылки больше не висит впустую. Владелец включал «Показывать в каталоге», а поле «Ссылка-приглашение» оставлял пустым — карточка попадала в каталог, но без кнопки «Войти», и людям было некуда нажимать. Одиннадцать серверов стояли так неделями. Теперь поле можно не заполнять: Echo стоит на сервере и сам создаёт вечное приглашение — в канал правил или системный канал, а если их нет, в первый текстовый, где ему разрешено звать людей. Сразу после сохранения карточки, а не по расписанию. Если у сервера есть собственный адрес discord.gg/имя — берётся он.
Если права нет — владелец узнает. Когда боту не хватает права «Создавать приглашения», он шлёт владельцу одно уведомление с просьбой выдать право или вписать ссылку руками, а не молчит.
Тумблер «Показывать в каталоге» срабатывает сразу. Раньше он был обычным полем формы: щёлкнул — «включено», а в каталог сервер попадал только после кнопки «Сохранить» внизу страницы; к тому же до первого сохранения тумблер рисовался включённым, и владелец уходил уверенным, что сервер в каталоге, — а его там не было. Теперь щелчок сам создаёт карточку и включает её (или снимает), без «Сохранить», а пока карточки нет, тумблер честно показывает «выкл».
Видно, есть ли сервер в каталоге — и почему нет. Над настройками стоит плашка с ответом: «Карточка в каталоге — N-е место в топе» со ссылкой на карточку, либо «Карточки в каталоге нет» с причиной — не сохранено, бота нет на сервере, выключен тумблер, скрыта модерацией. Если карточка есть, но без кнопки «Войти» (нет приглашения, ссылка мертва, вход заблокирован), плашка говорит и это, и что делать.
Панели действий: удалённая панель больше не висит в канале
В чём была проблема. Панель удаляли или переносили в другой канал, а сообщение с кнопками оставалось на месте. Кнопки выглядели живыми, но записи о панели уже не было — участники жали «Получить роль» и получали «Панель не найдена», админ был уверен, что панель давно снёс.
Что стало. При удалении панели сообщение в Discord снимается вместе с ней, как у форм, тикетов и ролевых панелей. При переносе в другой канал старое сообщение убирается, а в новом бот выкладывает свежее.
Обновление
Безопасность сайта: обновления и защита входа
Движок сайта обновлён. Next.js поднят до 16.3.5. В версиях до неё разработчики нашли дыру в обработке картинок: особым файлом в формате AVIF можно было заставить сервер выполнить чужой код, без всякого входа. Мы этот формат раздаём, так что заплатка касалась нас напрямую. Заодно обновлена почтовая библиотека — в ней чинили обход проверки адреса получателя.
Вход считает попытки по аккаунту. Раньше неудачные попытки пароля считались по адресу посетителя, а его сайту сообщает заголовок запроса — и на домены игры, которые открыты напрямую, этот заголовок можно было прислать поддельный и менять на каждой попытке. Починено с двух сторон. Во-первых, сайт больше не верит заголовку: настоящий адрес ему передаёт сам сервер, тем же путём, каким пришло соединение, — подставить туда чужой нельзя. Во-вторых, счётчик теперь стоит и на самом нике: пятнадцать промахов подряд — и вход в этот аккаунт замирает на десять минут, откуда бы ни стучались. Побочно починились и журналы: раньше все посетители были записаны одним адресом, и разбирать по ним было нечего.
Файл с ключами закрыт от посторонних. Настройки сайта с паролями к базам лежали с правом чтения для всех пользователей машины. Оставлено чтение только владельцу.
Музыка снова играет
Больше половины суток бот отказывался включать что-либо с ютуба: в ответ на любой трек — «формат недоступен». В логе за десять часов набралось одиннадцать тысяч таких отказов.
Причина в том, каким клиентом бот представляется ютубу. Клиенты ломаются по очереди и без предупреждения: прошлый раз мы уходили с одного, потому что тот стал отвечать отказом в доступе, — теперь перестал отдавать звуковые дорожки его сменщик.
Чинили дважды. Сначала вернули звук, отдав выбор клиента самой качалке. Потом убрали саму возможность повториться: теперь при отказе, похожем на сломанного клиента, бот сам переходит к следующему в очереди и повторяет попытку. Раньше это означало сутки тишины и правку руками.
Кнопка отклонения в кадровых заявках
Нажатие на «отклонить» иногда молчало: у нажатия есть три секунды на ответ, и запрос к базе перед показом окна успевал их съесть. Теперь окно с причиной открывается сразу, а проверки — при отправке.
Обновление
Ивенты: анонсы и победители
Новый раздел в панели управления — «Ивенты». Он для команд, которые регулярно проводят мероприятия и каждый раз собирают один и тот же пост руками: баннер, призовой фонд, тег роли.
Теперь мероприятия живут в справочнике: у каждого своё название, картинка и призовой фонд. Ивент-команда жмёт кнопку на панели, выбирает мероприятие из списка — и анонс уходит в канал готовым. Публикация победителя устроена так же: выбрал мероприятие, вписал имя, статик и фотоотчёт.
Справочник правится и с сайта, и прямо из Discord — кнопкой на самой панели, чтобы за добавлением нового конкурса не приходилось идти в браузер. Тексты обеих публикаций свои: в них подставляются название мероприятия, призовой фонд, имя победителя и статик.
Доступ раздаётся ролями: отдельно те, кто пользуется панелью, отдельно те, кому можно править справочник.
Подпись под анонсом
Под постом стоял юзернейм Discord — вида adm.roxy, а не то имя, под которым человека знают на сервере. Теперь по умолчанию ник на сервере, и это выбирается в настройках: ник, имя пользователя или вовсе без подписи.
В чём была проблема. Оба случая выглядели как поломка, а были молчаливым обрезанием при сохранении: редактор принимал сколько угодно, кнопка «Сохранить» отрабатывала без ошибки, а лишнее не доезжало до базы.
Поля формы заявок. Пятое поле пропадало: сохранялось только четыре, хотя Discord разрешает пять строк в окне и весь остальной бот работает именно с пятью. Теперь пятое поле сохраняется и показывается.
Цепочка действий. Сохранялись только первые пять действий — поэтому шестое и дальше «не срабатывали» и казалось, что после пятого ломается проверка условий. На деле их просто не было. Предел поднят до двадцати пяти: этого хватает на длинные цепочки с условиями, а выполняет их бот по очереди, как и раньше.
Спасибо @Metallist (баг #29) и @VanGex (баг #28) — оба репорта попали точно в причину.
В чём была проблема. Свой бот подключается отдельно от Echo, и на сервере, с которого Echo убрали, он продолжал работать как ни в чём не бывало: настройки хранятся ещё неделю на случай возвращения, а всё это время бот держал сессию и отвечал на команды. Со стороны это выглядело так, будто выгнать Echo нельзя — он остаётся под другим именем.
Что стало. Нет Echo — нет и своего бота: он не поднимается вовсе, а не отключается после подъёма. В панели у такого бота теперь стоит «отключён» с прямой причиной, а не «подключён» у бота, которого нет. Вернёте Echo — свой бот поднимется сам следующим проходом, ничего перенастраивать не нужно.