Гарант: страница сделки, файлы в переписке и репутация участников
СайтСтраница сделки собрана заново
Страница сделки собрана заново
Раньше она была одной длинной лентой: переписка внизу, поле ввода в середине, действия закопаны между блоками. Теперь две колонки. Слева то, чем занимаются: приглашение второй стороны, кнопки действий, спор и жалобы, переписка. Справа закреплённая панель со сводкой по деньгам, сторонами, условиями и историей — они всегда перед глазами и не отнимают экран.
Подсказка «что сейчас»
Под полосой прогресса появилась строка, написанная от лица вашей роли: покупателю — «внесите оплату», исполнителю в той же сделке — «ждём, пока покупатель внесёт оплату». Статус на этот вопрос не отвечал: «Деньги на хранении» одинаково выглядит и для того, кто ждёт, и для того, кто должен работать.
Файлы в переписке
К сообщению можно приложить скриншоты, PDF и текстовые файлы — до 10 МБ. Раньше спор разбирался по пересказу сторон, теперь доказательства лежат прямо в сделке, включая личные ветки с арбитром. Ссылки принимаются только на файлы, загруженные в сервис: чужой адрес в поле вложения отбрасывается.
Переписка стала перепиской
Новые сообщения появляются без перезагрузки страницы, а набранный, но не отправленный текст при этом не пропадает. Лента и поле ввода теперь вместе, с вкладками: общий чат и личные ветки. Случайно написать при второй стороне то, что предназначалось арбитру, больше нельзя.
Договор одним документом
У каждой сделки есть печатная версия: стороны, предмет, условия, расчёты и состояние. Печать браузера сохраняет её в PDF.
Отзывы и репутация
После завершённой сделки каждая сторона ставит оценку от 1 до 5 и пишет пару слов. Отзыв привязан к сделке, один на сделку, изменить нельзя; на отзыв о себе можно один раз ответить. В профиле виден рейтинг, число завершённых сделок и все отзывы, а по номеру участника открывается его публичная карточка — её можно посмотреть до того, как соглашаться на сделку.
Профиль и имя
Номер участника, рейтинг, баланс, привязки входа и почта в одном месте. Имя раньше намертво бралось из способа входа — ником из мессенджера. Теперь оно меняется в профиле, и его видят вторая сторона и все, кто читает отзывы.
Поиск, фильтры и сводка
В списке сделок появился поиск по названию и номеру, фильтры по статусу и роли, сортировка по дате и сумме. Сверху — сколько сделок в работе, сколько денег заморожено и сколько свободно. У арбитража свой поиск по номеру: очередь показывает текущие дела, а спрашивают чаще про старую сделку.
Уведомления выключены по умолчанию
Бот не пишет никому, пока это не включено в профиле. Каналы включаются по одному: Discord, Telegram, почта. Приходят только смены статуса — присоединение, оплата, сдача работы, спор и решение по нему. Переписка сторон в личку не дублируется, а вот сообщение арбитра доходит всегда, в том числе в личной ветке: пропущенный вопрос арбитра стоит дела, пропущенное «ок» — ничего.
Защита от злоупотреблений
Создание сделок, жалобы, сообщения, письма и заявки на вывод ограничены по частоте. Одновременно можно вести не больше 20 незакрытых сделок. Поле срока сделки убрали: оно ни на что не влияло и создавало ложное впечатление, что по его истечении что-то произойдёт.
Гарант: споры разбирают внутри сделки, а не по пересказу сторон
СайтПожаловаться можно на любом этапе
Пожаловаться можно на любом этапе
Раньше спор открывался, только пока деньги на хранении. Теперь кнопка «Пожаловаться» есть всегда — и до оплаты, и после того, как сделка закрыта: обман вскрывается и через день. Пока деньги в эскроу, арбитр делит их как раньше. Если выплата уже прошла, возврат идёт с баланса второй стороны — и только в пределах того, что там есть: сервис не рисует деньги, которых нет, и пишет это прямо в решении.
Одно разбирательство и одно обжалование
Раньше по сделке можно было подать сколько угодно жалоб подряд — проигравшая сторона просто пробовала снова. Теперь жалоба одна. Если решение не устроило, есть «Оспорить решение»: дело возвращается арбитру с пометкой, что это последний круг, и после него закрывается окончательно.
Арбитр читает сделку, а не сводку
Раньше вердикт выносился из отдельного списка — вслепую, без переписки сторон. Теперь арбитр открывает саму сделку: читает условия и разговор, пишет сторонам от своего имени и там же выносит решение. Список споров стал очередью со входом в сделку, а не местом, где всё решается одной кнопкой.
Личный канал с арбитром
У переписки появились личные ветки. Арбитр выбирает, куда пишет: в общий чат или лично одной из сторон, а участник может написать арбитру кнопкой в своей сделке. Вторая сторона этих сообщений не видит — туда идут доказательства и то, о чём при оппоненте не говорят. При этом всё остаётся внутри сделки: следующий арбитр увидит переписку целиком, в отличие от разговора, уведённого в личку мессенджера.
Меры к участникам
Появился запрет вывода средств: человек продолжает вести сделки, но забрать деньги не может, пока идёт разбирательство. Это мягче полной блокировки и решает главную проблему споров — деньги не должны уехать, пока их судьба не определена. Блокировка закрывает новые сделки, оплату и вывод; раньше заблокированный участник спокойно забирал деньги. О любой мере человек получает уведомление с причиной.
Гарант-сервис заработал: сделки, в которых деньги ждут результата
СайтСделки под гарантом — на deal.echo-assistants.tech
Сделки под гарантом — на deal.echo-assistants.tech
Сервис открыт. Покупатель замораживает деньги на счёте Echo, исполнитель делает работу, выплата уходит только после подтверждения приёма. Привычный garant.echo-assistants.tech ведёт туда же: адрес один, входа два, поэтому ссылка не «раздваивается» ни для людей, ни для поиска.
Как проходит сделка
Создаёте сделку, указываете предмет, условия и сумму — и отправляете второй стороне одноразовую ссылку. Она видит те же условия ещё до входа. Дальше: оплата, работа, «сдано», подтверждение приёма. Каждый шаг виден обоим и записывается в историю сделки со временем.
Деньги
У каждого участника свой счёт: пополнение картой через ЮMoney, вывод — заявкой. Комиссия сервиса 4%, её платит покупатель сверх суммы: исполнитель получает ровно то, о чём договорились.
Выплата ждёт три дня
После подтверждения приёма деньги зачисляются исполнителю сразу — он видит их на балансе и понимает, что сделка закрыта. Вывести их можно через трое суток: ровно в этом окне вскрывается «работа была, а наутро её нет», и жалоба должна успеть вернуть оплату. Внутри сервиса деньги доступны без ожидания, а в кошельке видно, сколько под удержанием и когда оно снимется.
Вход
Discord, Telegram или VK — любой способ ведёт в один и тот же аккаунт, можно войти сегодня одним, завтра другим. Второй способ добавляется в профиле: потеряете доступ к одному — войдёте другим, сделки и деньги останутся. Почта обязательна и подтверждается кодом: связь со сторонами должна пережить смену мессенджера.
Быстрая настройка сервера и журнал заходов поддержки
СайтБыстрая настройка. Бота добавили — и человек оставался один на один с тремя десятками модулей. Теперь на главной панели появляется мастер из пяти шагов: журнал событий, приветствие новичков, роли на входе, защита и…
Быстрая настройка. Бота добавили — и человек оставался один на один с тремя десятками модулей. Теперь на главной панели появляется мастер из пяти шагов: журнал событий, приветствие новичков, роли на входе, защита и карточка в мониторинге. Каждый шаг сохраняется сразу, а не «в конце», и настраивается подробнее в своём разделе. Приглашение исчезает, когда пройдено больше половины.
Видно, кто из поддержки заходил на ваш сервер. Сотрудник Echo может открыть панель любого сервера — только на чтение, изменить он ничего не может. Раньше следа от этого не оставалось. Теперь в «Журнале изменений» вашего сервера есть блок «Заходы поддержки»: кто, когда и сколько пробыл. Пусто — значит, никто не заходил, и это тоже ответ.
Плановые работы на странице состояния. На /stats появился блок о предстоящих и идущих работах с историей прошедших. Красные полоски аптайма в это окно — не авария, и теперь это написано прямо там.
Ночной режим: сервер сам себя успокаивает
Ночью на большом сервере происходит худшее, а дежурного модератора нет: разговор идёт вразнос, и утром модерация разбирает вчерашнее.
Новый модуль включает по расписанию медленный режим в чатах, а самые бойкие каналы, если попросите, закрывает на запись. Утром возвращает как было: прежние задержки каналов запоминаются при включении, а у закрытых каналов снимается только наша пометка — если канал был закрыт до нас, он таким и останется.
БотРаньше команда сервера была подписью и готовым текстом: !правила — и всё. Теперь у неё есть аргументы, права, условия, действия и кнопки.
Раньше команда сервера была подписью и готовым текстом: !правила — и всё. Теперь у неё есть аргументы, права, условия, действия и кнопки.
Аргументы. Команда спрашивает участника, роль, канал, число, файл или текст — Discord подсказывает их прямо при наборе. В ответе они подставляются по имени: «Выдал {роль} игроку {кого} на {срок} дней». Можно задать готовый список значений или свои подсказки, а из двух слов в названии получается подкоманда: /заявка подать, /заявка статус.
Права. Команду можно закрыть правами Discord — тогда её просто не видно тем, кому нельзя. Сверху свои условия: нужные роли, запрещённые роли, разрешённые каналы, кулдаун на человека и на весь сервер, лимит запусков, «один раз на человека», расписание «с 18:00 до 23:00».
Действия. Команда теперь не только отвечает: выдаёт и снимает роли (в том числе на срок), начисляет и списывает монеты, ставит тайм-аут, меняет ник, пишет в канал, открывает тикет или заявку на одобрение. Движок общий с «Панелями действий» — что умеет кнопка, то умеет и команда.
Кнопки и меню под ответом. У каждой кнопки своё действие и свои условия. Меню ролей, участников и каналов Discord собирает сам, а выбранное подставляется в действие: меню ролей + «выдать роль» — и получилась выдача любой роли из списка.
Форма перед выполнением. До пяти полей: причина, срок, ссылка на доказательства. Ответы уходят и в текст, и в действия.
Свои команды и автоответы
БотТеперь можно создавать собственные команды-ответы: пишете !правила, !ip, !дискорд — бот отвечает вашим текстом или эмбедом. Настраивается в панели: echo-assistants.tech/dashboard → «Свои команды».
Теперь можно создавать собственные команды-ответы: пишете !правила, !ip, !дискорд — бот отвечает вашим текстом или эмбедом. Настраивается в панели: echo-assistants.tech/dashboard → «Свои команды».
Автоответчик по ключевым словам: сообщение содержит нужное слово — бот сам отвечает.
В ответах работают подстановки: {user}, {server}, {membercount} и другие.
Бесплатно — до 15 команд (префиксные). На Premium — до 50 и можно делать полноценные слэш-команды (/команда).
Статистика в каналах
Голосовой канал-счётчик: бот держит в названии живое число — «Участников: 1 234», а также люди, боты, бусты, каналы, роли. Настройка в панели → «Статистика в каналах».
Роли по реакциям
Куда написать, если функции не хватает
БотВ панели сервера под списком модулей и на главной сайта появилась ссылка на форму предложений. Раньше форма была, работала и собирала ответы, но найти её можно было только по прямой ссылке.
В панели сервера под списком модулей и на главной сайта появилась ссылка на форму предложений. Раньше форма была, работала и собирала ответы, но найти её можно было только по прямой ссылке.
Предложения читает отдел тестирования — там же, где разбирают сообщения об ошибках.
Модули показываем в движении
На главной и на страницах игр вместо статичных макетов теперь короткие ролики: видно, как включаются тумблеры модулей, как Echo убирает фишинг и пишет в журнал, как заполняется полоса опыта, как открывается тикет и как идут партии в Мафию, Бункер и Каракули.
На телефоне и планшете ролики не грузятся сами: видно кадр с кнопкой, а анимация приезжает по нажатию и в облегчённом виде. Полная прокрутка главной с телефона весит около полумегабайта вместо семи.
Ролики нарисованы на двух языках: русская версия сайта показывает русские подписи, остальные четыре — английские.
БотСерверам от 100 участников, которые живут дольше недели, стала доступна пробная неделя Premium. Включается кнопкой в панели сервера: карта не нужна, ничего не продлевается само.
Серверам от 100 участников, которые живут дольше недели, стала доступна пробная неделя Premium. Включается кнопкой в панели сервера: карта не нужна, ничего не продлевается само.
В неделю входит всё, ради чего Premium и берут: музыка с панелью управления, точка восстановления после каждого изменения, откат сервера в один клик после налёта и расширенные лимиты модулей.
Свой бот — единственное, что в пробный период не входит: он запускается только на оплаченном Premium.
Оплата во время пробной недели её остаток не съедает, а прибавляется сверху: заплатили на третий день — оплаченный месяц пойдёт с восьмого. Ждать конца недели незачем.
Пробный период даётся один раз на сервер и один раз на владельца.
Ближе к концу недели придёт напоминание — в колокольчик и в личные сообщения. Когда неделя закончится, премиум просто выключится: настройки, бэкапы и очередь останутся на месте и вернутся в ту же секунду, как Premium подключат.
БотБаланс теперь пополняется картой прямо на сайте — страница «Пополнить баланс» в профиле. Раньше для этого нужно было создать тикет и дождаться, пока пополнят руками.
Баланс теперь пополняется картой прямо на сайте — страница «Пополнить баланс» в профиле. Раньше для этого нужно было создать тикет и дождаться, пока пополнят руками.
Комиссию платёжной системы платит покупатель: на баланс приходит ровно выбранная сумма.
Деньги зачисляются автоматически по уведомлению от ЮMoney, с проверкой подписи и защитой от повторного зачисления. Платёж без метки или с протекцией не теряется — он попадает в журнал штаба, чтобы его разобрал человек.
После зачисления приходит уведомление с новой суммой баланса; Premium с баланса покупается прежней кнопкой.
Автопродление
Автопродление Premium теперь включается при покупке. Оно и раньше умело списывать с баланса, но флаг по умолчанию стоял выключенным, и подписка просто заканчивалась при полном балансе.
За три дня до продления, если на балансе не хватает, приходит предупреждение со ссылкой на пополнение. Раньше человек узнавал о нехватке в момент неудачного списания — когда премиум уже отваливался.
Обновление
БотКоманда /rollcall убрана
Команда /rollcall убрана
Перекличка личного состава удалена: команда, кнопка отметки, планировщик отчётов и обе таблицы в базе.
Команд у бота стало 40.
Формат ника не придирается к пробелам
Пробелы вокруг разделителя больше не обязательны: «PD| Alexandr | 197897» и «A |Vanek Zolo | 201240» считаются правильными наравне с «A | Vanek Zolo | 201240».
Раньше каждый вариант расстановки пробелов приходилось перечислять отдельным форматом, и забытый пробел делал человека нарушителем.
Пробел между двумя блоками без разделителя по-прежнему обязателен — иначе блоки слились бы в один и правило потеряло смысл.
Значки на карточке — по старшинству
Значки в профиле выводились в порядке выдачи: должность могла оказаться после «Партнёра» или «Владельца сервера».
Теперь порядок один и тот же везде — на сайте, в публичном профиле и на карточке из команды /profile: руководство проекта, руководители отделов, сотрудники, затем партнёрство, Premium и владение сервером, в конце достижения.
БотПоявился раздел «Сеть серверов» в панели — настраивают только руководитель проекта и заместитель.
Появился раздел «Сеть серверов» в панели — настраивают только руководитель проекта и заместитель.
Связка серверов: назначается главный сервер и подчинённые ему. Как только человек покидает главный — неважно, вышел сам, кикнули или забанили, — бот убирает его со всех подчинённых и пишет об этом в журнал связки.
С подчинённых именно кикает, а не банит: вернётся на главный — сможет вернуться и в остальные.
Есть исключения: роли и люди, которых связка не трогает, чтобы первая же чистка не выкинула администрацию.
Панели ролей между серверами: кнопка на сервере Б проверяет роль на сервере А и выдаёт роль здесь. Настраивается всё — заголовок, текст панели, надпись на кнопке, набор ролей-условий («любая» или «все») и ответы бота при успехе и отказе своими словами.
Панель можно опубликовать в канал прямо из панели управления; повторная публикация правит то же сообщение, а не плодит новые.
Бункер: комната больше не застревает с ботом-ведущим
БотПравило «Пинг @everyone / @here» записывало одно нарушение три раза: Discord присылает отдельное событие на каждое действие правила автомодерации (блокировка, оповещение, тайм-аут), а у заблокированного сообщения нет…
Правило «Пинг @everyone / @here» записывало одно нарушение три раза: Discord присылает отдельное событие на каждое действие правила автомодерации (блокировка, оповещение, тайм-аут), а у заблокированного сообщения нет id, по которому их можно было бы связать.
На сроке бана это не сказалось — он назначался один, — но в журнале защиты одно происшествие выглядело тремя, а сервер с порогом «3 пинга» наказывал бы за один.
Теперь происшествие узнаётся по серверу, автору и тексту, на котором поймали: сколько бы событий Discord ни прислал, наказание одно.
Генератор достижений
Новая общедоступная страница — echo-assistants.tech/achievement: плашка в духе игровых достижений с вашей подписью.
Меняется заголовок, строка достижения, цвет (золото, изумруд, аметист, лёд, графит) и значок-эмодзи. Картинку можно скачать или взять ссылкой — она рисуется на лету, поэтому в Discord подставляется сама и не требует загрузки файла.
Ширина подгоняется под текст: короткая подпись не болтается в пустой плашке, длинная не обрезается.
Гайды: семь новых статей
Раздел гайдов дополнен модулями, которых в нём не было: их писали до того, как эти функции появились.
Новые статьи: Кадровая система и выговоры, Игры Echo (Мафия, Бункер, Каракули), Музыка, Активность: баллы, задачи и топы, , , .
Команда /hr-deploy удалена — её заменила кнопка «Опубликовать панель» в разделе «Кадры» на сайте.
Панель по-прежнему обновляется сама при сохранении настроек, а если нужно выложить её заново (пост удалили, форум пересоздали) — это делается кнопкой, без захода в Discord.
Главный рубильник — только у руководства проекта
Переключатель «Бот на этом сервере» убран со страницы обзора сервера: администрации он всё равно был виден только как надпись, а место занимал.
Управление переехало туда, где выдаётся Premium — в раздел «Серверы проекта» (Штаб → Разработка). Там весь список серверов Echo: главный рубильник, Premium и автобэкапы в одной таблице.
Доступ расширен: раньше это мог только разработчик, теперь — руководитель проекта и заместитель. Выдача значков осталась за разработчиком.
Данные ушедших серверов удаляются через месяц
Если бота убрали с сервера, его данные хранятся ещё 30 дней и затем удаляются полностью — настройки, логи, кадры, экономика.
Месяц отсрочки не случаен: сервер часто возвращают — перепутали, чистили роли, потеряли права. Вернули бота раньше — отсчёт отменяется, ничего не теряется. В списке серверов у таких строк видно, сколько дней осталось.
Мониторинг серверов: тройка лидеров и липкий поиск
Страница каталога стала удобнее:
Обновление
БотЗащита от @everyone и @here
Защита от @everyone и @here
В «Защите» появилось правило «Пинг @everyone / @here». Кто дёрнул всех — сообщение удаляется, а нарушитель получает наказание, которое вы выберете.
Наказание на срок. У правил защиты новое действие «Забанить на срок»: рядом указываете дни (по умолчанию 3), бот сам снимает бан, когда время вышло. «Забанить навсегда» осталось отдельным пунктом. Срок по умолчанию задаётся один раз в настройках защиты.
Кнопка «Поставить правило в Discord». Ставит правило автомодерации Discord на слова @everyone и @here: сообщение с пингом просто не публикуется — звонить он ни у кого не будет. Echo ловит срабатывание и наказывает автора по вашему правилу. Кнопка на странице «Защита», рядом с правилами; исключения берутся из белого списка защиты, оповещения — в канал журнала защиты.
Правило работает и с автомодерацией, заведённой раньше вручную. По умолчанию всё выключено — включается на странице «Защита».
Поддержка видит настройки сервера
Сотрудники отдела поддержки теперь могут открыть дашборд любого сервера с Echo — только на просмотр. Разбирать обращение по скриншотам и описаниям на словах больше не нужно.
Менять что-либо в этом режиме нельзя: сохранение, переключатели и удаление закрыты — и в интерфейсе, и на сервере. Сверху страницы висит пометка о режиме просмотра. Настройки правит только администрация сервера.
Кадры: кнопка «Опубликовать панель»
В разделе «Кадры» появилась кнопка «Опубликовать панель» — рядом с заголовком «Общие». Она выкладывает панель заново, ничего не меняя в настройках: пригодится, если пост удалили, форум пересоздали или панель нужна в новом канале заявлений.
БотYouTube примерно в половине случаев отдаёт ссылку на звук, которая тут же отвечает отказом (403) — от этого трек мог молча не заиграть.
YouTube примерно в половине случаев отдаёт ссылку на звук, которая тут же отвечает отказом (403) — от этого трек мог молча не заиграть.
Бот и раньше пробовал ещё раз, но узнавал об отказе только через шесть секунд тишины и делал всего три попытки. Теперь отказ виден сразу — повтор уходит через секунду-две, попыток пять, и лишь потом бот ищет ту же песню на SoundCloud.
На слух: меньше пауз перед началом трека и заметно реже «песня пропустилась сама».
Канал с другого сервера больше не слетает
БотПикер «🔗 Указать канал на другом сервере» есть почти во всех настройках, но сохранялся такой канал только в логах — в остальных модулях он молча превращался в «— не логировать —».
Пикер «🔗 Указать канал на другом сервере» есть почти во всех настройках, но сохранялся такой канал только в логах — в остальных модулях он молча превращался в «— не логировать —».
Теперь чужой канал сохраняется везде: тикеты (журнал событий и транскрипты), приветствия, модерация и автомодерация, защита, ролевые панели, панели действий, анкеты и панели анкет, тесты, состав, смены, голосования.
Бот научился слать в такие каналы во всех этих модулях — раньше часть из них искала канал только на своём сервере.
Исключение — канал-ловушка в защите: она ловит участников этого сервера, поэтому там только свои каналы.
Кадровая система тоже: заявки и журнал HR уходят в канал другого сервера, если он указан.
Надёжность: команды модерации, отставшая вкладка и фон баннера
БотРазобрали свежие логи бота и сайта и починили всё, что там нашлось.
Разобрали свежие логи бота и сайта и починили всё, что там нашлось.
Команды модерации больше не отваливаются с «приложение не отвечает». У Discord на ответ есть три секунды, а /warn, /ban, /kick, /mute, /unmute до ответа успевали сходить в Discord по нескольку раз: найти участника, выдать наказание, отписать в мод-лог, написать нарушителю в личные сообщения. Все эти запросы стоят в общей очереди ограничений, и ожидания по 4–8 секунд в логах — обычное дело. К моменту ответа окно закрывалось: модератор видел ошибку, хотя наказание было применено, а дело заведено. Теперь такие команды сразу занимают место под ответ и дописывают его, когда работа закончена.
Кнопки «заглушить всех» и очистка списков в голосовых каналах — та же причина, то же лечение: заглушка каждого участника отдельный запрос, и в полном канале обход не укладывался в три секунды.
Отказы остались скрытыми. «У тебя нет прав», «роль выше моей» по-прежнему видит только тот, кто нажал.
Кнопка на сайте не пропадает после обновления. Когда сайт выкладывают заново, у открытых вкладок остаётся старый код, и нажатие уходит к действию, которого на сервере уже нет — со стороны кнопка просто перестаёт работать. Плашка «сайт обновился» была и раньше, но появлялась в течение пяти минут, и всё это время можно было жать впустую. Теперь несработавшее нажатие само её показывает — сразу.
Аналитика сервера, заявки на сотрудничество, жалобы в играх
БотПод капотом · Жалобы в игровых чатах · Заявки на сотрудничество · Страница команд · Аналитика сервера · Партнёрство теперь действует · Итоги недели владельцу
🧰 Под капотом
Это не видно в интерфейсе, но объясняет, почему дальше будет меньше поломок.
У проекта появились автотесты. Раньше их не было вовсе. Теперь перед каждой выкладкой прогоняются проверки самых хрупких мест: ограничения Discord для панели музыки, доступ к категориям тикетов, подбор замены трека по длительности и вся денежная математика — промокоды, скидки, подписи сумм. Не прошли — выкладки не будет. Проверено на настоящей ошибке: тест на лимит кнопок падает ровно на той панели, которая недавно не отправлялась.
Правила игр теперь под проверкой. Отдельно проверяются раздача цепочек в «Каракулях» (чтобы человеку не возвращалась его же работа и двое не получали одну цепочку) и условия победы в «Мафии» — включая пограничные: равенство сил, размен до пустого стола, маньяк один на один. Такие ошибки не роняют игру, а тихо заканчивают партию не тем исходом.
Страница узнаёт, что сайт обновился. Если вкладка была открыта во время выкладки, кнопки в панели переставали работать: браузер отправлял действие старой версии, а сервер такого уже не знал. За сутки набегали сотни таких отказов, и выглядело это как «сайт сломался». Теперь снизу появляется полоска «Сайт обновился» с кнопкой обновления.
Большое обновление: музыка, «Каракули», журналы и надёжность
БотМузыка в голосовых · Третья игра: «Каракули» · Журнал изменений настроек · Тикеты · Мафия · Надёжность
🎵 Музыка в голосовых
Новый модуль для серверов с Премиумом. Очередь по запросам, панель с кнопками, права и настройки.
Как включить: команда /music play с названием или ссылкой — либо кнопка «Включить» на панели. Саму панель можно прислать в нужный канал командой /music panel.
Играет с YouTube, YouTube Music и SoundCloud — ссылки, плейлисты и поиск по названию. Ссылки Spotify и Apple Music тоже принимаются: бот читает исполнителя и название и находит запись на площадках выше.
Панель: пауза, пропуск, стоп, перемешать, повтор, предыдущий трек, «Тише»/«Громче», очередь, очистка. Полоса прогресса идёт сама.
Выбор из поиска: по названию бот показывает пять вариантов с исполнителем и длительностью — видно, где официальный клип, а где чужая перезаливка.
Разбор логов: убрали лишние запросы к Discord и простой сайта при обновлении
БотПрошлись по логам бота и сайта и починили всё, что там накопилось.
Прошлись по логам бота и сайта и починили всё, что там накопилось.
Реакции больше не дёргают Discord впустую. На каждую реакцию на любом сообщении бот сначала запрашивал само сообщение и только потом смотрел, реакция-роль это вообще или нет. В 99% случаев — нет. Из-за этого он часами стоял в очереди ограничений Discord: 725 запросов, каждый по ~4 секунды ожидания. Теперь сперва дешёвая проверка, запрос — только если панель действительно нашлась.
Роли владельцев и премиума раздаются пачкой. Синхронизация каждые 15 минут спрашивала Discord про каждого владельца по отдельности — под восемьдесят запросов подряд, и бот упирался в ограничения ровно раз в 15 минут, как по часам. Теперь тот же список запрашивается одним запросом мимо этих лимитов.
Сайт больше не падает при обновлении. Сборка стирала рабочую папку прямо под работающим сервером: он умирал, поднимался заново, а вы в это время ловили 500. Так набежало 102 перезапуска. Теперь сборка идёт в отдельную папку и подменяется готовой — проверили на живом деплое: 42 проверки подряд, ни одного сбоя. Если новая сборка не поднимется, автоматически вернётся предыдущая.
Фон авто-баннера переживает перезапуск сайта. Раньше одна неудачная попытка — и баннер рисовался без фона. Теперь три попытки с паузой.
Журнал изменений чистится как обещано. Срок в 31 день выдерживался только на серверах, где продолжают менять настройки; на остальных записи лежали дольше. Теперь чистка идёт раз в сутки по всей базе.
Ещё: логи бота больше не забиваются короткими ожиданиями очереди (полная статистика всё так же собирается), и сайт переведён на новое имя прослойки в Next 16 — чтобы не отвалилось на следующем обновлении фреймворка.
Сообщения об ошибках помогают улучшать продукт. Спасибо за обратную связь.
Арбитр перестал работать вслепую
В решении видно, сколько денег на балансе у того, с кого возможен возврат, — раньше сумму назначали наугад и узнавали правду из результата. В заявках на вывод появился контекст: сколько сделок человек закрыл, сколько у него на балансе, с какого числа он в сервисе и есть ли жалобы на него. Над очередью арбитража — сводка по сервису: оборот по закрытым сделкам, удержанная комиссия, сколько денег сейчас в эскроу и сколько разбирательств открыто. Считается запросами по журналу, а не отдельным счётчиком: счётчик рано или поздно разошёлся бы с реальными деньгами.
Заготовки ответов
Везде, где нужно писать текст, есть готовые формулировки: приветствие при подключении, запрос доказательств, «договоритесь сами за 48 часов», обоснования решений, типовые причины жалобы и обжалования, частые причины отказа по выводу. Нажали, поправили под случай, отправили.
О деле узнают сразу
Новый спор, жалоба и заявка на вывод уходят уведомлением арбитрам — тем, кто включил себе каналы в профиле. Раньше о них можно было узнать, только зайдя в панель.
Как проходит сделка, что с комиссией, как работают споры, обжалование и ограничения — всё на странице правил. На неё ссылается арбитр в решениях, и она отвечает на «почему комиссию не вернули» до того, как это станет спором.
Что настраивается: окно по Москве (через полночь — обычное дело, «с 23:00 до 06:00» бот понимает правильно), задержка между сообщениями, список каналов для задержки и отдельный список на закрытие, роли-исключения для ночной смены и модерации, канал для объявлений и свои тексты объявлений при включении и выключении.
Раздел: Панель → Модерация → Ночной режим.
Правки: розыгрыши, био-страницы, копирование
Розыгрыш можно отредактировать. У идущего розыгрыша появилась кнопка «Редактировать»: приз, число победителей, время окончания, нужная роль и срок на сервере. Сообщение в канале бот обновит сам, а все, кто уже нажал «Участвовать», останутся — раньше опечатка в призе означала удалить розыгрыш и собирать участников заново. Заодно поправили раздутое поле срока в форме создания.
Био-страницы: звук и видео больше не расходятся. Раньше видео-фон начинал играть сразу, а музыка ждала щелчка по заставке — эдит рассыпался. Теперь пока висит «нажмите, чтобы войти», видео стоит на первом кадре, а по щелчку картинка и звук стартуют вместе, с начала. Если заставки нет, музыка включается сама; когда браузер запрещает звук без действия человека — с первого же щелчка или касания страницы.
Текст на сайте больше не выделяется мышью. Описания, гайды и каталог защищены от бездумного копирования. То, что нужно копировать по делу, осталось доступным: идентификаторы, коды, ссылки, содержимое полей, а в панели управления — имена и id серверов.
Правый клик. Появился новый вид команд — пункт в меню по правому клику на участнике или на сообщении: «Досье», «Пожаловаться», «В цитаты».
Оформление ответа. Эмбед с полями, автором и временем, отправка в другой канал или в личные сообщения, автоудаление через N секунд, ветка под ответом, реакции, случайный ответ из списка и режим «молча» — когда команда только выполняет действия.
Журнал и перенос. Видно, кто, когда и с какими аргументами звал команду; есть выгрузка и загрузка файлом — перенести набор на второй сервер или сделать копию. И заготовки: правила, IP сервера, роль по кнопке, жалоба, предупреждение, досье.
Слэш-команды и пункты правого клика по-прежнему на Premium, префиксные — всем.
Классические reaction-roles: ставите эмодзи-реакцию на сообщение → получаете роль, снимаете → роль убирается. Настраивается ссылкой на сообщение в панели → «Роли по реакциям».
В панели управления часть страниц уезжала вбок: панель «не забудьте сохранить», выбор готовых правил модерации, шапка экономики, ссылки на формы и тесты, графики статистики тикетов и дежурств. Горизонтальной прокрутки в панели больше нет.
На странице сервера кнопки над графиком на узких экранах вылезали за край карточки — теперь переносятся.
Мелочи, но по факту
На карточке Мафии значилось «12 ролей», хотя в игре их 13 — поправили во всех языках.
В списке модулей плитка «Логи и аудит» показывалась дважды, а «Музыка» пряталась за её подписью — в галерее снова ровно 25 модулей.
На странице значков не хватало картинки для стажёра отдела тестирования — иконка была битой.
Скорость и доступность сайта
Заглавную картинку и иллюстрации сайт теперь отдаёт в современных форматах и под размер экрана — на мобильном грузится заметно меньше.
Поправили контраст мелкого текста и кнопок «Войти» на нескольких страницах, а блоки с кодом и таблицы на странице для разработчиков стали доступны с клавиатуры. Сайт проходит проверку доступности WCAG A/AA.
У страниц игр и рейтингов в заголовке вкладки задваивалось «Echo» — убрали.
Исправили важное для поиска: у каждой страницы canonical теперь указывает на неё саму, а не на главную. Раньше Google считал /mafia, /bunker и остальные разделы копиями главной и мог не показывать их в выдаче.
Карта сайта (sitemap) пополнилась: в неё добавлены страницы игр, рейтинги и разделы, которых не было, а у каждой ссылки появилась дата обновления — Google быстрее замечает свежие изменения.
В консоли браузера (F12) теперь предупреждение против мошенников: если кто-то просит «вставь этот код в консоль ради Nitro/премиума» — это попытка угнать аккаунт. Так делают Discord и другие крупные сайты.
Обновили движок сайта (Next 16.3.2) и его библиотеки, закрыв уязвимости в зависимостях — undici, brace-expansion, а также sharp и postcss.
Приветствие на официальном сервере
Новичкам официального сервера бот теперь пишет в личные сообщения оформленное приветствие с кнопкой прямо в канал тех-поддержки — если возникнут вопросы, сразу понятно, куда идти.
Готовимся к изменениям Discord
Discord с 16 ноября скрывает от ботов каналы без доступа. Подготовили бэкапы сервера: скрытые каналы больше не попадут в снимок (иначе откат мог создать канал-пустышку), и в выборе каналов в панели они не показываются.
В командах наказаний (warn/ban/mute/kick) файл-доказательство теперь принимает только изображения и видео — случайный не тот файл не прикрепить.
Оплата: комиссия и починка зачисления
Платежи снова зачисляются автоматически. Уведомления от ЮMoney отбивались как поддельные: время платежа приходит со смещением часового пояса (+03:00), а разбор запроса превращал плюс в пробел — подпись считалась по испорченной строке.
Комиссию платит покупатель по-настоящему: ЮMoney удерживает 3% с получателя, поэтому в ссылку теперь идёт сумма с наценкой. На странице оплаты видно всё три числа — к оплате, на баланс, комиссия.
На баланс зачисляется то, что реально пришло на кошелёк: если комиссия окажется меньше, человек получит больше.
Кнопка оплаты появилась на странице Premium и на карточке сервера без подписки — раньше путь к оплате начинался с поиска профиля.
На странице оплаты можно выбрать способ: карта, кошелёк ЮMoney или выбор на стороне ЮMoney.
Серверный тег убран полностью
Плашка тега рядом с названием сервера убрана из каталога и со страницы сервера, поле для её заполнения — из настроек карточки.
Тег заполнялся вручную и ни с чем не сверялся: у сервера мог появиться тег, которого в Discord нет.
Поля тега удалены и из базы — настройки карточки стали короче на один блок.
Тикеты открываются надёжнее
Иногда после нажатия «Открыть тикет» кнопка выглядела зависшей: канал создавался, но подтверждение не приходило. Причина — Discord даёт на первый ответ три секунды, а бот успевал сходить в базу и подождать очередь запросов.
Теперь ответ откладывается сразу, до всех проверок, и не пропадает.
Заодно тише в логах: отказ Discord из-за нехватки прав у защиты больше не печатает стектрейс на два экрана — причина и так уходит администрации сервера в журнал.
Выключенный бот теперь действительно выключен
Главный рубильник сервера отключал не всё: на выключенных серверах продолжали копиться статистика, часы в голосовых и разбивки по каналам, работали автомодерация и приветствия, отвечали слэш-команды, создавались игровые комнаты.
Теперь рубильник старше настроек модулей: выключён сервер — выключены все модули разом.
Слэш-команды на выключенном сервере отвечают, что бот выключен, и подсказывают, где его включить.
Статистика и голос больше не считаются, даже если человек сидел в голосовом до выключения или бот перезапустился.
В панели сервера появилась заметная плашка: настройки сохраняются, но не действуют.
Журнал удалённых сообщений перестал молчать
Удалённые картинки и файлы больше не пропадают: бот сохраняет вложения вместе с текстом и показывает их в логе ссылками.
Вместо «сообщение не в кэше» журнал теперь объясняет, что произошло: либо в сообщении не было ни текста, ни файлов, либо оно отправлено до включения логов или старше 30 дней.
Срок хранения текста поднят с 14 до 30 дней — разбирательства начинаются через неделю-другую, и к этому моменту сообщение уже успевало исчезнуть.
Разжигание
Разжечь сервер с недействительным приглашением нельзя: поднимать в топ площадку, куда не зайти по ссылке, бессмысленно. Кнопка гаснет с подсказкой.
Обжалование
Появилось обжалование: страница echo-assistants.tech/appeal показывает действующие ограничения и принимает возражение. Разбирает его не тот модератор, который наказание выдал. Ответ приходит уведомлением, снятие — автоматически.
Если ведущий выходил из лобби, набитого тренировочными ботами, ведение доставалось боту. Бот кнопок не нажимает: комнату нельзя было ни завершить, ни создать вместо неё новую — вход в активную комнату сильнее создания.
Теперь ведение всегда переходит человеку, а если людей в комнате не осталось — комната закрывается сама.
Если ведущий всё-таки пропал, закрыть комнату может любой живой участник: кнопка «Закрыть комнату» появляется у него.
Комнаты, застрявшие с ботом-ведущим раньше, закрываются при перезапуске бота автоматически.
Бункер: тренировочные боты убраны
Кнопки «Добавить бота» и «Убрать бота» из лобби убраны, добавить бота в комнату больше нельзя.
Из-за них комната и умирала: живой ведущий выходил, ведение доставалось боту, и завершить лобби или создать новую игру было некому.
Ведение можно передать — во всех играх
В «Мафии», «Бункере» и «Каракулях» ведущий может передать ведение другому игроку — на любой фазе, а не только в лобби.
Раньше уход ведущего посреди партии оставлял стол без управления: нажимать «дальше» и завершать игру было некому.
Ведение отдаётся только живому участнику комнаты: боту его передать нельзя.
В «Бункере» кнопка в панели ведущего, в «Каракулях» — звёздочка рядом с игроком и кнопка в шапке, в «Мафии» — кнопка «Передать ведение» рядом с «Завершить».
Страница набора сервера
Мониторинг серверов и «Пламя»
Проверка новых участников: капча и верификация
Гайд «Защита от нюка» дополнен разделом про защиту от пинга @everyone и @here: как это работает вместе с автомодерацией Discord и почему в белый список нужно внести роли, которым пинговать положено.
Всего в разделе теперь 34 статьи.
Пинг настраивается у каждого правила защиты
У каждого правила защиты появилась своя настройка пинга: «Как у сервера», «Без пинга» или «Свои роли». Раньше роли пинга были одни на всю защиту — либо к каждому происшествию поднимали всё руководство, либо не звали никого.
Настройка есть и у своих правил, и у встроенных — рядом с порогом и наказанием.
На серверах Majestic у правила про @everyone / @here пинг ролей выключен: срабатывание остаётся в логе, но руководство больше не поднимают.
Правка сообщений ботов больше не попадает в лог модерации: «Было» у них взять негде, и в канал шли пустые записи.
Сводка «Итоги недели» больше не приходит сама
Еженедельная сводка по серверу в личные сообщения владельцу выключена на всех серверах и больше не включается новым: её получали те, кто о ней не просил.
Кому сводка нужна — включит её сам в разделе «Аналитика» в панели сервера.
Лог защиты объясняет отказы и помнит, кто выдал роль
Когда бот не смог наказать нарушителя, в логе теперь два поля: «Почему не получилось» и «Что сделать». Владелец сервера, нехватка права у бота, роль нарушителя не ниже роли Echo, мьют администратору — у каждого случая своя формулировка вместо общего «скорее всего, роль выше».
Причина отказа попадает и в журнал защиты на сайте, а не только в сообщение.
То же объяснение появилось у защиты разбана.
«Кто выдал опасную роль»: бот просматривает три страницы аудита вместо одной и запоминает каждую выдачу роли у себя — Discord хранит аудит 45 дней, а память бота сроком не ограничена. Если выдачи не было видно, так и пишем: «выдана автоматически» или «выдана до того, как Echo начал следить за ролями».
Проверка готовности защиты и тест правила
На странице защиты появилась карточка «Готовность защиты»: модуль включён, есть ли включённые правила, режим «только логировать», хватает ли боту прав на выбранные наказания, стоит ли его роль выше опасных ролей, выбран ли канал журнала и может ли бот в него писать. У каждой проблемы написано, что именно сделать.
Права канала считаются с учётом запретов самого канала, а не только прав роли: журнал чаще всего молчит именно из-за них.
У каждого включённого правила появилась кнопка «тест» — бот отправляет в канал журнала пробное сообщение с тем же пингом, что и при настоящем срабатывании. Видно сразу, дойдёт ли оно и кого поднимет. Не чаще раза в минуту на сервер.
Музыка: первый неудачный подход к треку больше не пишется в лог (повторы вытягивают его почти всегда), зато появилась строка «пошёл с N-й попытки» — по логу видно, чем всё кончилось.
Тройка лидеров показывается отдельно и крупно — с местом, иконкой, участниками и огнём. Раньше первое место выглядело как двадцатое, и гонки за «Пламя» было не видно.
Поиск и сортировки прилипают к верху при прокрутке: сменить запрос на середине списка теперь можно, не возвращаясь наверх.
Шапка собрана компактнее, цифры — карточками.
Значки огня и поиска нарисованы, а не набраны эмодзи: в разных системах они больше не выглядят по-разному.
Зимний режим сайта
На сайте появился зимний режим — один переключатель в панели, и праздничное оформление включается на всех страницах сразу.
Что меняется: по всему сайту падает снег, под шапкой загорается гирлянда, фон получает холодную подсветку вместо тёплой.
Включается в разделе «Серверы проекта» (Штаб → Разработка) — доступно руководителю проекта и заместителю. Выкладки и перезапуска не требует: посетители видят изменение в течение полуминуты. У кого в системе стоит «уменьшить движение», снег не показывается.
Страница набора у сервера
У каждого сервера в каталоге появилась своя страница набора: /servers/<сервер>/nabor — шапка сервера, описание и карточки открытых вакансий. Ссылку можно кидать в чат или в шапку профиля, заявка подаётся прямо с сайта.
Вакансии собираются из форм модуля, но только из отмеченных: в конструкторе формы появился блок «Страница набора» с галочкой, полем «Должность» и короткой строкой о вакансии. По умолчанию галочка выключена — формы заводят и для внутренних дел, и вываливать их все посторонним нельзя.
Закрытые наборы со страницы не исчезают, а помечаются «закрыт» — так видно, что позиция вообще есть. На карточке сервера в каталоге кнопка «Набор» с числом открытых вакансий появляется, только когда сервер действительно кого-то ищет.
Публикуются уже сохранённые настройки — несохранённые правки в форме в панель не войдут, о чём написано под кнопкой. Панель появляется в течение минуты. Команда /hr-deploy удалена.
Заодно починили выбор форум-канала: раньше смена уже выбранного форума в панели молча не сохранялась.
Кадры: «Повысить» снова видит ранги
В кадровой панели у действий «Повысить», «Понизить» и «Назначить ранг» список рангов был пуст — «нет вариантов», и повысить сотрудника было нельзя.
Причина: отдел в этих действиях не выбирают, и панель искала ранги «без отдела», а ранги почти всегда закреплены за отделом. Теперь отдел берётся у самого сотрудника — в списке его ранги: от стажёра до руководителя.
Если человек ещё нигде не числится, показываются все ранги с пометкой отдела — выбранный ранг заодно переводит его в свой отдел. То же исправление работает и для должностей.
Защита от @everyone включена на серверах Majestic
Защита от пинга @everyone и @here включена на всех 50 серверах Majestic.
Как это работает: правило автомодерации Discord не даёт сообщению с пингом опубликоваться, а Echo по факту срабатывания выдаёт нарушителю бан на 3 дня — он снимается автоматически, когда срок вышел.
Кому пинговать по-прежнему можно: ролям с правом «Упоминать @everyone» или «Администратор» — они внесены в исключения на каждом сервере (1047 записей), плюс владелец сервера. Всё это видно и правится на странице «Защита»: срок бана, наказание и список исключений.
Фон авто-баннера. Для сервера, у которого фон был сохранён полной ссылкой на наш же сайт, бот наматывал круг наружу и обратно. Пока снаружи всё хорошо — работает, при первой заминке — баннер без фона; за сутки таких отказов набралось 26. Теперь свой домен разворачивается на внутренний адрес: и надёжнее, и вчетверо быстрее. Ссылки на чужие сайты по-прежнему идут наружу.
Бот переживает аварии Discord спокойнее. 14 августа Discord отвечал 503 около получаса, и всё это время бот перезапускался каждые десять секунд — 322 раза за сутки. Толку ноль: пока чужой сервис лежит, следующая попытка не лучше предыдущей. Теперь пауза между попытками растёт с пяти секунд до двух минут и обнуляется после удачного входа.
Ещё: починили собственный мониторинг — из-за выключенного за ненадобностью музыкального движка он считал сервер «нездоровым» постоянно и потому молчал о настоящих проблемах.
Бот не падает от одного оборванного запроса. Необработанное отклонение промиса по умолчанию роняет весь процесс — из-за единственного оборвавшегося обращения к чужому серверу молчали сразу все 50 серверов. Теперь такое пишется в лог, и бот продолжает работать; всплеск подобных записей видит мониторинг. Заодно починили саму запись аварий: 14 августа настоящая причина потерялась, вместо неё в лог шесть раз подряд легло бессмысленное «Maximum call stack size exceeded» — Node подавился подготовкой трассировки.
Ещё завели себе ежедневную сводку по логам: мониторинг умел ловить только резкий всплеск ошибок, а ровный ручеёк — то, чем оказалась почти вся сегодняшняя починка, — проходил мимо него незамеченным.
Музыка стала бережнее к памяти сервера — запас звука уменьшен вдвое, устойчивость к заминкам сети сохранена.
🚩 Жалобы в игровых чатах
У каждого чужого сообщения в чате «Мафии» и «Бункера» появилась кнопка жалобы — она проступает при наведении и не мозолит глаза. Жалоба уходит модерации вместе с текстом сообщения, автором и номером комнаты: чаты живут недолго и исчезают вместе с партией, поэтому текст сохраняется сразу.
Решение принимается там же, двумя кнопками: заблокировать — с выбором срока (день, три, неделя, месяц или навсегда) — либо отклонить. Что решили и кто решил, дописывается прямо в жалобу, так что история остаётся видимой.
Блокировка общая для всех игр. Закрыт чат — значит, закрыт и в «Мафии», и в «Бункере», иначе наказание обходилось бы переходом в соседнюю игру. Играть при этом никто не мешает: закрывается только возможность писать, включая чат мёртвых и чат мафии.
Пожаловаться можно только войдя на сайт и не чаще пяти раз в минуту — иначе кнопкой завалили бы канал модерации. На себя пожаловаться нельзя.
🤝 Заявки на сотрудничество
В панели сервера появился раздел «Сотрудничество» — он открыт владельцу и администраторам. Там сразу видно условия и то, как сервер им отвечает: сколько дней с ботом, участников, сообщений за две недели, сколько человек писало и в скольких днях была активность. Ничего присылать и доказывать не нужно — всё считается по данным, которые бот и так собирает.
Пока условия не выполнены, кнопки подачи нет: видно, чего именно не хватает. Когда всё сходится — можно коротко рассказать о сервере и подать заявку, дальше остаётся ждать решения.
⌨️ Страница команд
Список команд на сайте отстал от бота — собрали заново.
Появилась `/music`. Команда работает давно, а на странице её не было вовсе.
Разделы по смыслу. Добавились «Музыка» и «Кадры», а свалка «Прочее» исчезла: /activity, /rep, /myrole и остальные разошлись по своим разделам. У каждого раздела теперь свой цвет — нужный видно раньше, чем читаешь подпись.
Подкоманды больше не выдают себя за параметры. У /music их тринадцать, и раньше они показывались как необязательные поля ввода — play?, skip?. Теперь это подкоманды, а их описания свёрнуты: страница перестала быть простынёй текста.
Поиск. Лупа в строке поиска не отображалась вообще — починили. Клавиша / ставит курсор в поиск, Esc сбрасывает, рядом видно, сколько команд нашлось.
На широком экране карточки идут в две колонки. Клик по названию по-прежнему копирует команду.
📊 Аналитика сервера
Новый раздел в панели — для владельца и администраторов. Отвечает на один вопрос: сервер живёт или затухает.
Кто затих — люди, которые заметно писали в предыдущие две недели и замолчали за последнюю. Это главное в разделе и стоит выше графиков: таких обычно ещё можно вернуть обычным личным сообщением, а без списка о них просто никто не узнаёт.
Сколько человек держат сервер — сколько людей дают 80% сообщений. Когда сообщество на тысячи человек держится на паре десятков, это стоит знать.
Сообщения за неделю и сравнение с прошлой — спад виден раньше, чем становится обвалом.
График по дням за месяц и самые активные участники.
Ничего включать не нужно: всё считается по данным, которые бот собирает и так. Глубже месяца заглянуть нельзя — старые дни не хранятся.
🤝 Партнёрство теперь действует
Раньше одобрение заявки ничего не меняло: статус менялся в базе, а сервер партнёром не становился. Теперь одобрение выдаёт настоящий статус — Premium на всё время партнёрства, отметку на карточке сервера в каталоге, значок владельцу и место в списке на странице партнёрства. Сам список берётся из базы, а не из файла, который всё это время оставался пустым.
Premium при этом выдаётся отдельно от оплаченной подписки: снятие партнёрства не отбирает то, за что человек заплатил. В Штабе рядом с очередью заявок появился список действующих партнёров — со снятием статуса и причиной.
📬 Итоги недели владельцу
По понедельникам бот присылает владельцу сервера короткую сводку в личные сообщения: сколько сообщений за неделю, рост это или спад к прошлой, сколько человек писало и сколько затихло. Аналитика в панели отвечает на тот же вопрос, но за ответом надо прийти — а приходят обычно тогда, когда спад уже случился.
Выключается там же, в разделе «Аналитика». Серверы, где за неделю почти не писали, сводку не получают — беспокоить там нечем.
Подборки сервера: сохранили удачную очередь — включаете одним нажатием. До 25 подборок, до 200 треков в каждой.
Автоподбор: когда очередь кончилась, бот продолжает похожими треками вместо тишины.
Объявление трека: бот сам присылает панель в выбранный канал и дальше обновляет её на месте, не засоряя чат новыми сообщениями.
Настройки: роль диджея, режим «добавляют только диджеи», пропуск голосованием с порогом, громкость, лимит очереди и длины трека, запрещённые каналы, авто-выход из пустого канала.
Пропустить чужой трек может диджей или тот, кто его заказал; остальным — голосование.
Про звук отдельно. Разобрались, почему он звучал хуже, чем должен. YouTube отдаёт трек в том же формате, в котором Discord передаёт звук, а бот раскодировал его и кодировал заново — теряя качество на пустом месте. Теперь при обычной громкости исходник уходит нетронутым. Громкость больше не хрипит на больших значениях, битрейт берётся из настроек вашего голосового канала, а частота пересчитывается качественным способом. Отдельная настройка «выравнивать громкость между треками» помогает, когда одна запись орёт, а следующая еле слышна: по умолчанию она выключена — без неё звук идёт вообще без перекодирования, что чище.
Чего не будет, честно. ВК Музыка закрыла доступ сторонним приложениям, а Яндекс.Музыка не работает за пределами России, где стоит сервер бота. У Spotify и Apple Music звук защищён и ботам недоступен, а плейлисты Apple ещё и закрыты для чтения — поэтому по их ссылкам бот ищет ту же запись на YouTube или SoundCloud. Так устроены все музыкальные боты.
Музыка и озвучка «Мафии» больше не мешают друг другу: голосовое подключение у бота одно, и раньше одно вышибало другое. Теперь игра главнее — во время партии музыка не запустится, а если партия начинается под музыку, бот остановит её с предупреждением.
🎨 Третья игра: «Каракули»
Испорченный телефон рисунками: один пишет фразу, другой её рисует, третий описывает рисунок словами. В конце показывают всю цепочку — от исходной фразы обычно не остаётся ничего.
До 14 игроков, партия на 10–20 минут, рисование прямо в Discord. Не успели нажать «Готово» — работа отправится сама за пару секунд до конца раунда.
📋 Журнал изменений настроек
Вкладка в дашборде для администраторов и выше: кто что менял в настройках сервера. Не «что-то поменяли», а конкретное поле по-русски и значения «было → стало» — «Ежедневная награда: 100 → 250», «Добавил в «Авто-роли»: @Новичок». Каналы и роли показаны именами.
У каждой записи помечено, кем человек был в тот момент: Руководитель проекта, Заместитель, Владелец сервера, Администратор или Доступ по роли. Фильтры по разделу, человеку и периоду. Хранится 31 день.
🎫 Тикеты
У кнопки-категории появилась настройка «Кто может нажимать». Пусто — как раньше, кнопка доступна всем; выбрали роли — открыть обращение по ней смогут только их обладатели, остальные получат вежливый отказ и не увидят форму.
Это не то же самое, что «роли поддержки»: те разбирают обращение, а эта настройка решает, кому вообще можно его создать. Пригодится для категорий вроде «Партнёрам» или «Только для персонала», когда панель общая.
Проверка стоит на всех входах сразу: кнопка панели, кнопка на панели действий и отправка формы — включая случай, когда форму открыли до того, как категорию ограничили.
🗡 Мафия
Комната больше не пропадает при смене фазы: вспышка на переходе ночь/день заливала весь экран, и полторы секунды не было видно ни чата, ни игроков. Теперь это подсветка по краям.
⚙️ Надёжность
У базы появились резервные копии. Раньше их не было вовсе: бот сохранял чужие Discord-серверы, а собственная база — с балансами, кадрами и настройками — не бэкапилась никак. Теперь каждую ночь, с проверкой на читаемость и тревогой при сбое. Восстановление проверено по-настоящему.
Сайт больше не падает при обновлении. Раньше выкладка новой версии убивала работающий сервер, и вы ловили ошибки. Теперь подмена готовой сборки без простоя.
Бот перестал зря дёргать Discord. Каждая реакция на любом сообщении заставляла его запрашивать это сообщение — теперь сперва дешёвая проверка. Раздача ролей владельцам тоже перестала спрашивать про каждого по отдельности.
Починили запуск после обновления музыки. Из-за одной незаявленной зависимости свежая сборка не стартовала, и бот был недоступен около четверти часа. Помимо самой ошибки закрыли и причину: теперь такая оплошность не может тихо сломать запуск.
Музыка снова играет. YouTube перестал отдавать звук по обычным ссылкам: он требует, чтобы проигрыватель посчитал подпись и предъявил одноразовый пропуск. Бот этого не умел, и примерно каждая вторая попытка получала отказ — трек молча пропускался, со стороны это выглядело как «зашёл в канал и молчит». Научили сервер выдавать и подпись, и пропуск, а бот теперь при отказе берёт новую ссылку и пробует ещё раз, вместо того чтобы отдавать тишину.
Панель музыки наконец отправляется. В верхнем ряду стояло шесть кнопок, а Discord принимает пять — из-за этого сообщение с панелью отклонялось целиком, и на команду приходило «Не смог отправить панель в этот канал». Кнопки разложены по рядам, а лишняя строка теперь фи