Skip to content

Releases: BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot

v4.1.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 09:40
49b05d5

4.1.0 (2026-08-20)

New Features

  • add typed ban notification templates (30878b1)
  • cabinet: удаление конкретной подписки из карточки пользователя (56a9959)
  • email: заголовок Reply-To (SMTP_REPLY_TO) (6a26e39)
  • email: отписка от маркетинговых писем (one-click, RFC 8058) (4825527)
  • landing: засчитывать гостевую покупку в рекламную кампанию (1c46702)
  • landing: засчитывать гостевые покупки в рекламные кампании (7203ca9)
  • landing: сохранять слаг рекламной кампании в гостевой покупке (4a81705)
  • promocodes: трафик в наборе бонусов промокода (93f5bff)
  • remnawave: проксировать GeoCheck ноды из панели 3.3.0 в кабинет (134d8e4)
  • show payment methods directly on extend insufficient-balance screen (45f81a8)
  • skip tariff selection screen when only one tariff is available (5c74099)
  • sort user list by soonest subscription expiry (e3713ce)

Bug Fixes

  • align BanHammer notification contract (e84a9b0)
  • bans: уважать общий выключатель уведомлений в типизированных банах (927790f)
  • cabinet: id админа снимаем до цикла массового действия (9fba46f)
  • cabinet: не отдавать пустую строку вместо null в /info/service (1707660)
  • cabinet: отдавать в /info/service реальные настройки (0ba8fa5)
  • cabinet: отдавать в /info/service реальные настройки (3329ec3)
  • cabinet: удаление подписки адресует панельный аккаунт по режиму (1feef2c)
  • cabinet: удаление подписки в массовых действиях падало MissingGreenlet (c99fd54)
  • channel: не слать админам traceback на заблокировавших бота (d91caee)
  • email: отписку применяет только POST + границы токена (091e2ee)
  • grace: сессия без панельного id чинится при чтении, а не живёт вечно (5116848)
  • make BroadcastResponse.message_text Optional[str] (9a23bc3), closes #3151
  • migrations: перенумеровать миграцию кампании в 0105 (79b17f0)
  • migrations: развести номер миграции гостевых покупок с 0105 (d4f529b)
  • notifications: не отправлять отключённые уведомления пользователям (22370a8)
  • oauth: per-origin redirect_uri so OAuth login works on mirror domains (1f873f9)
  • oauth: привязка провайдера тоже возвращается на домен запроса (d99ab15)
  • payments: дренаж фоновой обработки вебхуков при остановке (531060e)
  • payments: не терять вебхуки платёжек, выключенных на момент старта (67532db)
  • platega: распознавать camelCase-коллбеки рекуррентной СБП-подписки (4123ee8)
  • promocodes: код с одним трафиком не сгорает на безлимитной подписке (7254930)
  • promocodes: трафик доезжает до строки, а начисление возвращает доступ (0d70155)
  • remnawave: не подставлять None вместо класса ошибки при провале импорта (775e507)
  • rich: make usernames clickable (42ff65a)
  • rich: ссылку на профиль ставим только настоящему Telegram-логину (accda9a)
  • tickets: длинные сообщения обрезались и не показывались целиком (064e067)
  • tickets: длинные сообщения обрезались и не показывались целиком (3be6da7)
  • tickets: экранировать превью ответа в уведомлении пользователю (f898414)
  • traffic: не читать даты периода вне ветки, которая их задаёт (993ea75)

Performance

  • etoplatezhi: ack webhook instantly, process callback in background (2acea3f)

Refactoring

  • campaigns: вынести привязку к кампании в сервис (a813083)

v4.0.0

Choose a tag to compare

@github-actions github-actions released this 03 Aug 16:22
f553d18

4.0.0 (2026-08-03)

⚠ BREAKING CHANGES

  • config: меняется не только имя переменной, но и формат значений — вместо UUID панельных пользователей нужны числовые id. Автоматически сконвертировать нельзя: uuid из 3.0.0 исчез, и панель их больше не знает.

New Features

  • admin: add Bedolaga-first User Detail contracts (57e2794)
  • cabinet: панельная идентичность и контракты под 3.0.0 (2b97440)
  • config: TRAFFIC_EXCLUDED_USER_UUIDS переименован в _USER_IDS (88a92f7)
  • db: числовая панельная идентичность remnawave_id (898bcf4)
  • remnawave: бэкфил панельной идентичности (b97e5f6)
  • remnawave: клиент API под 3.0.0 (c763514)
  • remnawave: сервисный слой на числовую идентичность (6da10bc)
  • remnawave: хендлеры, миддлвари и Web API под 3.0.0 (c897d38)

Bug Fixes

  • admin: лог при пропуске синка панели у подписки без UUID (3d77bc2)
  • admin: отмена рекуррента Lava при сбросе выбранной подписки (2f2006a)
  • notifications: MissingGreenlet при уведомлении о регистрации по кампании (0f1beff)
  • remnawave: grace-сессия строки-донора не теряет идентичность (dc09e78)
  • remnawave: бэкфил не блокируется одной парой и отдаёт id живой строке (5cd3adb)
  • remnawave: бэкфил не откатывался целиком на single-tariff (d461784)
  • remnawave: бэкфилл падал на старте и брал не тот режим (deeb24f)
  • remnawave: бэкфилл привязывал чужой аккаунт, создание падало на индексе (98e63b0)
  • remnawave: вебхук не проверял соседей, и подписи тестов врали (70d35c1)
  • remnawave: защита от противоречивых uuid не работала на первом прогоне (928ce20)
  • remnawave: карта uuid не праймилась, холостой прогон писал в БД (e9445ee)
  • remnawave: ложный успех при удалении устройств, окно суток и happ-ссылка (b007de8)
  • remnawave: не терять и не подсовывать протухшую идентичность подписки (bef6e6d)
  • remnawave: несовпадение владельца снова вело к очистке, а не к перепривязке (ea4db92)
  • remnawave: повторный прогон бэкфила и выбор живой подписки (b515c3d)
  • remnawave: поля, которых нет в контракте 3.0.0, и след прогона бэкфила (babf846)
  • remnawave: порядок UPDATE'ов при переносе панельного id (28b01f1)
  • remnawave: протухший id больше не решает за пользователя (83c6415)
  • remnawave: след прогона врал, а защита индекса не мешала записи в панель (fe3dc5b)
  • remnawave: суточная проверка снова не сработала бы, а граница id ослабла (3c31285)
  • remnawave: точный ключ не должен проигрывать догадке и ронять синк (d2fd3d5)
  • remnawave: холостой прогон бэкфила называл свой отчёт «conflicts» (6b7204b)
  • settings: осмысленные категории для настроек, начинающихся с глагола (e6f1505)

Documentation

  • remnawave: точное обоснование раздельных flush при переносе id (6eb80c6)

v3.67.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 21:51
232719b

3.67.0 (2026-07-29)

New Features

  • cabinet: согласие с офертой и политикой при первой авторизации (3b0306f)
  • coupons: лимит активаций на пользователя и удаление партий (8260944)
  • devices: запрет уменьшать лимит устройств ниже включённого в тариф (8aafb64)
  • lava: кабинет-эндпоинты автопродления Lava (0dea218)
  • lava: паритет покупки привязкой, уведомления, сверка суммы (de3518b)
  • lava: рекуррентные подписки Lava по образцу Platega (9d1772b)
  • menu: кнопка «Меню» Telegram открывает веб-кабинет (WebApp) (c7e2087)
  • promo-offers: охват сегментов и прогресс доставки промопредложений (5e4548b)
  • quick-amounts: возможность отключить кнопки быстрых сумм пополнения (b1f9be6)
  • start: видео в стартовом меню бота, загрузка из кабинета (524960c)
  • tariff: expose custom traffic settings in Telegram admin (d75cbfe)
  • tariff: прямая оплата тарифа без отдельного шага пополнения баланса (a060575)
  • webapi: эндпоинт ручного пополнения баланса с идемпотентностью (cd9811c)

Bug Fixes

  • i18n: исправление ошибок перевода в fa/ua/zh локалях (2cc0f36)
  • lava: взаимоисключение с Platega + сдвиг списания при ручном продлении (da84ed1)
  • lava: закрыты находки адверсариального ревью рекуррента (94e3fcd)
  • lava: имя провайдера в правой части «через …» вместо имени метода (df92f68)
  • pricing: корректная цена за месяц для коротких и некратных периодов (9b172b2)
  • promo-offers: счётчик сегмента expired — живая ветка вместо мёртвой (d93762f)
  • promocode: MissingGreenlet при отказе активации — rollback экспирировал db_user хендлера (d0c1d5d)
  • recurrent: цена автопродления учитывает докупки устройств и трафика (85344c6)
  • remnawave: клэмп size в 1..1000 для /api/users/stream (7bf8047)
  • rich-menu: RICH_MESSAGE_DATE_INVALID на подписках дальше ~3 лет (9ee31d3)
  • search: регистронезависимый поиск по юзерам для кириллицы (5323803)
  • startup: однозначно широкие статус-значки в резюме запуска (3dae638)
  • start: видео не доходило до самой команды /start (1f61e0b)
  • subscription: не показывать неоплаченный черновик триала как подписку (fe992c6)
  • tariff: превью покупки считает цену тем же PricingEngine, что и confirm (baef285)
  • tariff: СБП-оформление доступно с экрана «недостаточно средств» (a5a13ae)
  • tribute: per-событийный ключ идемпотентности вместо donation_request_id (e9515ad)
  • устранить замечания CodeQL из PR #3123 (c7cc8b4)

v3.66.0

Choose a tag to compare

@github-actions github-actions released this 24 Jul 22:31
d4b68ce

3.66.0 (2026-07-24)

New Features

  • grace: упростить квоту трафика и правила доступности (2e40235)
  • nalogo: доставка чека на почту, когда Telegram недоступен (3c047ed)
  • platega: CRUD рекуррентных подписок (9cf2aa3)
  • platega: WS-события sbp_recurring.* для кабинета (f34431a)
  • platega: админка кабинета — статус и отмена СБП-автооплаты (135771e)
  • platega: бот-флоу автопродления через СБП (a69d233)
  • platega: ветка подписочных коллбеков в /platega-webhook (9d13c4e)
  • platega: гейт PLATEGA_RECURRENT_ENABLED (23ba645)
  • platega: кабинетные эндпоинты СБП-автопродления (юзер) (19862a2)
  • platega: методы подписок в PlategaService (create/get/list/cancel) (27c8fac)
  • platega: модель platega_subscriptions + миграция (5c9580a)
  • platega: обработчик коллбеков подписки (продление, идемпотентность, статусы) (5a33a9e)
  • platega: отмена СБП-автооплаты при удалении/отзыве подписки (2593424)
  • platega: отмена СБП-подписки + best-effort хелпер по подписке (4763cbe)
  • platega: реконсилятор СБП-подписок в monitoring-цикле (1cf5212)
  • platega: СБП-оформление подписки — альтернатива оплате с баланса (43d81c8)
  • platega: создание СБП-подписки + выключение balance-autopay (e701cad)
  • platega: чистая логика каденса рекуррентных СБП-подписок (8200847)
  • remnawave: транслитерация кириллицы в username пользователя (35383c2), closes #1659
  • support-ws: bridge core + message.created from ticket.message_added (e54e1e3)
  • support-ws: bridge ticket.created and ticket.status_changed mappings (2ff76f3)
  • support-ws: emit ticket events from cabinet/mini-app routes for bridge (d65d9fb)
  • support-ws: register event bridge at app startup (8d80230)

Bug Fixes

  • admin: device_limit = 0 в админке тоже показывать безлимитом (8e1b2cc)
  • auto-purchase silently skipped after top-up due to updated_at race guard (ad3e9cf)
  • ci: lowercase-референс образа для Trivy-скана (795c7be)
  • nalogo: доставлять чек покупателю после ручной пересылки из админки (fa25d70)
  • nalogo: дочитывать печатную форму чека до конца (7dcd18e)
  • nalogo: чек по подарочной покупке — адресат покупатель, а не одаряемый (3a0a157)
  • platega: actionable-ошибка при отказе создания СБП-подписки (0864a95)
  • platega: side-effects после СБП-списания + защита от пустого charge Id и пропавшей подписки (ee295c6)
  • platega: аудит-фиксы СБП-автопродления — money-safety и полнота отмен (ccc2049)
  • platega: гонка конкурентного enable (D5) и outage-vs-404 в reconciler (D4) (8243d39)
  • platega: идемпотентность создания СБП-подписки (не плодить дубли и двойные списания) (132ef4e)
  • platega: санитайзить description подписки под 64-байтный лимит Platega (f7a6f5b)
  • platega: СБП-автопродление доступно для суточных тарифов + гард на триал (9fe42e7)
  • platega: синк панели после списания + обратное взаимоисключение + отмена на пропущенных путях удаления (57ad9b7)
  • platega: три P2 из ревью релизного PR #3111 (64feac0)
  • rich-menu: дать включить rich-меню без логотипа (add7327)
  • rich-menu: премиум-эмодзи из текстов меню уходили клиенту сырым тегом (1feab43)
  • settings: отображать DEVICES_SELECTION_DISABLED_AMOUNT как число, а не цену (0f1968e), closes #1658
  • subscription: device_limit = 0 — это безлимит, а не ноль устройств (51688fc)
  • support: дефолты SLA в коде развести с .env.example не в пользу спама (38110e5)
  • support: отдавать внешний URL поддержки в конфиге кабинета (b270349)
  • support: проверять бан поддержки и режим тикетов в веб-сокете (f3acc69)
  • support: синхронизировать persisted-режим поддержки в settings при старте (2184e58)
  • tickets: передавать db в новые event_emitter-эмиссии кабинета (8eaef7f)
  • tickets: проверять блокировку поддержки и лимит тикетов в кабинете (2887ef7)
  • tickets: режим поддержки в кабинете читать у сервиса, а не из settings (bd93d7e)

Documentation

  • platega: отмена автооплаты, хук при удалении подписки, ...
Read more

v3.65.1

Choose a tag to compare

@github-actions github-actions released this 19 Jul 15:39
ec0a2cd

3.65.1 (2026-07-19)

New Features

  • nalogo: доставка чека файлом — lknpd недоступен клиентам через VPN (cbccaaf, #3087)

Bug Fixes

  • nalogo: не терять чек, если Telegram отверг файл, и не слать HTML как чек (abde46c)
  • subscription: NameError при продлении тарифа после списания денег (82b7131)

Запись о фиче добавлена вручную: коммит PR #3087 был создан до нарезки v3.65.0, а влит после,
поэтому release-please не увидел его при обходе истории и не учёл ни в версии, ни в changelog.

v3.65.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 14:56
c2780df

3.65.0 (2026-07-19)

New Features

  • add crash-safe restricted grace access for expired and limited subscriptions (67d45b6)
  • admin: rich-вид сообщений админ-чата — уведомления, логи, статистика, старт (3dbdc8e)
  • cabinet: отправка прямого сообщения юзеру из карточки в кабинете (c4130c1)
  • email: deliver winback + lifecycle notifications to email-only users (491f61f)
  • email: email templates for all Remnawave WEBHOOK_* notifications (a14389f)
  • email: recurrent autopay success/failure to email-only users (ba9555c)
  • l10n: локализовать флоу покупки/продления/смены тарифа (0951c70)
  • nalogo: имя и почта копируются по тапу + HTML-экранирование (078493a)
  • nalogo: отправка чека пользователю + дублирование в админ-топик (3229b5a)
  • nalogo: подробный блок получателя в админ-уведомлении о чеке (0490ffb)
  • nalogo: порядок полей в блоке получателя (ID, имя, username, почта) (2ef6963)
  • payments: интеграция платёжной системы cisPay (392722f)
  • payments: флаг YOOKASSA_SKIP_IP_CHECK с fail-closed проверкой платежа через API (2ac5299)
  • promo-offers: доставка промопредложений на email для юзеров без Telegram (8913546)
  • promocodes: комбинированные промокоды — баланс и дни подписки одним кодом (d8f4b54)
  • WEBHOOK_SUB_EXPIRING + переводы zh/ua для webhook-писем + тесты (38771d3)
  • zh/ua для winback-писем, честный PAYMENT_RECEIVED для автосписания, тесты (a37fad2)

Bug Fixes

  • admin: не разрывать <pre>-блоки при конвертации уведомлений в rich (bf00eda)
  • admin: переносы строк в rich-уведомлениях + админ-уведомление о триале из диплинка (53eda3e)
  • admin: платёжные провайдеры в разделе «Платежные системы» (a53f9ad)
  • campaign: MissingGreenlet при начислении бонуса кампании на регистрации (6ec45f6)
  • email: use notify_autopay_success wrapper so email shows the new expiry date (973cc90)
  • l10n: добавить недостающие ключи t() во все локали и защитить тестом (3a0e54b)
  • menu: не строить tg-time для дат вне 32-битного unix-диапазона Telegram (e3dfcf7)
  • menu: не строить tg-time для дат вне 32-битного unix-диапазона Telegram (c0b932e)
  • nalogo: print_url строил ссылку на чек без /v1 (a472d11)
  • nalogo: ссылка на чек — добавлен /v1 (баг библиотечного print_url) (a547f5c)
  • remnawave: пересоздавать удалённого из панели юзера при живой подписке (9f31282)
  • subscription: конверсия живого триала при покупке тарифа в мульти-режиме (76aa67c)
  • webhooks: bound payment-callback concurrency to prevent DB pool exhaustion (f72effc)
  • восстановление затёртых dev-фич и фиксы grace-подсистемы (PR #3075) (35206d7)

Documentation

  • актуализация комментария get_receipt_print_url после фикса библиотеки (#3083) (3b4f37f)

v3.64.0

Choose a tag to compare

@github-actions github-actions released this 13 Jul 18:55
a0efb05

3.64.0 (2026-07-13)

New Features

  • broadcasts: поддержать icon_custom_emoji_id у кастомных кнопок рассылки (ff029c7)
  • broadcasts: поддержать icon_custom_emoji_id у кастомных кнопок рассылки (c690351)
  • cabinet: команды бота (/start и др.) в логе действий пользователя (fd3efd7)
  • cabinet: нажатия кнопок бота и действия в кабинете в таймлайне активности (2ceb615)
  • cabinet: таймлайн активности пользователя в карточке юзера (be1f67a)
  • menu: rich-главное меню на Bot API 10.1 с фоллбеком на классику (20c129e)
  • menu: rich-меню v2 — продление из кабинета, расход, логотип, эффект 🎉 (242ed40)
  • menu: rich-меню v3 — кнопки «Подключить» и «Активировать триал» в таблице (734773f)
  • menu: сворачиваемый блок подписок в rich-меню при нескольких подписках (cfdce75)

Bug Fixes

  • admin: честное сообщение при сохранении настройки, прибитой переменной окружения (f9dc3d4)
  • admin: честное сообщение при сохранении настройки, прибитой переменной окружения (f63bee0)
  • maintenance: не разворачивать traceback для ожидаемых отказов Telegram (27b02e4)
  • menu: кнопки таблицы в видимую строку + эфемерное подтверждение триала (f7809b7)
  • menu: не разворачивать traceback для ожидаемых ошибок rich-меню (1ca972d)
  • monitoring: поддержать плейсхолдер {days} в SUBSCRIPTION_EXPIRING_PAID (d445dfa)
  • monitoring: поддержать плейсхолдер {days} в SUBSCRIPTION_EXPIRING_PAID (bc51a06)
  • subscription: block prorated instant switch from free tariffs (6aca902)
  • subscription: block prorated instant switch from free tariffs (6ef7d0e)

v3.63.0

Choose a tag to compare

@github-actions github-actions released this 12 Jul 21:06
8e5026c

3.63.0 (2026-07-12)

New Features

  • add mobile support websocket v1 (2eb3769)
  • bot: подсказка про права на каталоги в креш-репорте (PermissionError) (01db943)
  • cabinet: add recurrent-payments legal document (8f4ecf2)
  • coupons: cabinet API для купонов — партии, экспорт ссылок, погашение (605c024)
  • coupons: партии одноразовых купонов на подписку для оптовой продажи (8a5cfaf)
  • infra: Valkey 9 вместо Redis 7 для кэша и очередей (b0709ea)
  • remnawave: локальная генерация happ crypt4 ссылок (d9042c2)
  • remnawave: локальная генерация happ crypt4 ссылок (без внешнего API) (2ad0d57)

Bug Fixes

  • audit support websocket mutations (3836a5b)
  • backup: одиночный scheduler-цикл и BACKUP_TIME в локальной таймзоне (#3030) (e2bad81)
  • backup: одиночный scheduler-цикл и BACKUP_TIME в локальной таймзоне (#3030) (b4ad4e6)
  • bot: тексты длиннее лимита Telegram роняли показ правил и политики (197e096)
  • cabinet: close refund-guard gaps — silent refund failure + extend double-benefit (f6395a6)
  • cabinet: stop admin user search crashing on out-of-range numeric input (a95b7bc)
  • cabinet: возврат средств при сбое покупки тарифа после списания баланса (#3031) (12f6e35)
  • cabinet: возврат средств при сбое покупки тарифа после списания баланса (#3031) (c5ac200)
  • coupons: закрыть double-tap на подтверждении партии и двойной answer в экспорте (8947a73)
  • db: add migration for recurrent_payments table (missing on existing installs) (1ce9430)
  • email: не тащить CSS/JS в text/plain версию письма (#2974) (7b9b7f1)
  • email: не тащить CSS/JS в text/plain версию письма (#2974) (e4af7f2)
  • harden mobile support websocket session guards (1dc4e9e)
  • notifications: email-юзерам уведомления в flow "пополнение -> автопокупка" (#2952) (d527ce5)
  • notifications: email-юзерам уведомления в flow «пополнение → автопокупка» (#2952) (083289d)
  • notifications: label trial→paid auto-purchase as activation, not renewal; test real templates (551236e)
  • platega: поддержка v2 API - поле url и настраиваемая версия эндпоинта (#2934) (681a1d2)
  • platega: поддержка v2 API — поле url и настраиваемая версия эндпоинта (#2934) (7ff3b40)
  • refresh admin user-messages list without a hand-built callback (3323b7f)
  • reload daily subscription with user+tariff after commit (MissingGreenlet) (c0bfea7)
  • remnawave: кэш локальных happ crypt4 ссылок (стабильность между вызовами) (0b54d59)
  • restore happ crypto links on Remnawave 2.8.0 via official Happ API (31711d4)
  • subscription: make TARIFF_SWITCH_RESET_FREE_DAYS actually reset the free/trial period (73050c3)
  • support-ws: dedup idempotent retries, canonical reply status, telegram parity, send lock (0c58a49)
  • tickets: писать id реального админа в ticket_messages.user_id (#3029) (eb326db)
  • tickets: писать id реального админа в ticket_messages.user_id (#3029) (fc92019)

Refactoring

  • coupons: единый build_coupon_deeplink вместо трёх копий формата ссылки (bc5dfcf)

Documentation

  • tests: valkey-образ содержит redis-* как compat-симлинки — уточнение докстринга (0a435c7)
  • valkey: точные формулировки лицензий (7.4 = RSALv2/SSPLv1; AGPLv3 только с Redis 8) и симлинков в тестах (23183cb)

v3.62.0

Choose a tag to compare

@github-actions github-actions released this 30 Jun 07:15
21104ac

3.62.0 (2026-06-30)

New Features

  • cabinet: add /branding/footer-enabled GET+PATCH endpoint (#3011) (fee15cb)
  • per-method payment description override (white-label) (#3014) (500259e)
  • pre-warm logo file_id at startup to kill broadcast re-upload (b93db73)
  • subscription: reuse expired trial of same tariff on paid purchase (bot/guest) (ac9268b), closes #3004
  • surface 2.8.0 service.api_token_created/deleted webhook events (499dfb8)
  • surface payment decline reason in the admin panel (#3015) (c378431)
  • update Remnawave API integration for panel 2.8.0 (db39b69)

Bug Fixes

  • bound MonitoringService notification sends with a per-send timeout (9046bee)
  • cabinet: reuse expired trial of same tariff on purchase instead of duplicating (#3004) (c95aec0)
  • carry subscription_id through tariff renewal callbacks (#3012) (348491e)
  • clarify balance-related notification texts (autopay hint + INSUFFICIENT_BALANCE) (#3013) (baf6782)
  • email: build From header with formataddr to avoid duplicated address (e66c526)
  • handle 2.8.0 user.expiration webhook event (7ce455f)
  • read webhook envelope meta from data['_meta'] in user.expiration (1e1a309)
  • resolve the correct subscription in tariff-switch flows (#3012) (08c08dd)
  • respect RESET_DEVICES_ON_RENEWAL in Remnawave user sync (#3006) (#3008) (0f608a7)
  • security: block stored XSS via ticket media (HTML/SVG served inline) (0cbf624)
  • security: harden admin logo serving against SVG script execution (2e512fc)
  • show Lava payment methods in the bot when enabled (#3016) (591b154)
  • stop multi-tariff HWID device limit bleeding across tariffs (7463ec0)
  • sync used traffic from nested userTraffic in user.modified webhook (7fd397e)

Refactoring

  • close low-pri 2.8.0 follow-ups (trafficLimitBytes coerce, api-token name) (dc4eaad)
  • harden HWID byApp aggregation (2.8.0) + test coverage (a82614c)

Documentation

  • document the _resolve_subscription footgun + add guard tests (#3012) (1db6924)

v3.61.0

Choose a tag to compare

@github-actions github-actions released this 19 Jun 10:14
a26c52a

3.61.0 (2026-06-19)

New Features

  • add cabinet admin api for legal pages (5dc9f63)
  • add display mode cycle button to bot admin page editors (f3a1dd7)
  • add display mode settings for built-in info sections (575ce2b)
  • add display_mode column to info pages (9c5c79f)
  • add overpay payment option selection in bot (68657ce)
  • add overpay terminal, direct qr and eur settings (31e7ce6)
  • add telegram html renderer and splitter for info pages (6b8a522)
  • admin: overpay certificate upload in bot (3a71ad3)
  • admin: quick amounts management section in bot admin (3321a92)
  • autopay: add AUTOPAY_FAIL_* notification antispam settings (5dff8d8)
  • autopay: per-cycle Redis+memory state helpers, replace cooldown methods (10769ee)
  • autopay: pure decision fn + per-cycle state, drop 6h cooldown constant (8df8db4)
  • autopay: route failure notifications through per-cycle policy + final reminder text (d3e8eea)
  • bot: quick amounts keyboard in top-up prompts for inline providers (2537fbb)
  • bot: quick amounts keyboard in top-up prompts for legacy providers (6e37578)
  • bot: quick top-up amounts keyboard (6b0ed74)
  • cabinet: allow new animated background types in animation-config validation (0ed3b4e)
  • cabinet: expose quick_amounts in payment methods API (b339c3a)
  • cabinet: overpay certificate admin endpoint (c03bd3a)
  • email-templates: common placeholders available in every template (4fd82a7)
  • email-templates: expand common placeholders to recipient-level vars (76cd71c)
  • expose overpay int sub-option and cabinet payment option (b9f2ec0)
  • filter cabinet info endpoints by display mode (af5fef2)
  • gate bot info sections by display mode and render custom info pages (3150ac2)
  • make DB connection pool params configurable via env (#3000) (610add5)
  • notification: add user ID coercion for Telegram profile links (4ded56b)
  • notification: enhance ticket notification buttons based on user role (fdfda9e)
  • notification: handle TelegramBadRequest for unchanged message content (a766ccc)
  • notification: implement safe editing/resending of messages for photo notifications (0ab57d2)
  • overpay terminals and direct qr, per-method quick top-up amounts, page display modes (ac53fa0)
  • overpay: certificate upload service (de0514b)
  • payments: add quick_amounts column to payment method configs (fda59ef)
  • payments: quick amounts validation and effective values in config service (d1c0960)
  • route overpay payments by option with eur conversion and direct qr (de2fc34)
  • subscription: free-tariff switch fixes — reset tool, day-reset, expired menu (3b3633c)
  • support overpay s2s order init and redirect link polling (3703710)
  • tickets: improve ticket reply handling for admin notifications (9920b93)
  • tickets: let moderators use ticket-notification action buttons (016a79a), closes #2988
  • tickets: open admin ticket in cabinet from notification buttons (1bdf8f2), closes #2988
  • tickets: show reliable (non-FSM) buttons in group/channel admin chat (de66f07), closes #2988
  • tickets: update ticket status handling for notification buttons (b091aa3)
  • yclid-keyed Yandex offline conversions for repeat-purchase attribution (cde4baa)

Bug Fixes

  • address review feedback on overpay and cabinet admin (a09b57b)
  • admin-sync: repair UUID-wiped subscriptions from panel + fix squad extraction (440de7d)
  • autopay: never starve the final reminder; keep email cause text (db76789)
  • backup: free table locks before restore TRUNCATE to avoid LockNotAvailableError (712d502)
  • backup: skip missed schedule slots so auto-backup can't fire a burst (f947fed)
  • bot: derive BOT_USERNAME from live get_me() so links survive a bot swap (be0d7c9)
  • cabinet: time-bound inline RemnaWave sync on pay endpoints (a2913d3)
  • email-templates: editor baked sample values into saved overrides ([#667043](https://github.com/B...
Read more