Compare commits

...

7 Commits

Author SHA1 Message Date
Egor 56b0b1fb5f Merge pull request #2914 from BEDOLAGA-DEV/release-please--branches--main
chore(main): release 3.52.1
2026-04-24 18:22:53 +03:00
github-actions[bot] 10519bf68e chore(main): release 3.52.1 2026-04-24 15:22:37 +00:00
Egor 7bff56070c Merge pull request #2913 from BEDOLAGA-DEV/dev
Dev
2026-04-24 18:22:09 +03:00
Fringg 5ed9a0d4fb fix: use fresh DB session for deactivate after long unpin loop 2026-04-24 18:13:48 +03:00
Fringg 63e1127353 fix: broadcast preview count — add .correlate(User) to EXISTS subqueries 2026-04-24 18:03:29 +03:00
Fringg ab4661b5c6 fix: unpin messages in Telegram BEFORE deactivating in DB
The "Unpin all" button called deactivate_active_pinned_message() first,
then looped over users to unpin. If Telegram API calls failed or timed
out, the message was already marked inactive in the DB with no way to
retry. Now: get active message → unpin from all chats → deactivate in DB.
2026-04-24 18:01:52 +03:00
Fringg 52bf2a9589 fix: ignore bot's own messages in unknown message handlers 2026-04-24 17:55:37 +03:00
7 changed files with 28 additions and 7 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
{
".": "3.52.0"
".": "3.52.1"
}
+10
View File
@@ -1,5 +1,15 @@
# Changelog
## [3.52.1](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot/compare/v3.52.0...v3.52.1) (2026-04-24)
### Bug Fixes
* broadcast preview count — add .correlate(User) to EXISTS subqueries ([63e1127](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot/commit/63e112735302cc5fc961b2da87fb1250f922fe3d))
* ignore bot's own messages in unknown message handlers ([52bf2a9](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot/commit/52bf2a9589e3e14abda78a62e45e86e022da4994))
* unpin messages in Telegram BEFORE deactivating in DB ([ab4661b](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot/commit/ab4661b5c643d6dad787cc499c5cff128ec21be5))
* use fresh DB session for deactivate after long unpin loop ([5ed9a0d](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot/commit/5ed9a0d4fbef5c92bfb4e7eb0daed493805c5e44))
## [3.52.0](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot/compare/v3.51.0...v3.52.0) (2026-04-24)
+1 -1
View File
@@ -19,7 +19,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \
FROM python:3.13-slim
ARG VERSION="v3.52.0" # x-release-please-version
ARG VERSION="v3.52.1" # x-release-please-version
ARG BUILD_DATE
ARG VCS_REF
+2
View File
@@ -1559,6 +1559,7 @@ async def get_target_users_count(db: AsyncSession, target: str) -> int:
Subscription.user_id == User.id,
Subscription.status == SubscriptionStatus.ACTIVE.value,
)
.correlate(User)
.exists()
)
query = select(sql_func.count(User.id)).where(base_filter, ~subquery)
@@ -1613,6 +1614,7 @@ async def get_target_users_count(db: AsyncSession, target: str) -> int:
Subscription.user_id == User.id,
Subscription.status == SubscriptionStatus.ACTIVE.value,
)
.correlate(User)
.exists()
)
query = (
+4 -2
View File
@@ -118,11 +118,12 @@ def register_handlers(dp: Dispatcher):
dp.callback_query.register(handle_cancel, F.data.in_(['cancel', 'subscription_cancel']))
# Самый последний: ловим любые неизвестные текстовые сообщения
# Исключаем специальные сервисные события (например, успешные платежи),
# чтобы их обработка не прерывалась общим хендлером неизвестных сообщений
# Исключаем специальные сервисные события (например, успешные платежи)
# и сообщения от самого бота (например, фото главного меню)
dp.message.register(
handle_unknown_message,
StateFilter(None),
F.from_user.is_bot.is_(False),
F.successful_payment.is_(None),
F.text.is_not(None),
~F.text.startswith('/'),
@@ -133,6 +134,7 @@ def register_handlers(dp: Dispatcher):
dp.message.register(
handle_unknown_message,
StateFilter(None),
F.from_user.is_bot.is_(False),
F.successful_payment.is_(None),
F.text.is_(None),
)
+9 -2
View File
@@ -205,11 +205,13 @@ async def unpin_active_pinned_message(
"""
Открепляет активное сообщение у всех пользователей.
ВАЖНО: Извлекаем telegram_id в список ДО начала долгой операции,
ВАЖНО: Деактивация в БД происходит ПОСЛЕ откреплений в Telegram,
чтобы при сбое можно было повторить операцию.
Извлекаем telegram_id в список ДО начала долгой операции,
чтобы избежать обращения к ORM-объектам после истечения таймаута
соединения с БД.
"""
pinned_message = await deactivate_active_pinned_message(db)
pinned_message = await get_active_pinned_message(db)
if not pinned_message:
return 0, 0, False
@@ -260,6 +262,11 @@ async def unpin_active_pinned_message(
await asyncio.gather(*tasks)
await asyncio.sleep(0.05)
# Деактивируем ПОСЛЕ откреплений через fresh session —
# исходная сессия может протухнуть за время долгого цикла Telegram API
async with AsyncSessionLocal() as fresh_db:
await deactivate_active_pinned_message(fresh_db)
return unpinned_count, failed_count, True
+1 -1
View File
@@ -1,6 +1,6 @@
[project]
name = 'remnawave-bedolaga-telegram-bot'
version = "3.52.0"
version = "3.52.1"
description = 'Telegram bot for RemnaWave VPN service'
readme = 'README.md'
license = { text = 'MIT' }