У каждой загрузки теперь есть свой экран ожидания. Раньше при переходе браузер до последнего показывал прежнюю страницу: клик как будто не срабатывал, и по кнопке жали ещё раз. Теперь сразу появляется кольцо и подпись — что именно готовится: «Собираем ваши серверы», «Открываем настройки», «Проверяем состояние сервисов» и так далее, на всех пяти языках сайта.
Заготовки вместо пустоты. Пока данные едут, на их местах видны контуры будущих карточек — содержимое встаёт в готовую раскладку, и страница не прыгает в момент появления. Если в системе отключены анимации, всё показывается статично.
Меньше лишних проверок по серверам, откуда бота выгнали
СайтАнглийской версии пока нет
Английской версии пока нет
Проверка приглашений больше не ходит на серверы без бота. Раз в шесть часов бот проверял ссылки всех карточек каталога — включая те серверы, откуда его уже выгнали. Толку от этого не было: карточка из каталога и так пропадает, новую ссылку создать негде, владельцу не написать. Оставались только лишние запросы к Discord и записи в логе. Теперь такие карточки пропускаются сразу.
Пустая строка Lavalink убрана из списка сервисов. Отдельный звуковой движок в работе не участвует — музыку бот играет сам. Его строка со статусом «остановлен» была неотличима от упавшего сервиса при каждой проверке; когда движок понадобится, он поднимается одной командой.
Список серверов в панели открывается сразу
Страница со списком серверов грузилась секундами. При каждом её открытии сайт заново спрашивал у Discord, какими серверами вы управляете, и вдобавок по очереди опрашивал каждый сервер с настроенными ролями панели — «а этот человек там есть?». Ответ «нет» не запоминался вообще, поэтому полсотни запросов повторялись при каждом заходе: одиннадцать секунд ожидания на пустом месте.
Теперь список сохраняется. Он собирается при входе и обновляется в фоне, уже после того как страница показана. Открытие — доли секунды вместо секунд.
Авто-сообщения: отправка в заданное время и по дням недели
СайтАнглийской версии пока нет
Английской версии пока нет
Авто-сообщения теперь умеют «каждый день в 9:00». Раньше был только интервал — «раз в N часов». Объявление к началу смены или напоминание на ночь приходилось подгадывать первой отправкой, и после любой задержки время уезжало.
В настройке появился выбор режима: «по интервалу» — как было, или «в определённое время» — тогда указывается час и минута по Москве.
Можно выбрать дни недели. Пусто — каждый день; отметили пн и пт — только по этим дням. Так собирается и «каждый понедельник в 9:00 — планёрка», и «по будням в 21:00 — сводка».
Время не съезжает. Следующая отправка считается от расписания, а не «через сутки от фактической»: если бот был занят или Discord тормозил, сообщение всё равно вернётся к своему часу.
Панель: вернули кнопку сохранения и починили её на телефоне
Кнопка «Сохранить» вернулась в плашку с напоминанием. У разделов панели своей кнопки сохранения нет — они отдают изменения именно в эту плашку. Пока её не было, настройки не сохранялись на двух десятках страниц: от логов до модерации.
На телефоне плашка перестала слипаться. Картинка накрывала заголовок, текст рвался на шесть строк, а «Отмена» налезала на него. Теперь на узком экране это колонка: подпись сверху, кнопки строкой снизу.
Мониторинг подсказывает, почему протухла ссылка. Если боту не выдано право создавать приглашения, ссылка на сервер в каталоге умирает, а обновить её он не может. Раньше об этом знал только лог — теперь написано прямо в разделе, вместе с тем, что нужно выдать.
Розыгрыши, защита и формы: чиним то, что молчало
БотАнглийской версии пока нет
Английской версии пока нет
Розыгрыши: «Реролл» и «Удалить» срабатывают сразу. Кнопки на сайте ставили задачу в очередь, а бот забирал её раз в полминуты — со стороны выглядело, что они не работают, и люди жали снова и снова. Теперь сайт будит бота сигналом, строка сразу подписывается «реролл запрошен» или «удаляется», а список обновляется сам.
Отказ перестал быть тихим. Раньше ответ сервера не проверялся: нет прав — выглядело ровно как успех. Теперь появляется красная строка с причиной.
Пустой реролл больше не молчит: если участников не было, бот так и пишет в канал, а не оставляет тишину.
Защита ловит добавление бота надёжнее. Правило «Добавление ботов» опиралось на событие аудита, а Discord доставляет его через раз: на живом сервере бота добавили, событие не пришло, и через пять минут он выкинул восемь человек. Теперь бот проверяет каждого пришедшего бота сам и находит в аудите, кто его привёл. Одно и то же добавление дважды не накажет.
Взбесившегося бота теперь кикает, а не «снимает роли». Права бота живут на роли интеграции — снять её нельзя, и наказание отрабатывало вхолостую.
Формы перестали пропадать. Если настройку панели меняли, пока человек заполнял форму, отправка падала с ошибкой в консоль, а заявка исчезала без следа. Теперь бот читает то, что реально прислали, а при нехватке обязательного поля честно просит открыть форму заново.
Кнопки с формой открываются вовремя. У Discord три секунды на ответ; поход в базу за лимитом нажатий их съедал, и вместо формы появлялось «взаимодействие не сработало». Проверки по памяти остались перед формой, лимит проверяется при отправке.
Заявки: напоминания по шагам, досье в форуме, дашборд, статистика и выплаты
БотАнглийской версии пока нет
Английской версии пока нет
Заявки дозрели до полноценного конвейера. Раньше это была подача → карточка на рассмотрение → одобрил/отклонил. Теперь вокруг неё выросло всё, чего не хватало для настоящей работы отдела.
Лестница напоминаний вместо одного порога. Шаги задаются списком: через час — дежурным, ещё через три — им же, ещё через два — руководству, дальше повторять каждые шесть часов. У каждого шага свои роли и свой канал; последний шаг помечается как эскалация.
Досье в форуме. Карточка заявки дублируется в ветку форума и обновляется вместе со статусом. Ветка ищется по имени и заводится сама — так в одном месте копится вся история по организации, отделу или объекту, и её видят те, кто не имеет доступа к каналу рассмотрения.
Дашборд открытых заявок — одно живое сообщение: сколько сейчас висит, сколько каждая ждёт, кто взял, ссылка на карточку. Обновляется при каждой подаче и решении.
Статистика проверяющих — кто сколько взял, одобрил, отклонил и за сколько в среднем. Неделя считается с понедельника по Москве.
Выплаты за одобренные заявки. Раз в неделю бот собирает всё одобренное и ещё не оплаченное, считает по цене за заявку, группирует по полю формы (обычно ник) и присылает отчёт с кнопками «Выплачено / Отменить / Пересчитать». Заявка помечается номером отчёта — дважды её не оплатят; «Отменить» возвращает заявки в следующий расчёт, «Пересчитать» применяет новую цену.
Отклик на теги: свой канал и своя роль у каждого сервера
СайтАнглийской версии пока нет
Английской версии пока нет
У каждого наблюдаемого сервера теперь свой канал напоминаний и своя роль. Раньше канал и тег были одни на всё отслеживание — а роль живёт внутри своего сервера, и тег роли соседнего сервера в общем канале не срабатывал вовсе: напоминание приходило «без тега», и дежурный о нём не узнавал.
В строке сервера появились два поля: «Канал напоминаний этого сервера» и «Кого тегать на этом сервере». Оставили пустыми — работает общая настройка, как и было; заполнили — бот зовёт именно там и именно ту роль.
Сводка после тихого часа тоже разъехалась по серверам: каждому уходит свой список в свой канал со своим тегом, а не общая простыня.
Галочки и переключатели — в цветах панели
СайтАнглийской версии пока нет
Английской версии пока нет
Галочки на всём сайте стали своими. Системный флажок рисует операционная система: на тёмной панели он приходил ярко-синим квадратом Windows и не совпадал ни с одним другим элементом. Разные страницы пытались лечить это по-своему, и цвет получался разный. Теперь флажки и радиокнопки — в цветах панели, с фокусом, промежуточным состоянием и приглушённым видом у выключенных. Правило одно на весь сайт, поэтому починились и те формы, куда никто давно не заглядывал.
Бот: команды с целью, карточки напоминаний и причины пропуска голосований
БотАнглийской версии пока нет
Английской версии пока нет
Свои команды теперь действуют на того, кого в них назвали. Кнопка под ответом выдавала роль тому, кто её нажал, — собрать «!verify <id> → карточка с кнопками → роль уходит этому пользователю» было нельзя. В каждом действии появился выбор «Кому»: тому, кто нажал, или участнику из аргумента команды.
Появились поля профиля этого пользователя: {target}, {target.name}, {target.tag}, {target.id}, {target.avatar}, {target.created}, {target.joined}, {target.roles}, {target.toprole}, {target.onserver}. Те же поля есть у любого аргумента по его имени — например, {member.joined}. Каждое имя работает и по-русски: {цель.ник}, {цель.зашёл} — то же самое. Дата регистрации считается из самого id, поэтому известна даже про того, кого на сервере уже нет.
Кнопки помнят, о ком была команда. Нажатие может случиться через час, когда аргументов уже нет, — поэтому участник запоминается в самой кнопке. Если он успел выйти с сервера, бот скажет об этом, а не отрапортует «готово».
Что теперь собирается без единой строчки кода: команда с id пользователя отвечает карточкой с его профилем и тремя кнопками — «Верифицировать» (выдать роль), «Выдать недопуск» (другая роль и запись в канал), «Отказать» (снять роль и написать причину). У каждой кнопки свои роли, кому она доступна, и свой лог.
Напоминания об оставленном теге стали карточками. Была строка «@роль Без ответа уже 2 минуты» и ссылка отдельным абзацем: в канале, куда падает десяток таких, взгляду не за что зацепиться. Теперь сразу видно, кто звал, в каком канале, когда — временем Discord, у каждого в своём поясе, — и сколько висит без ответа. Тег роли остаётся строкой над карточкой: упоминание внутри вложения никого не зовёт.
Панель: отклик на теги, новые разделы меню и страница обновлений
СайтАнглийской версии пока нет
Английской версии пока нет
Отклик на теги — новый раздел в панели. Дежурного зовут тегом роли, и дальше всё держалось на честном слове: ответил или нет, через сколько, кто именно. Проверить это можно было только листая переписку руками — поэтому и не проверяли. Теперь каждый тег отслеживаемой роли попадает в учёт.
Кто настраивает. Раздел ведёт администратор своего сервера: выбирает роль, каналы (пусто — весь сервер), срок ожидания и канал напоминаний. Ролей на одном сервере может быть несколько — дежурного и старшего смены зовут разными тегами, а отчётность общая. Одна настройка сразу на десяток серверов остаётся за руководителем проекта и его замом, и в разделе это прямо помечено.
Тихий час. Часы, в которые бот не дёргает, с поддержкой промежутка через полночь. Просроченное за это время копится молча и уходит одной сводкой, когда тихий час кончится, а не пачкой пингов подряд. Время тихого часа не идёт в срок ответа: вызов в час ночи и ответ в 9:20 — это двадцать минут работы, а не восемь часов просрочки.
Баллы — ступенями по времени. Одного порога «быстро — это до N минут» хватало не всем. Теперь можно задать шкалу: ответил в пределах 60 минут — 3 балла, до 180 — 1, дольше — 0, и отдельная колонка за реакцию. Считается первая подходящая ступень; порядок строк бот выстроит сам, если пороги ввели вперемешку. Начисляется в активность рабочего сервера сразу, без сдачи отчёта.
Аналитика — на отдельной странице. Настройки открывают раз в месяц, а сводку смотрят каждый день. На ней: среднее время ответа, кто сколько закрыл и за сколько, что висит без ответа прямо сейчас и кто за период не ответил ни разу. Средняя скорость выглядит прилично и тогда, когда отвечают двое из десяти, поэтому эти списки стоят рядом.
Музыка снова играет, кнопки выговоров не отваливаются
БотАнглийской версии пока нет
Английской версии пока нет
Музыка. YouTube перестал отдавать треки — качалка устарела на полтора месяца и получала «403 Forbidden». Обновили: треки, падавшие с ошибкой, снова играют, и бот больше не уходит на SoundCloud там, где YouTube работает.
Выговоры. Нажатие «снять выговор» иногда отвечало ошибкой, хотя выговор снимался. Бот успевал сходить в базу, загрузить участника, поправить роль и написать в журнал — а на ответ Discord даёт три секунды. Теперь он отвечает сразу, а работу доделывает после.
Обрывы соединения с базой. Простаивающее подключение молча рвали по пути, и следующий запрос падал уже посреди нажатия кнопки. Включили keep-alive — соединение не засыпает.
Комнаты игр перестали копить утечку
Потоки событий больше не сжимаются. Комнаты Мафии, Бункера, Гартика и страницы сделок держат открытый поток обновлений. Каждая запись в сжатый поток вешала свой обработчик, и сервер ругался на утечку слушателей — по сотне предупреждений в сутки. Сжимать поток из коротких строк всё равно нечего, теперь он идёт как есть.
Сервер больше не пропадает из каталога бота
БотАнглийской версии пока нет
Английской версии пока нет
«Бота нет на сервере», когда он есть. При запуске бот сверял свой список серверов с базой: обновлял живые и удалял «лишние» строки. Список берётся из того, что успел прислать Discord, — и если поток отставал или часть серверов была помечена недоступной из-за сбоя, сверка выкидывала из каталога живые серверы. После этого сайт честно отвечал, что бота на сервере нет: не открывались игры, в панели висело предложение добавить бота.
Теперь удаление только при полной картине. Пустой список серверов, недоступные серверы или список, заметно короче того, что уже в базе, — сверка обновляет данные, но ничего не удаляет и пишет причину в лог. Лишняя строка доживёт до следующего запуска; потерянный сервер ломает всё сразу.
Панель перестала верить каталогу на слово. Прежде чем сказать «бота нет на сервере», она переспрашивает Discord — и если бот на месте, пишет об этом прямо, а не отправляет добавлять бота, который и так стоит.
Награда за Telegram — одна, за вступление в группу
СайтАнглийской версии пока нет
Английской версии пока нет
Платим за вступление в группу бота — 49 ₽. Отдельная награда за саму привязку убрана: привязать Telegram — дело десяти секунд, проекту это ничего не даёт, а деньги списывались с каждого аккаунта. Осталась одна награда и за действие, которое чего-то стоит.
Уже выданное остаётся. Кому бонус за привязку начислен раньше — он никуда не денется; повторно награды не выдаются, как и прежде.
Приватные войсы: понятно, какого права не хватает
Молчаливый отказ вместо ошибки. Если боту не выдали «Перемещать участников», приватные войсы просто не работали: комната не создавалась и в логах ничего не было. Discord не даёт выдать чужой роли право, которого нет у самого бота, — и создание канала падало целиком.
Теперь бот проверяет права заранее и пишет в лог, чего именно не хватает: «Управлять каналами» или «Перемещать участников». Владельцу комнаты выдаются только те права, которые есть у самого бота, — из-за одного недостающего вся комната больше не разваливается.
Что нужно боту там, где создаются комнаты: смотреть канал, подключаться, управлять каналами, управлять правами и перемещать участников. Доступа к категории самого по себе мало.
Панель говорит, почему раздел не работает
«Настроил — не работает» теперь объясняется на месте. Настройки сохраняются всегда, а работают только если у бота есть права там, где он должен действовать. Со стороны это неотличимо, и причину можно было узнать только из логов бота, до которых у владельца сервера доступа нет. Теперь над настройками появляется разбор: чего именно не хватает и что с этим сделать.
Помощник по настройкам: проводник, который покажет и объяснит
СайтАнглийской версии пока нет
Английской версии пока нет
Обход настроек с подсветкой. В любом разделе панели появилась кнопка «Что тут к чему». Помощник по очереди подсвечивает каждую настройку раздела, затемняя остальное, и объясняет её: что она делает и — главное — что изменится на сервере, если её включить. Листается стрелками, закрывается по Esc.
Идёт по каждой настройке, а не по заголовкам. Помощник читает страницу и обходит каждое поле, тумблер и выбор: на форме приветствий это десять шагов вместо двух. Сначала карточка целиком — что это за группа настроек, — затем всё, что внутри неё. Появится новое поле — проведёт и по нему, без отдельной правки.
Не лезет сам. Показывается один раз при первом заходе в панель, дальше открывается только кнопкой.
С проводником. По разделу вас водит тот же персонаж, что живёт в панели несохранённых изменений: перелетает к нужной настройке, оставляя след из искр, и отмечает её вспышкой. Оформление целиком выключается системной настройкой «меньше движения».
Прощание. На последнем шаге фамильяр выходит на середину экрана и колдует на весь экран: расходятся кольца, разлетаются искры, и он уходит вверх. Раньше окно просто пропадало, и было непонятно — экскурсия кончилась или закрылась случайно. Пропускается щелчком.
Значки в колокольчике
СайтАнглийской версии пока нет
Английской версии пока нет
Вместо значка стояло слово. У заявок на сотрудничество, откликов на вакансии и баг-репортов в списке уведомлений выводилось «users», «forms» и «tests» — поле со значком показывается как есть, а туда попадало имя иконки из кода. Поправили и то, что рассылается дальше, и уже разосланные уведомления. Заодно колокольчик теперь сам подставляет значок по умолчанию, если ему передали не эмодзи, — такое больше не покажется словом.
Панель и сайт собраны в одно оформление
СайтАнглийской версии пока нет
Английской версии пока нет
Один тёмный тон вместо пяти. Витрина стояла на холодном сине-зелёном фоне, панель — на нейтральном, а под каждой страницей лежало зелёно-бирюзовое сияние, красившее карточки в свой оттенок. Ореол над первым экраном у каждого раздела был свой: зелёный на главной, фиолетовый в профиле и Мафии, индиговый в команде, золотой в очереди. Теперь фон один на весь сайт, сияние осталось только на первом экране главной и одним цветом.
Одна ширина у всех страниц. Раньше каждая страница объявляла её сама: автомодерация была уже профиля, защита — шире приветствий, а разделы разбора теряли треть ширины на второе боковое меню. Ширина стала общей, а разбор жалоб переехал в главное меню — двух вертикальных меню подряд больше нет.
Кнопки одной формы. Главное действие существовало в двух видах — «таблетка» и прямоугольник, — а второстепенные в пяти, с отступами, отличавшимися на пиксель. Свели к одному набору: 129 кнопок по всему сайту. Шапка сайта стала ниже — она была заметно выше всего, что под ней.
Обзор сервера пересобран. Состояние сервера, частые разделы одним рядом, «что нового» и настройки доступа — вместо стопки разнородных карточек. В меню слева появился поиск по разделам и настройкам, а сами разделы перестали быть плитками: сорок штук в столбик читались как мозаика.
Данные сервера без бота теперь ждут неделю, а не месяц
Срок хранения сокращён с 30 дней до 7. Если бота убрали с сервера, настройки, кадровая система, экономика и логи ждут его возвращения неделю — вернёте раньше, и всё останется на месте. Неделя — тот срок, за который возвращаются: кто не вернулся за семь дней, не возвращается и за тридцать, а данные всё это время лежат у нас без причины.
Жалобы: решение приходит в личку и объясняет отказ
СайтАнглийской версии пока нет
Английской версии пока нет
Решение по жалобе приходит в личные сообщения
Ответ по жалобе и уведомление о наказании складывались в колокольчик на сайте. Но и жалоба, и наказание живут в Discord, а на сайт человек может не заходить неделями: уведомление, которого не увидели, ничем не отличается от молчания. Особенно это касалось наказанного — он просто обнаруживал, что писать в игровом чате больше нельзя, и не знал ни причины, ни срока. Теперь решение приходит и в колокольчик, и личным сообщением от бота: жалобщику — что жалобу разобрали, наказанному — причина, срок и ссылка на обжалование. Закрытая личка ничего не ломает: запись в колокольчике остаётся на месте.
Отказ теперь объясняют
Ответ жалобщику был один на все случаи: «жалобу разобрали, о принятых мерах не рассказываем». Для отказа это выглядело как отписка. Теперь по-разному: если меры приняты — по-прежнему только факт разбора, иначе жалоба превращается в способ узнать, наказан ли конкретный человек. Если отказали — называется причина, та самая, что модератор записал в журнал: нарушения не нашли, недостаточно данных, повтор уже разобранной жалобы. Причина отказа ничего не говорит о наказаниях, поэтому раскрывать её можно. Там же ссылка на обжалование.
Отклонить с предупреждением
Рядом с обычным отказом появилась вторая кнопка. Жалобщику приходит объяснение: нарушения не нашли, жалуйтесь только по делу, за повторные пустые жалобы возможность жаловаться закрывают. Такое решение отдельно помечается в журнале штаба.
Причина решения в один клик
Над полем причины появились готовые формулировки — свои под каждый вид обращения: для игрового чата с рекомендованными сроками, для каталога, для отзывов и профилей, для обжалований отдельно «снять» и «оставить в силе». Нажатие подставляет текст и срок, поправить руками по-прежнему можно. Раньше причину набирали вручную при каждом решении, и в журнал попадало «нарушение правил», по которому через месяц ничего не разобрать.
Каталог: только живые серверы, рабочие ссылки и честный статус
МониторингАнглийской версии пока нет
Английской версии пока нет
Из каталога пропали серверы без бота
Убрали бота с сервера — карточка оставалась. Название и иконку брать уже неоткуда, поэтому в списке висела строка с голым номером сервера вместо имени и нулём онлайна, и держалась так до месяца. Теперь каталог, поиск, «похожие серверы», случайный сервер, места в топе, а вместе с ними топ и «сервер дня» в Discord показывают только те серверы, где бот сейчас стоит. Страница такого сервера отвечает «не найден».
Бота вернули — карточка вернулась
Ничего заполнять заново не нужно: описание, теги, оформление, отзывы и огоньки лежат на месте весь месяц, и карточка появляется в каталоге сама, с прежним местом в топе.
Мёртвые приглашения чинятся сами
Приглашение на сервер истекает или пропадает вместе с тем, кто его создал. Бот замечал это и ставил карточке пометку «недействителен» — на этом всё. Владельцу никто не говорил, люди продолжали жать «Войти», попадая в никуда; на момент правки так вело себя каждое четвёртое объявление, а у одного из них было 18 переходов в пустоту. Теперь бот чинит сам: создаёт новое вечное приглашение — в канале правил, системном или первом подходящем — и подставляет его в карточку, а владельцу приходит уведомление, что делать ничего не нужно. Если права «Создавать приглашения» у бота нет, он честно пишет об этом: выдайте право или впишите ссылку сами. Одно письмо на поломку, а не каждые шесть часов при очередной проверке. Сразу после выкладки починились пять объявлений, и все новые ссылки проверены.
Статус: доступность за неделю и список сбоев
Страница статуса показывала сутки. Ночная поломка держалась в этой цифре ровно сутки, а потом исчезала, будто её не было; да и «99.9%» одинаково выглядит при трёх минутах днём и получасе ночью. Теперь рядом с суточной доступностью каждого сервиса есть недельная, а под карточками — список сбоев за неделю: что легло, когда и на сколько минут. Если за неделю ничего не падало, так и написано. Замеры бот собирал и раньше, каждые три минуты, — просто видел их только штаб.
Свой бот теперь говорит за весь Echo, а не только за команды
БотАнглийской версии пока нет
Английской версии пока нет
На что жаловались
Премиум-сервер подключает собственного бота, чтобы всё происходило под его именем и аватаром. Но под его именем шли только ответы на команды и реакции на события. Всё, что затевает сам Echo — голосования по расписанию, отложенные посты, панели, поздравления, ночной режим, счётчики в названиях каналов, — и всё, что отправляет сайт из панели управления, уходило от Echo Assistant. Получалось, что на сервере говорят два бота, хотя человек подключал одного.
Что изменилось
Теперь адресат определяет исполнителя: если у сервера есть свой подключённый бот, и сообщение, и действие идут от него — откуда бы их ни затеяли, из планировщика бота или со страницы панели.
Под именем своего бота идёт всё: публикация и обновление панелей, форм и тикетов, голосования по расписанию и их итоги, состав и смены, отложенные посты, поздравления с днём рождения, личные роли и награды за уровни, кадровые панели, ночной режим, каналы-счётчики, снятие временных наказаний и выговоров, временные голосовые комнаты, экономика, игровые комнаты и панель музыки.
Если своего бота нет или он отключился
Ничего не меняется: работает главный Echo. Если своему боту не выдали прав в конкретном канале, сообщение всё равно будет доставлено главным — потому что доставленное сообщение важнее имени под ним.
Что осталось за Echo намеренно
Личные сообщения людям, каталог серверов, еженедельная сводка владельцу и всё, что происходит на официальном сервере проекта: это общие для проекта вещи, к отдельному серверу они не относятся.
Панель показывает настройки, указывающие в пустоту
БотАнглийской версии пока нет
Английской версии пока нет
Зачем это
Канал удалили, роль переименовали и пересоздали, старую стёрли — а в настройках остался её номер. Модуль после этого молчит: приветствие не приходит, журнал не пишется, ранги кадровой системы не выдаются. Со стороны выглядит как «бот сломался», и понять причину невозможно — в настройке лежит номер, которого больше нет.
Что стало
На главной странице сервера появилась заметка со списком таких настроек и ссылками прямо в нужные разделы. Выбрали замену — и модуль снова работает. Проверяются приветствия и прощания, роль новичкам, журналы событий, модерации, автомодерации и защиты, роль оповещения и канал-ловушка, формы и роли одобрения, кадровая система целиком — форум, ранги, отделы и их каналы, панели состава, — активность, экономика с её ролями-товарами и наградами, личные роли, уровни, браки, ночной режим, отложенные посты, голосования и каналы-счётчики.
Насколько это частое
На момент выкладки — шесть десятков таких настроек на пятнадцати серверах. Половина владельцев об этом не знала.
Удалённый канал перестал притворяться чужим
Если настроенный канал удаляли, поле настройки превращалось в строку для ввода номера с подписью «бот не видит этот канал — проверьте, что он есть на том сервере». Совет бесполезный: канал был на этом сервере, его просто стёрли. Теперь на месте настройки обычный список каналов и понятная строка: канал удалён, выберите новый, иначе модуль молчит. Ввод номера остался там, где он нужен, — у руководства проекта, которое указывает канал другого сервера.
Пропавшие роли больше не прячутся
Выбранные роли, которых больше нет на сервере, просто исчезали из поля: выбрали пять, видно три, и кажется, что так и настраивали. При этом в базе продолжали лежать номера удалённых ролей. Теперь под полем видно, сколько ролей пропало, и есть кнопка убрать их из настройки.
Бот больше не молчит, когда что-то не сработало
БотАнглийской версии пока нет
Английской версии пока нет
Еженедельные голосования приходят на все серверы
Голосование по расписанию открывалось, только если минута совпала с минутой из настроек — с запасом в две минуты, не больше. На двух десятках серверов бот рассылает по очереди, и Discord на каждой отправке просит подождать по три-четыре секунды: хвост списка до окна не доживал, и эти серверы молча оставались без голосования до следующей недели. Теперь бот запоминает, какое плановое открытие он уже отработал, и сравнивает с расписанием, а не с текущей минутой. Опоздал тик, затянулась рассылка, перезапустился бот — пропущенное открывается на следующем же проходе, в пределах шести часов от планового времени. Позже этого срока голосование не приходит: посреди дня оно уже никому не нужно.
Голосования больше не зависают
Опубликованное вручную из панели голосование, живущее по недельному расписанию, оставалось без срока закрытия — и выпадало сразу из обоих кругов: закрывать нечего, а открывать нельзя, потому что оно уже открыто. Такое висело в канале неделями. Теперь при публикации проставляется ближайшее плановое закрытие, а уже зависшие бот подхватывает сам.
Проверка роли перестала врать
Если голосование настроено «отправлять, только когда на роли есть люди», бот раньше смотрел в свою память об участниках. Сразу после перезапуска она пустая, роль выглядела пустой, и голосование не уходило. Теперь при пустом ответе состав роли перезапрашивается, а если проверить не удалось — голосование всё равно отправляется.
Бот сам отчитывается, все ли голосования открылись
Через двадцать минут после планового открытия в канал логов приходит короткий отчёт: сколько голосований открылось из скольких и что помешало остальным — выключенный модуль, удалённый канал, пустая роль. Когда открылись все, так и написано: тишина в этом канале больше не означает «всё хорошо, наверное». Отметка об отчёте хранится в базе, поэтому перезапуски не превращают сверку в поток одинаковых сообщений.
Сообщения об ошибках помогают улучшать продукт. Спасибо за обратную связь.
Меню в панелях действий не требует пяти копий настройки. Пункт без своего действия берёт действие самого меню: пять организаций в списке отличаются только названием, а настройка заявки у них одна — и цену теперь правят в одном месте, а не в пяти.
Отклик на теги перестал дёргать Discord впустую. Каждая реакция на сервере — смайлик под новостью, что угодно — заставляла бота подтягивать сообщение целиком. Теперь сначала память и база, и только потом сеть: очередь ограничений разгрузилась.
Защита: взбесившегося бота теперь кикает
Взбесившегося бота защита теперь кикает, а не «снимает роли». Права бота живут на роли интеграции, а её нельзя снять ни боту, ни человеку — Discord запрещает. Наказание «снять все роли» отрабатывало вхолостую: в журнале стояло «снял все роли», а бот продолжал сносить сервер.
Теперь для ботов подставляется кик — и на «снять все роли», и на «мьют» (тайм-аут бота тоже ничего не останавливает: он работает через API, а не через право писать). В журнале защиты так и написано: «Кикнул бота — роль интеграции снять нельзя».
Когда ответили, карточка становится зелёной: «Решено — ответил такой-то за 6 минут», тег снимается. Если между вызовом и ответом был тихий час, рядом стоит и календарное время: «прошло 8 часов — тихий час в счёт не идёт». Сводка после тихого часа собрана так же: сколько накопилось, по каждому вызову ссылка, время ожидания и кто звал.
Тег неупоминаемой роли теперь считается. Если роль закрыта от упоминаний, Discord не помечает её как упомянутую, и вызов проходил мимо бота — со стороны это выглядело как «отслеживание не работает». Настройка вступает в силу сразу: раньше бот держал её в памяти до минуты, и тег, отправленный сразу после сохранения, терялся.
Голосования по расписанию: видно, почему не открылись. Причина хранилась в памяти бота — после перезапуска отчёт писал «причина неизвестна», а на сайте её не было вовсе. Теперь причина и пропущенный момент лежат в самой записи и показываются в списке голосований: «Не открылось по расписанию 24 августа 00:00: опоздали больше чем на догон». Причины называются словами: бота нет на сервере, нет канала, выключен бот или модуль, на роли-триггере никого, не отправилось. Отметка снимается сама, когда голосование открылось.
Кнопка может спросить перед действием. У каждой кнопки под ответом команды появилась своя форма — до пяти полей: оценка, причина, комментарий. Спросить их при вызове команды невозможно: их пишет тот, кто нажимает, и по конкретному решению. Ответы подставляются в тексты действий по имени поля.
Новое действие «Написать в личные сообщения». Решение можно отправить самому участнику, а не только в канал. Если личные закрыты, бот скажет об этом — решение всё равно остаётся в силе.
Новое действие «Снять все роли, кроме». Перечислять сотню ролей руками в настройке невозможно, поэтому список собирается на месте: остаётся то, что указали, остальное снимается. Роли выше роли бота бот тронуть не может — их он назовёт отдельно, а не отрапортует «готово».
Период считается любой: 7 дней, 30, 90 или свой промежуток по датам. Выбор живёт в адресе — ссылкой можно поделиться. Если отслеживание накрывает несколько серверов, рядом стоит таблица по каждому: сколько человек на ролях, сколько молчит, сколько раз звали, сколько ответили и за сколько. Общая средняя прячет тот единственный сервер, где не отвечают.
Сводку можно открыть по ссылке — без доступа в панель. Смотреть, кто отвечает, нужно и куратору смены, и руководителю отдела, и самому дежурному, а заводить им доступ ко всем настройкам сервера ради одной страницы — перебор. Ссылка выдаётся в самом отслеживании, там же перевыпускается и закрывается; по ней доступен только просмотр.
Висящий вызов можно закрыть руками. Вопрос решили голосом, тег ушёл по ошибке, проверяли настройку — раньше такой вызов оставался открытым навсегда и портил сводку. Закрытие не считается ответом: ни в «ответили», ни в среднее время, ни в снятие отметки «молчал» оно не идёт, и баллы за него не начисляются.
Разделы в меню сервера пересобрали. Разделов больше тридцати, и лежали они местами не по делу: «Активность / баллы» — отчёты персонала — жила в экономике, счётчики участников и авто-сообщения оказались рядом со своим ботом и API, а «Развлечения» и «Экономика» держали по два-три пункта. Стало семь групп по четыре-пять пунктов: появились «Каналы» (войсы, счётчики, авто-сообщения, оповещения о стримах), «Развлечения» и «Экономика» объединились, «Активность / баллы» переехала к «Персоналу», защита от нюка встала рядом с бэкапами. Настройки, ссылки и права не менялись — это только порядок в меню.
Страница обновлений стала шире. Лента жила в узкой колонке на треть экрана. Теперь ширина как у остальных разделов, дата стоит отдельной колонкой слева и «прилипает» при прокрутке, а сверху — вкладки со счётчиками: бот, сайт, мониторинг, игры, технические работы. Выбор раздела живёт в адресе, ссылкой на «только про бота» можно поделиться.
Сотрудничество: видно, сколько условий осталось. Вместо списка галочек сверху стоит счётчик «Выполнено 3 из 5» с полосой прогресса, а у каждого условия — «сейчас из нужно» одной строкой. Статус заявки выводится отдельным блоком: причина отказа и дата, когда можно подать снова.
Мелочи, которые мозолили глаза. Убрали двенадцать плашек над заголовками, повторявших сам заголовок другими словами. В напоминании о несохранённых изменениях больше нет своей кнопки «Сохранить» — двух разных кнопок сохранения на одной странице быть не должно; осталось напоминание и «Отмена». В форме «Свои команды» поля стояли того же цвета, что и карточка, и были не видны — теперь у каждого своя подпись, имя команды во всю ширину, а не в узком окошке на пол-слова.
Права считаются так же, как их считает Discord — сначала роли, затем перекрытия конкретного канала. Права роли без перекрытий врут чаще всего: запрет обычно стоит именно на канале, и проверка «по ролям» сказала бы «всё хорошо» там, где ничего не работает.
Что проверяется. Бот на сервере и не выключен ли он, включён ли сам раздел, а дальше по разделам: приватные войсы — права в категории комнат, журнал и приветствия — право писать и встраивать ссылки в своих каналах, тикеты — панель и категория обращений, счётчики — право переименовывать канал, модерация и защита — права наказывать и роли, стоящие выше бота, панели ролей и личные роли — право управлять ролями.
Написано действием. Не «проверьте настройки», а «выдайте роли бота: Перемещать участников» — с оговоркой, что права администратора для этого не нужны.
Раздел «Мафия» убран из панели
Настраивать в нём было почти нечего. Роли, число мафии, ставку, вскрытие ролей и голосов, знакомство в День 1 и озвучку правил ведущий выставляет прямо в лобби — кнопкой «⚙️ Настройки» под сообщением набора. В панели от раздела оставалась карточка с описанием без единого поля, и он читался как недоделанный.
На саму игру это не влияет. «Мафия» работает как работала, вся настройка партии — в лобби. Прежние значения (голосовой «Стол», канал для выбывших, минимум игроков, озвучка и тайминги) сохранены и продолжают действовать.
Старые ссылки не ломаются — адрес раздела ведёт на обзор сервера.
Платёж больше не теряется при сбое подписи. Если уведомление о переводе приходило с подписью, которая не сошлась, оно отклонялось молча — перевод в кошельке был, а в панели не появлялось ничего. Теперь такой платёж попадает в раздел платежей со статусом «ждёт подтверждения», и его зачисляют вручную. Автоматически он по-прежнему не начисляется — подпись есть подпись.
Жалобу видно сразу
Новая жалоба в канале отдела приходит с упоминанием роли: канал читают не постоянно, и обращение могло лежать до того, как кто-то сам туда заглянет.
Несуществующий сервер теперь честно не найден
Страница удалённого или выдуманного сервера показывала «не найден», но отвечала так, будто всё в порядке. Для человека разницы нет, а поиск считал такие адреса нормальными страницами и держал их в выдаче. Виновата была заглушка загрузки, стоявшая на весь раздел каталога: она заставляла ответ уходить раньше времени. Теперь она подключена только к списку серверов.
Обновление сайта больше не рвёт страницы на полуслове
При перезапуске процессу давали чуть больше секунды на завершение, после чего убивали принудительно, и кто в этот момент открывал страницу — получал обрыв. Теперь на завершение есть десять секунд: этого хватает, чтобы дописать начатые ответы.
Отчёт о восстановлении снова называет вещи по именам
После восстановления сервера из резервной копии панель показывала список того, что бот сделал, — только вместо названий в нём стояли пустые кавычки: «Роль «» — создана», «Канал «» — создан». Понять по такому списку, что именно вернулось, было невозможно. Теперь в каждой строке стоит имя роли или канала, а у участника — упоминание и число возвращённых ролей.
Заодно проверили само восстановление
На тестовом сервере прогнали полный круг: удалили роль с настроенным цветом и правами, канал с темой и настройками доступа, сняли роль с участника — и восстановили из копии. Вернулось всё: цвет, права, тема, настройки доступа (причём привязанные к заново созданной роли, а не к её исчезнувшему номеру) и роль у участника.
Отложенные посты больше не пропадают молча
Если пост не удавалось опубликовать — канал удалили, у бота отобрали права, Discord попросил подождать, — бот всё равно записывал «опубликовано». В панели стояла отметка о свежей публикации, в канале не было ничего, а разовый пост при этом выключался навсегда и терялся вместе с текстом. Теперь отметка ставится только по факту. Повторяющийся пост держит свой ритм и в следующий раз пробует снова; разовый не выключается из-за временной помехи — бот вернётся к нему через десять минут и будет пробовать сутки. Если канала уже нет, пост отключается сразу, а не делает вид, что всё прошло. Каждая неудача пишется в журнал с номером поста и причиной; розыгрыши, которые не смогли подвести итоги, тоже больше не молчат — раньше они пытались каждые полминуты, не оставляя следа.
Еженедельная сводка приходит один раз
Сводка владельцу сервера отправляется по понедельникам, а отметка «этому серверу уже отправили» жила только в памяти бота и стиралась при каждом перезапуске. Несколько выкладок за день — несколько одинаковых сводок в личке. Теперь отметка хранится в базе и ставится до отправки, одним неделимым запросом: даже перезапуск ровно в момент рассылки не приводит ко второму письму. Закрытая личка больше не вызывает попыток каждые полчаса до конца дня, а в журнале видно, сколько сводок ушло и сколько не дошло.
Музыка снова играет
YouTube отвечал отказом на любую попытку получить звук — не через раз, а на каждый ролик: бот честно пробовал пять раз подряд, потом искал ту же песню на SoundCloud, и всё это время в голосовом канале стояла тишина. Дело в том, каким приложением YouTube представляется программа, которая забирает звук: её обычный выбор перестал работать, а другое приложение из того же списка отдаёт те же ролики без единой осечки. Приложение вынесено в настройку — когда сломается и оно, достаточно вписать другое и перезапустить бота, не дожидаясь обновления.