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