Skip to content

Releases: bruhxax/Link-Bot

2.8.4 — Компактный статус

Choose a tag to compare

@bruhxax bruhxax released this 30 Oct 05:41

2.8.4 — Компактный статус

Обновлена вкладка Админка → Статус в обычной мини-админке.

  • Карточки бота, панели, сборки, обновлений и системы стали ниже и плотнее. Данные и действия сохранены.
  • Состояние бота, Remnawave и базы данных показывается светящимися точками: зелёной при нормальной работе, красной при потере связи и нейтральной, если данных нет. Световые кольца мягко пульсируют; при включённом системном режиме уменьшения движения анимация отключается.
  • Текстовые состояния доступны экранным читалкам и во всплывающей подсказке. Отдельная админка на субдомене сохраняет прежнее представление.

Проверено в обычной мобильной мини-админке на ширине 390 и 320 px, включая состояния работающего и недоступного сервиса. Пройдены тесты JavaScript и Go для мини-приложения, проверка синтаксиса и git diff --check.

Язык и шрифт

  • В обычной мини-админке убраны лишние промежутки между четырьмя настройками языка и шрифтов. Высота блока уменьшилась с 510 до 236 px на мобильном экране.
  • Убраны нижние карточки предпросмотра шрифтов. Поля и сохранение настроек работают как прежде.
  • Проверено на ширине 390 и 320 px, пройдены тесты JavaScript и Go для мини-приложения.

Интеграции

  • В обычной мини-админке карточки платёжных систем и служебных интеграций плавно раскрываются и сворачиваются. Стрелка и содержимое анимируются вместе с высотой карточки.
  • При открытии другой карточки страница не пересоздаётся, введённые значения сохраняются. Содержимое закрытых карточек загружается при первом открытии; выпадающие списки внутри них работают.
  • При системном ограничении анимации переходы отключаются. Проверены YooKassa, Platega, PayHot, P2P и служебная карточка на мобильном экране.

Мой налог

  • Показатели чеков «В журнале», «Создано» и «Требуют внимания» отображаются отдельными компактными карточками в обычной мини-админке.

Редактор контента

  • Убраны длинные пояснения о закреплённом сообщении, его предпросмотр оформлен отдельной карточкой.
  • Раскрывающиеся настройки получили скруглённые карточки, стрелки и плавную анимацию.

Оформление

  • Предпросмотр фонов использует реальные слои и движки Mini App, включая собственный фон и видео.
  • Убраны лишние пояснения, миниатюры нижнего меню стали компактнее, поля цвета выровнены.
  • Шаблоны цветов убраны в раскрывающуюся карточку с анимацией.

Пользователи

  • Показатели баланса, приглашений, покупок и пробных подписок оформлены компактными карточками.
  • Вкладки подписок занимают ширину экрана в зависимости от их количества.
  • Действия с подпиской собраны в анимированной раскрывающейся карточке.
  • Кнопка истории использует общую иконку обновления; переключатель удаления подписки расположен справа.

Исправления вкладки пользователя

  • Исправлен переключатель удаления подписки при блокировке.
  • Блок изменения подписки расположен перед балансом; кнопка списания — перед пополнением.
  • Убран значок рядом с заголовком истории действий.

Оформление торрентов

  • Убраны декоративные иконки из карточек отчётов, показателей и уведомлений.
  • Стрелка подключения и кнопка обновления используют иконки Mini App.
  • Добавлена анимация раскрытия подключения к Remnawave, выровнен фон строки поиска.

2.8.3 — Абузы в админке

Choose a tag to compare

@bruhxax bruhxax released this 30 Oct 04:37

2.8.3 — Абузы в админке

Добавлена отдельная вкладка Админка → Абузы с компактными карточками, плавным раскрытием, сводкой, поиском и фильтрами «Шаринг» и «Триалы».

  • Возможный шаринг: бот запрашивает снимок IP в Remnawave и показывает случаи, когда уникальных IP больше лимита устройств подписки. В раскрытой карточке видны все IP, ноды и время последнего появления.
  • Повторный триал: совпадающий HWID на двух и более пробных подписках отображается вместе со списком этих подписок. В раскрытой карточке видны HWID и все найденные совпадения.
  • Действия: «Заблокировать», «Отозвать подписку», а для повторного триала — «Отозвать последнюю подписку» и «Отозвать все подписки». Перед действием требуется подтверждение. Используются действующие операции блокировки и удаления доступа; автоматических блокировок нет.
  • Добавлено отдельное право администратора Абузы. Кнопки блокировки и отзыва дополнительно требуют прав users.block и users.subscription.
  • Проверка выполняется в фоне, обновляется каждые 5 минут. Ошибки и неполные данные показываются на экране.

Для получения IP токен Remnawave должен иметь доступ к API подключений (connections:by-user и connections:by-user-result в 3.x; соответствующие права IP control в 2.x), а для HWID — к списку устройств. Проверяются подписки, связанные с ботом и существующие в панели. IP могут меняться без шаринга; повторный HWID — повод для проверки, а не автоматический приговор. Удалённые ранее пробные подписки без зарегистрированного HWID не восстанавливаются из истории.

Проверено: полный набор тестов Go и JavaScript, сборка админки и Linux amd64, локальный предпросмотр интерфейса. Реальные аккаунты и подписки не блокировались.

Исправление интерфейса

  • Убраны повторный верхний текст и кнопки обновления. Сводка сокращена до «Всего», «Шаринг» и «Триал» без иконок и лишних подписей.
  • Поиск и фильтры занимают всю ширину, карточки стали компактнее и повторяют стиль мини-админки. Декоративные иконки случаев удалены; детали IP и HWID раскрываются плавно.
  • Поиск и раскрытие больше не пересоздают всю вкладку. Содержимое закрытых карточек создаётся только при открытии, фоновый опрос не перерисовывает неизменившийся список — прокрутка стала плавнее.
  • Проверены мобильный предпросмотр, раскрытие, поиск, тесты Go и JavaScript и сборка админки.

Исправление обычной мини-админки

  • Проверена обычная мобильная мини-админка с нижней навигацией и списком из 40 случаев.
  • Поиск использует существующую SVG-иконку бота; ввод фильтрует карточки один раз за кадр и не пересоздаёт страницу.
  • Вместо «Подробнее» показана штатная стрелка раскрытия; рядом с числом указано, что посчитано: подписки или IP.
  • Закрытые карточки пропускают лишнюю отрисовку при прокрутке. Проверены поиск, раскрытие и конец длинного списка.
  • Пройдены 386 тестов JavaScript, тесты Go для мини-приложения и проверка синтаксиса.

2.8.2 — Торренты в админке

Choose a tag to compare

@bruhxax bruhxax released this 28 Oct 20:41

2.8.2 — Торренты в админке

В релиз 2.8.2 добавлена отдельная вкладка Админка → Торренты для отчётов Torrent Blocker из Remnawave. Это обновление существующего релиза и тега 2.8.2.

Улучшение интерфейса: убран повторный верхний блок, подключение к Remnawave перенесено под карточки сводки, вкладки «Отчёты» и «Уведомления» занимают всю ширину, иконка совпадает с мини-админкой. Уведомления и переключатели сохраняются автоматически после изменения; редактор показывает состояние сохранения и ошибки проверки.

  • Общая лента с карточками отчётов: пользователь панели, нода, IP, результат, срок и время снятия блокировки. Есть сводка, поиск по пользователю, ноде, IP и UUID, фильтры активных, завершённых и неприменённых блокировок, постраничная загрузка и переход к связанному аккаунту.
  • Отдельное право администратора Торренты. Ссылка на аккаунт доступна только при дополнительном праве просмотра пользователей.
  • Два независимых редактора Telegram HTML с переключателями, переменными и предпросмотром. Пользователь получает уведомление о действующей блокировке с нодой и сроком; владелец — подробности отчёта, включая IP. Переменные: {node}, {duration}, {unblock_at}, {time}, {username}, {status}; в шаблоне владельца также {ip} и {user_uuid}.
  • Подписанный torrent_blocker.report принимается на /api/remnawave/webhook. Правила, длительность и снятие блокировки IP задаёт плагин Remnawave; Link-Bot сохраняет его отчёт и отправляет уведомления. При blocked=false отчёт виден в ленте и владельцу, но пользователь не получает сообщения о блокировке.
  • Отчёты и отметки доставки сохраняются в базе. Повторные вебхуки после перезапуска не дублируют успешные уведомления; временная ошибка одного получателя не повторяет сообщение другому. Старая история связанных пользователей переносится в общую ленту миграцией 72. Непривязанные старые отчёты восстановить нельзя, поскольку предыдущая версия их не сохраняла.
  • Сохранены фильтр Торренты в истории действий пользователя и защита вебхука HMAC-SHA256.

Включение

  1. Обновите Link-Bot: cd /opt/Link-Bot && bash ./update.sh. Миграции 71 и 72 применятся при запуске.
  2. В .env Link-Bot задайте REMNAWAVE_WEBHOOK_SECRET длиной не менее 32 символов. В Remnawave задайте тот же секрет в WEBHOOK_SECRET_HEADER, включите WEBHOOK_ENABLED=true и укажите WEBHOOK_URL=https://ВАШ_ДОМЕН/api/remnawave/webhook.
  3. В Remnawave 2.7.0+ включите Torrent Blocker на нужных нодах и событие torrent_blocker.report для webhook-канала. Если webhook уже настроен для событий входа, URL и секрет сохраняются.
  4. Откройте Админка → Торренты → Уведомления, проверьте тексты и переключатели. Владелец и пользователи должны начать чат с ботом, чтобы получать сообщения.

Проверено: тесты Go и JavaScript, миграция с откатом на изолированной PGlite, сборка Linux amd64, интерфейс на экранах компьютера и телефона. Отправка Telegram проверена имитацией API; реальные сообщения и блокировки не запускались.

Протокол вебхуков Remnawave.

2.8.1 — Исправление Platega и защита от повторных начислений

Choose a tag to compare

@bruhxax bruhxax released this 28 Oct 18:33

Исправлена обработка новых статусов Platega и усилена защита от повторной выдачи покупки.

  • DISPUTED принимается без отмены уже выданной услуги и без сброса отметки об оплате. Повторный CONFIRMED после завершения спора не начисляет подписку, подарок, устройства или трафик повторно.
  • PARTIALLY_REFUNDED и события подписок не запускают выдачу покупки. CANCELED и CHARGEBACKED отменяют только ещё не исполненные покупки; ранее выданная услуга автоматически не отзывается.
  • Запоздавший вебхук отмены больше не может перезаписать оплаченное состояние: условие проверяется атомарно в базе. Сохранённый paid_at также защищает от повторной выдачи, если статус покупки ранее был перезаписан.
  • Сохранены проверка X-MerchantId / X-Secret, поиск покупки по ID транзакции и существующая блокировка исполнения между экземплярами бота. Добавлена проверка наличия ID транзакции.

Проверено: полный набор Go-тестов, отдельный интеграционный тест на изолированной базе PGlite со всеми миграциями, цепочки повторных статусов и запоздавшая отмена, сборка Linux amd64. Реальные платежи не выполнялись.

Новых настроек и миграций не требуется. Для обновления существующей установки:

cd /opt/Link-Bot
bash ./update.sh

Протокол Platega: https://docs.platega.io/disputed-46157462e0 и https://docs.platega.io/confirmed-29209725e0.

2.8.0 — Опросы, Лавешка и улучшения кабинета

Choose a tag to compare

@bruhxax bruhxax released this 26 Oct 16:11

Исправлены переключатели и анимации рассылок

  • Переход между сообщением и опросом проигрывается один раз; загрузка результатов и автосохранение больше не перезапускают его.
  • Переключатели сохраняют последнее выбранное состояние при быстрых нажатиях и медленных ответах сервера, включая выключение таймера во время его сохранения.
  • Обновление редактора сохраняет подключённые элементы управления: нажатия, фокус, раскрытые сквады и открытые списки выбора не теряются при фоновом сохранении.
  • Повторное раскрытие плавно продолжается от текущей высоты без наложения анимаций. Исправления применены в обеих админках.

Проверено: 371 JavaScript-тест, Go-тесты Mini App и cmd/app, сборка интерфейса и Linux amd64. Браузерные проверки воспроизводят задержку сохранения, быстрое включение и выключение, ответ между нажатием и отпусканием кнопки, управление клавиатурой, выбор в открытом списке и подтверждение отправки. Реальные рассылки не запускались.


Плавные карточки и сообщения опросов из Telegram

  • «Кому отправлять» свёрнуто в компактную строку с переключателем. Настройки раскрываются плавно; выбранные фильтры сохраняются при сворачивании.
  • Добавлены плавное появление и изменение высоты вопросов, вариантов ответа, кнопок сообщения, таймера, автоответа и результатов. Учитывается системное уменьшение движения.
  • Приглашение, вопросы и завершение опроса редактируются сообщением в чате бота. Сохраняются стили Telegram, ссылки, цитаты, спойлеры и premium emoji; в админке отображается оформленный пузырь с кнопкой замены на всю ширину.
  • Незавершённый опрос сохраняется автоматически. Ожидание ввода переживает перезапуск; отмена сохраняет прежний текст. При возвращении открывается нужный вопрос.

Проверено: 369 JavaScript-тестов, Go-тесты рассылок, Mini App и cmd/app, интеграционные проверки на локальной базе с имитацией Telegram, сборка интерфейса и Linux amd64. В браузере проверены обе админки, раскрытие и сворачивание, сохранение фильтров, ввод и отмена сообщений, обновление предпросмотра и ширины 320–1440 px. Реальные рассылки при проверке не запускались.


Из русского и английского README удалены подробные описания отдельных функций.


Автосохранение рассылок и карточки вопросов

  • У каждого вопроса появилась отдельная оболочка и тонкая стрелка, как у списков выбора. Открытие и закрытие плавно поворачивает стрелку без пересоздания заголовка.
  • Поле названия опроса убрано из редактора; в списке результатов используется дата отправки.
  • Убраны кнопки ручного сохранения кнопок сообщения, опроса, автоответа, письма и аудитории. Настройки сохраняются автоматически после короткой паузы при вводе; количество получателей пересчитывается после изменения фильтров.
  • Запросы сохранения выполняются последовательно. Запоздавший ответ не заменяет более новый текст, выбор аудитории или настройки. Повторный уход из неизменённого поля не создаёт лишнее сохранение.
  • Предпросмотр и подтверждение отправки дожидаются сохранения. При ошибке введённые изменения остаются в редакторе, отправка не запускается; обязательные поля проверяются до сохранения и отправки.
  • Кнопка «Заменить сообщение» занимает всю ширину карточки. Изменения действуют во встроенном редакторе и отдельной админке.

Проверка: 368 JavaScript-тестов, включая 9 проверок очереди автосохранения, Go-тесты Mini App и cmd/app, сборка интерфейса и Linux amd64. В браузере с тестовым API проверены сохранение опроса, кнопок, фильтров и числа получателей, таймера, автоответа и письма; задержки и ошибки ответов, повторная загрузка, сохранение фокуса и блокировка подтверждения при ошибке. Карточки вопросов и стрелки проверены на ширинах 320–1440 px с рамками и без них, в обычном и стеклянном оформлении; отдельно проверена веб-админка.


Тонкие стрелки выпадающих списков

  • Справа у списков выбора добавлены тонкие стрелки с плавным поворотом при открытии и закрытии.
  • Стрелки рисуются как отдельные иконки и больше не пропадают при отключении рамок. Цвет берётся из настройки иконок.
  • Общий вид применён к спискам языка, шрифтов, рассылок, тарифов и других настроек, а также стандартным спискам отдельной админки.
  • При системной настройке уменьшения анимации поворот происходит без движения.

Проверка: 359 JavaScript-тестов, Go-тесты Mini App и cmd/app, сборка интерфейса и Linux amd64. В браузере проверены 120 индикаторов на ширинах 320–1440 px с рамками и без них, в обычном и стеклянном оформлении. Проверены открытие и закрытие, выбор с клавиатуры, уменьшение движения и нативный список отдельной админки.


Обновлён редактор рассылок

  • Сообщение отображается в отдельном пузыре внутри карточки. Кнопка замены увеличена и расположена справа.
  • «Кнопки сообщения» и «Кнопки завершения» вынесены в отдельные, постоянно видимые карточки. Раскрывающееся действие убрано; добавление и редактирование доступны сразу.
  • У полей сообщения, опроса, получателей, таймера и автоответа единые размеры, скругления и отступы. Обновлены поля и кнопки почтового редактора.
  • Исправлен конфликт локальных стилей с настройкой «Показывать рамки»: при отключении рамки скрыты у полей, кнопок и переключателей, включая раскрытые настройки и стеклянное оформление. Переключатели сохраняют различимые фон и положение бегунка.
  • «Предпросмотр» и «Отправить» увеличены до 46 px. Отправка выделена акцентным цветом с автоматически подобранным контрастным текстом; на узком экране действия располагаются вертикально.
  • Тот же редактор сообщения и опроса используется в отдельной админке.

Проверка: 359 JavaScript-тестов, Go-тесты Mini App и cmd/app, сборка интерфейса и Linux amd64. Локально проверены 32 сочетания ширины, типа сообщения, видимости рамок и материала; 16 раскладок почтового редактора и 4 раскладки отдельной админки. Проверены добавление, изменение и удаление кнопок, раскрытые настройки, отсутствие переполнения и наложения карточек, а также окно подтверждения отправки.


Исправлено оформление админки

  • Из главного меню убраны «Обращения», «Список нод», «Вознаграждение за отзыв» и «Отзывы» из блока «Другие действия».
  • Цвет обычных рамок применяется и к стеклянному оформлению. Цвет выделения настраивается отдельно; настройка видимости рамок продолжает работать.
  • Убраны лишние подложки и рамки у строк переключателей, сквадов и разрешений. У Push-уведомлений восстановлена такая же оболочка, как у остальных пунктов меню.
  • Сокращено пояснение личного управления устройствами. Категории «Бот» и «Профиль» оформлены отдельными карточками с разделителями, без номеров.
  • Между группами цветов добавлены отступы; карточки больше не сливаются.

Проверка: 359 JavaScript-тестов, Go-тесты Mini App, сборка интерфейса и Linux amd64. Локально проверены 160 сочетаний раздела, ширины 320–1440 px и материала, ещё 20 раскладок отдельной админки. Проверены смена цвета рамок, независимое выделение, скрытие рамок, оболочка Push и отсутствие лишних подложек у сквадов.


Компактный интерфейс рассылок и опросов

  • В Telegram оставлены две вкладки: Сообщение и Опрос. Блок Ответы на опросы находится под отправкой опроса и загружается автоматически.
  • Между карточками заданы стабильные зазоры. Поля и кнопки отличаются от фона карточек, в том числе при одинаковых цветах в настройках темы и выключенных рамках.
  • Убраны декоративные номера карточек и вопросов, счётчик вопросов и повторяющиеся подписи каждого варианта ответа. Строки вариантов стали компактнее; доступные подписи для экранных дикторов сохранены.
  • Название опроса и кнопка начала расположены рядом. Финальные кнопки находятся внутри карточки завершения, кнопки обычной рассылки — внутри сообщения.
  • Временная рассылка и автоответ показываются сразу отдельными компактными строками. Общий раскрывающийся блок дополнительных настроек удалён.
  • Убран текст «Проверьте предпросмотр. Перед отправкой покажем получателей и запросим подтверждение.». Кнопка отправки помещается в одну строку; очистка черновика перенесена в иконку с подписью.
  • Сохранены независимые тексты и кнопки сообщения и опроса, предпросмотр в Telegram и подтверждение с числом получателей.

Проверка: 359 тестов интерфейса, тесты Mini App и сборка Linux amd64. Проверены скриншоты мобильного интерфейса на ширине 320 и 390 px, открытые настройки, варианты ответов, результаты внутри опроса и веб-панель администратора.

Опросы в Telegram-рассылках

  • Добавлен компактный редактор опроса в Рассылки → Telegram: название, кнопка начала, вопросы с вариантами ответов и финальный текст. Вопросы и завершение поддерживают обычный текст и Telegram HTML.
  • Получатель получает одно приглашение. Кнопка начала, ответы на вопросы и завершение меняют это же сообщение — новые сообщения на каждом шаге не отправляются.
  • Кнопки завершения опроса настраиваются отдельно от кнопок обычной рассылки: ссылка, промокод, поддержка и другие существующие действия. Автоматическая выдача подписки за прохождение не включается; вознаграждение можно настроить финальной кнопкой с промокодом.
  • В разделе Ответы доступны доставленные приглашения, начатые и завершённые опросы, сводка по вариантам и ответы конкретных пользователей с постраничной загрузкой.
  • Предпросмотр можно пройти в боте; он не попадает в результаты. Отправленные вопросы сохраняются отдельно от черновика, поэтому дальнейшее редактирование их не меняет. Прогресс и ответы переживают перезапуск; повторные клики не записывают ответ второй раз.
  • Настройки опроса сохраняются в шаблоне рассылки. Поддерживаются до 64 вопросов и до 100 вариантов в вопросе; приглашение должно быть текстовым, без вложений. Временная рассылка удаляет ту же копию сообщения по настроенному сроку.

Проверка: 351 тест интерфейса, общий прогон Go, сборка админки и Linux, все 70 миграций на новой базе. На отдельной базе и имитации Telegram проверены редактирование одного сообщения, ошибка Telegram, повторные клики, перезапуск, неизменность отправленного...

Read more

2.7.9 — Подарки с баланса

Choose a tag to compare

@bruhxax bruhxax released this 26 Oct 15:40

В разделе «Подарить» теперь можно оплатить подписку другому пользователю внутренним балансом.

  • Выбор: «Подарить → Способ оплаты → Баланс». Используется существующая настройка покупок с баланса в разделе «Рефералы и баланс».
  • До оплаты видны остаток баланса и сумма к списанию. При нехватке средств показана точная недостающая сумма, включая копейки.
  • Поддерживаются промокоды; цена и доступность оплаты обновляются при изменении скидки. Исправлено сохранение данных промокода при покупке подарка.
  • Средства списываются с отправителя, подписка выдаётся получателю. Если получатель ещё не заходил в бот, подарок ожидает его входа.
  • Повторное нажатие во время оплаты не отправляет второй запрос. При ошибке выдачи до подтверждения покупки используется возврат на баланс отправителя.

Проверка: полный набор Go-тестов, 323 JavaScript-теста, сборка интерфейса и Linux amd64. Мобильный интерфейс проверен локально; реальные списания при проверке не выполнялись.

2.7.8 — Документы на лендинге

Choose a tag to compare

@bruhxax bruhxax released this 21 Oct 17:44

Внизу лендинга добавлены две небольшие кнопки: «Пользовательское соглашение» и «Политика конфиденциальности».

  • Документы открываются прямо на лендинге без авторизации: на телефоне — во весь экран, на ПК — в окне поверх страницы.
  • Показывается полный текст: разделы, списки, контакты и подпись документа.
  • Тексты берутся из Редактор контента → Кабинет → Политика / Соглашение. Стандартные тексты используются из общего с кабинетом источника; бренд и контакты подставляются из настроек.
  • Выход через «Назад», крестик, Esc и кнопку «Назад» браузера. Прокрутка лендинга и фокус возвращаются к прежнему месту.
  • Поддерживаются прямые ссылки /#terms и /#privacy, цвета лендинга, стекло, отключение рамок и уменьшение анимации.

Проверено: Go-тесты проекта, 11 проверок JavaScript, сборка Linux/amd64 и визуальная проверка в браузере на широком экране и при ширине 390 px. Тесты проверяют полные длинные документы, HTML-экранирование, навигацию, возврат фокуса и обновление текста без сброса прокрутки. Стандартные тексты документов перенесены в общий модуль без изменения содержания.

Обновление:

cd /opt/Link-Bot && bash ./update.sh

Исправление переключателей в админке и кабинете

  • Убраны оставшиеся квадратные галочки и отдельно появляющиеся кружки в интеграциях и «Мой налог»: дорожка и бегунок теперь всегда относятся к одному элементу.
  • Скрытые служебные поля готовых переключателей больше не получают второй бегунок. Сохраняются управление с клавиатуры, фокус и отключённое состояние.
  • Колонки выбора в таблицах и место под переключатель в меню столбцов увеличены, чтобы он полностью помещался. Частичный выбор и выбор всех строк продолжают работать.
  • Проверены обе версии админки на телефоне и ПК; прошли 99 проверок JavaScript, Go-тесты проекта и сборка Linux/amd64.

Анимации текста и три карточки оплаты

  • Вертикальная прокрутка используется для изменившихся цифр цены, выбранного тарифа в блоке оплаты и при смене языка интерфейса. Остальные названия, статусы, даты, трафик и прочие надписи плавно появляются за 180 мс.
  • Буквы и цифры двигаются только по вертикали. Убрана анимация ширины, создававшая движение слева направо; быстрые переключения сохраняют последний текст без оставшихся слоёв.
  • В тарифах блок оплаты разделён на три близкие карточки: выбранный тариф, способ оплаты, промокод и кнопка оплаты. Промежуток — 4 px; внешние углы — 12 px, внутренние — 8 px.
  • Способ оплаты оформлен как в подарках: логотип, небольшая подпись, название и стрелка. Каждый блок поддерживает стекло и настройки оформления.
  • Проверены смена тарифа, сохранение введённого промокода и выбор способа оплаты на телефоне и ПК. Прошли 315 проверок JavaScript, Go-тесты проекта и сборка Linux/amd64.

Полировка карточек оплаты

  • Внутренние углы между тремя карточками уменьшены до 8 px; внешние углы сохранены. Цвет карточки способа оплаты совпадает с соседними карточками, включая режим стекла.
  • Поле промокода видно до ввода: добавлены фон, отступы и цельная внутренняя рамка. При фокусе нет обрезанных полос сверху и снизу; отключение рамок сохраняется.
  • Выбранный тариф меняется с той же вертикальной прокруткой, что и цена. Остальные надписи сохраняют простое появление.
  • Проверены пустое и заполненное поле, фокус, цвета, стекло и направление анимации на телефоне и ПК. Прошли 316 проверок JavaScript, Go-тесты проекта и сборка Linux/amd64.
  • Расстояние между тремя частями блока оплаты уменьшено с 8 до 4 px. Проверено в браузере: оба промежутка составляют 4 px; сборка интерфейса прошла.

2.7.7 — Название тарифа в уведомлениях

Choose a tag to compare

@bruhxax bruhxax released this 21 Oct 17:29

В редактор уведомлений об оплате добавлена переменная {{plan_name}} — название тарифа.

Использование

В Редактор контента → Уведомления оплат замените {{sub}} на {{plan_name}} в строке тарифа:

<b>Тариф:</b> <b>{{plan_name}}</b>

{{sub}} по-прежнему выводит срок подписки, например «1 месяц». Название берётся из настроек конкретного тарифа по его ID, поэтому тарифы с одинаковым сроком не путаются. Если название не задано или тариф удалён, выводится срок. Для отдельной покупки устройств или трафика пустая строка тарифа скрывается.

Новая переменная работает в обычных уведомлениях и P2P-заявках. Кнопка «Отправить тест» использует один из включённых именованных тарифов, если такой есть. Названия безопасно экранируются для Telegram HTML, а текст вида {{price}} внутри названия не превращается во вложенную переменную. Сохранённый текст уведомления остаётся доступен для редактирования.

Проверено: Go-тесты проекта, синтаксис интерфейса и сборка Linux/amd64. Отдельные проверки покрывают разные тарифы с одинаковым сроком, подарки, дневные и удалённые тарифы, покупки устройств/трафика и тестовый пример.

Обновление:

cd /opt/Link-Bot && bash ./update.sh

2.7.6 — Smerch

Choose a tag to compare

@bruhxax bruhxax released this 21 Oct 16:43

Добавлена платёжная система Smerch для Telegram и кабинета.

Подключение

  1. В Админка → Интеграции → Smerch введите рабочий API-ключ live_….
  2. Скопируйте показанный Webhook URL в кабинет Smerch, включите webhook и сохраните интеграцию.
  3. Настройте методы в Тарифы → Способы оплаты → Smerch → карандаш. Для отдельных кнопок СБП и криптовалюты создайте копию Smerch и назначьте каждой её метод.

Секрет вебхука необязателен. Если он уже выдан Smerch, его можно указать в свёрнутом разделе «Дополнительно: подпись вебхука». Обычное сохранение Link-Bot не меняет секрет в Smerch.

Возможности

  • Оплата тарифов, подарков, устройств и трафика.
  • Копии Smerch с отдельными методами, названиями, описаниями и логотипами в редакторе тарифов.
  • Оригинальный логотип, история платежей, финансовая статистика и выбор способов для «Мой налог».

Подтверждение оплаты

  • Запросы к API подписываются HMAC v2, суммы передаются целыми копейками.
  • Перед выдачей покупки бот обязательно запрашивает транзакцию через защищённый API Smerch и сверяет ID, заказ, сумму, RUB, метод и статус paid.
  • Если секрет вебхука сохранён, дополнительно проверяется подпись исходного тела. Неверная или отсутствующая подпись в этом режиме отклоняется.
  • Повторные уведомления не начисляют покупку повторно. Тестовые, неполные и возвращённые платежи не выдают подписку. Временные ошибки допускают повторную доставку.

Исправлено в этом же релизе

  • Убрано обязательное заполнение webhook secret, отсутствующего в показанной форме кабинета Smerch.
  • Убраны дублирующие галочки методов из интеграции. Выбор методов полностью остаётся в существующем редакторе тарифов.
  • Сохранённые предыдущей версией настройки интеграции не ограничивают методы, назначенные отдельным копиям Smerch.
  • Дополнительный выбор покупателю показывается только если администратор назначил несколько методов одной строке в тарифах. При одном методе он открывается сразу.

Метод должен поддерживать RUB и возвращать payment_url. H2H-реквизиты без ссылки и рекурренты не входят в эту интеграцию. Подробнее: инструкция, документация Smerch.

Проверено: Go-тесты проекта, проверки интерфейса оплаты и сборка Linux/amd64. Создание и подтверждение платежей проверены на локальном HTTP-стенде; реальный платёж без ключей мерчанта не проводился.

Обновление:

cd /opt/Link-Bot && bash ./update.sh

2.7.5 — Свои логотипы платёжных способов

Choose a tag to compare

@bruhxax bruhxax released this 19 Oct 19:24

Добавлено

  • Смена логотипа платёжки в том же окне, где редактируются её название, описание и методы оплаты: Тарифы → Способы оплаты → карандаш.
  • Загрузка изображения файлом PNG, JPG или WebP до 2 МБ, либо установка HTTPS-ссылки с предпросмотром.
  • Кнопка корзины скрывает логотип, кнопка «Стандартный» возвращает исходный логотип платёжной системы.
  • Логотипы настраиваются независимо для каждой платёжки и её копий; отображаются при выборе и оформлении оплаты, включая подарки и дополнительные пакеты.

Поведение

  • «Готово» применяет изменения в черновик тарифов; затем нужно сохранить настройки. «Отмена» оставляет прежний логотип.
  • Загруженные файлы находятся в постоянном хранилище uploads и сохраняются при обновлении бота.
  • Загрузка доступна владельцу и администраторам с правом редактирования тарифов. Бот проверяет формат, размер и размеры изображения; небезопасные ссылки не сохраняются.
  • Внешние изображения загружает браузер. Если свой логотип недоступен, в оплате показывается стандартный.

Проверено

  • Тесты Go: загрузка и выдача файлов, права доступа, валидация ссылок, сохранение и независимость копий.
  • Все 302 проверки JavaScript и сборка админки.
  • Предпросмотр, скрытие и восстановление логотипа на экранах 390 и 1280 px, в кабинете и полной админке.

Основной бот на VPS не обновлялся.

Исправлено: обновление с локальными настройками

  • Кнопка обновления больше не блокирует установку только из-за локальных изменений docker-compose.yaml и Caddyfile. Обычная команда bash ./update.sh использует ту же обработку настроек.
  • Перед обновлением сохраняются закрытые резервные копии в .git/link-bot-update-backups/. Неконфликтующие изменения объединяются с новой версией; Compose проверяется до применения, синтаксис Caddyfile проверяется через работающий Caddy.
  • При конфликте или ошибке проверки рабочие файлы остаются на месте, перезапуск бота не начинается. Если Git не смог выполнить fast-forward, локальные настройки возвращаются из резервной копии.
  • .env и незарегистрированные пользовательские файлы сохраняются. Изменения исходников и подготовленные правки Git требуют ручной проверки.
  • После ручного обновления сервис Mini App перезапускается с новым кодом. Если установка запущена из самого сервиса, он не прерывает свою задачу.

Для подключения исправления к ранее установленной версии один раз выполните обычное обновление:

cd /opt/Link-Bot && bash ./update.sh

Дальше обновление доступно через Mini App с сохранением локальных настроек. Новый тег и релиз не создавались: исправление входит в 2.7.5.

Проверено: тесты Go, сборка сервиса для Linux и 10 сценариев с настоящими временными Git-репозиториями — объединение настроек, конфликты, отказ проверок, сохранение файлов, повторный запуск и перезапуск сервиса. Docker и systemd в этих сценариях заменены тестовыми командами; на основном VPS исправление не устанавливалось.

Исправление загрузки фонов

  • Исправлена загрузка файлов больше 2 МБ в Docker-образе бота: обработка больше не требует системной временной папки. Поддерживаемые изображения, GIF и видео загружаются напрямую в пределах прежнего лимита 50 МБ.
  • Ошибки чтения и повреждённого запроса больше не маскируются сообщением о превышении 50 МБ. Для фактического превышения размера возвращается отдельная ошибка.
  • Если ссылка ведёт на HTML-страницу сервиса обмена, вместо файла, показывается объяснение о необходимости прямой ссылки на изображение или видео.

Проверено: воспроизведение исходной ошибки без системной временной папки; WebM 3 733 315 байт, MP4 24 381 533 байта, GIF и PNG больше 2 МБ; граница 50 МБ, превышение лимита, повреждённые и дублирующиеся части запроса; тесты пакетов cmd, internal, utils и translations; сборка приложения для Linux/amd64.

Исправление опубликовано в текущем релизе 2.7.5, без нового тега и релиза. Для установки выполните обычное обновление:

cd /opt/Link-Bot && bash ./update.sh