mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-04-28 08:41:05 +00:00
51 KiB
51 KiB
Changelog
3.17.1 (2026-02-23)
Bug Fixes
- add diagnostic logging for device_limit sync to RemnaWave (97b3f89)
- add int32 overflow guards and strengthen auth validation (50a931e)
- add missing broadcast_history columns and harden subscription logic (d4c4a8a)
- allow tariff switch when less than 1 day remains (67f3547)
- cap expected_monthly_referrals to prevent int32 overflow (2ef6185)
- cross-validate Telegram identity on every authenticated request (973b3d3)
- handle RemnaWave API errors in traffic aggregation (ed4624c)
- migrate all remaining naive timestamp columns to timestamptz (708bb9e)
- prevent partner self-referral via own campaign link (115c0c8)
- protect active paid subscriptions from being disabled in RemnaWave (1b6bbc7)
- repair missing DB columns and make backup resilient to schema mismatches (c20355b)
- show negative amounts for withdrawals in admin transaction list (5ee45f9)
- suppress web page preview when logo mode is disabled (1f4430f)
- uploaded backup restore button not triggering handler (ebe5083)
- use aiogram 3.x bot.download() instead of document.download() (205c8d9)
3.17.0 (2026-02-18)
New Features
- add referral code tracking to all cabinet auth methods + email_templates migration (18c2477)
Bug Fixes
- prevent 'caption is too long' error in logo mode (6e28a1a)
- skip blocked users in trial notifications and broadcasts without DB status change (493f315)
3.16.3 (2026-02-18)
Bug Fixes
- 3 user deletion bugs — type cast, inner savepoint, lazy load (af31c55)
- auth middleware catches all commit errors, not just connection errors (6409b0c)
- connected_squads stores UUIDs, not int IDs — use get_server_ids_by_uuids (d7039d7)
- deadlock on user deletion + robust migration 0002 (b7b83ab)
- eliminate deadlock by matching lock order with webhook (d651a6c)
- make migration 0002 robust with table existence checks (f076269)
- wrap user deletion steps in savepoints to prevent transaction cascade abort (a38dfcb)
3.16.2 (2026-02-18)
Bug Fixes
- auto-convert naive datetimes to UTC-aware on model load (f7d33a7)
- extend naive datetime guard to all model properties (bd11801)
- handle naive datetime in raw SQL row comparison (payment/common) (38f3a9a)
- handle naive datetimes in Subscription properties (e512e5f)
- use AwareDateTime TypeDecorator for all datetime columns (a7f3d65)
3.16.1 (2026-02-18)
Bug Fixes
- add migration for partner system tables and columns (4645be5)
- add migration for partner system tables and columns (79ea398)
3.16.0 (2026-02-18)
New Features
- add admin notifications for partner applications and withdrawals (cf7cc5a)
- add admin partner settings API (withdrawal toggle, requisites text, partner visibility) (6881d97)
- add campaign_id to ReferralEarning for campaign attribution (0c07812)
- add partner system and withdrawal management to cabinet (58bfaea)
- attribute campaign registrations to partner for referral earnings (767e965)
- blocked user detection during broadcasts, filter blocked from all notifications (10e231e)
- enforce 1-to-1 partner-campaign binding with partner info in campaigns (366df18)
- expose traffic_reset_mode in subscription response (59383bd)
- expose traffic_reset_mode in tariff API response (5d4a94b)
- include partner campaigns in /partner/status response (ea5d932)
- link campaign registrations to partner for referral earnings (c4dc43e)
- notify users on partner/withdrawal approve/reject (327d4f4)
Bug Fixes
- add blocked_count column migration to universal_migration.py (b4b10c9)
- add missing payment providers to payment_utils and fix {total_amount} formatting (bdb6161)
- add selectinload for subscription in campaign user list (eb9dba3)
- campaign web link uses ?campaign= param, not ?start= (28f524b)
- correct subscription_service import in broadcast cleanup (6c4e035)
- critical security and data integrity fixes for partner system (8899749)
- handle YooKassa NotFoundError gracefully in get_payment_info (df5b1a0)
- medium-priority fixes for partner system (7c20fde)
- move PartnerStatus enum before User class to fix NameError (acc1323)
- prevent fileConfig from destroying structlog handlers (e78b104)
- reorder button_click_logs migration to nullify before ALTER TYPE (df5415f)
- resolve HIGH-priority performance and security issues in partner system (fcf3a2c)
- return zeroed stats dict when withdrawal is disabled (7883efc)
- unassign all campaigns when revoking partner status (d39063b)
Refactoring
- replace universal_migration.py with Alembic (b6c7f91)
- replace universal_migration.py with Alembic (784616b)
3.15.1 (2026-02-17)
Bug Fixes
- add naive datetime guards to fromisoformat() in Redis cache readers (1b3e6f2)
- add naive datetime guards to fromisoformat() in Redis cache readers (6fa4948)
3.15.0 (2026-02-17)
New Features
- add LOG_COLORS env setting to toggle console ANSI colors (27309f5)
- add web campaign links with bonus processing in auth flow (d955279)
Bug Fixes
- AttributeError in withdrawal admin notification (send_to_admins → send_admin_notification) (c75ec0b)
- remove local UTC re-imports shadowing module-level import in purchase.py (e68760c)
3.14.1 (2026-02-17)
Bug Fixes
- add naive datetime guards to parsers and fix test datetime literals (0946090)
- address remaining abs() issues from review (ff21b27)
- complete datetime.utcnow() → datetime.now(UTC) migration (eb18994)
- normalize transaction amount signs across all aggregations (4247981)
- prevent negative amounts in spent display and balance history (c30972f)
3.14.0 (2026-02-16)
New Features
- show all active webhook endpoints in startup log (9d71005)
Bug Fixes
- force basicConfig to replace pre-existing handlers (7eb8d4e)
- NameError in set_user_devices_button — undefined action_text (1b8ef69)
- remove unused PaymentService from MonitoringService init (491a7e1)
- resolve MissingGreenlet error when accessing subscription.tariff (a93a32f)
- sync support mode from cabinet admin to SupportSettingsService (516be6e)
- sync SUPPORT_SYSTEM_MODE between SystemSettings and SupportSettings (0807a9f)
Refactoring
- improve log formatting — logger name prefix and table alignment (f637204)
3.13.0 (2026-02-16)
New Features
- colored console logs via structlog + rich + FORCE_COLOR (bf64611)
Bug Fixes
- limit Rich traceback output to prevent console flood (11ef714)
- resolve exc_info for admin notifications, clean log formatting (11f8af0)
- suppress startup log noise (~350 lines → ~30) (8a6650e)
- traceback in Telegram notifications + reduce log padding (909a403)
- use sync context manager for structlog bound_contextvars (25e8c9f)
Refactoring
- complete structlog migration with contextvars, kwargs, and logging hardening (1f0fef1)
3.12.1 (2026-02-16)
Bug Fixes
- add /start burst rate-limit to prevent spam abuse (61a9722)
- add promo code anti-abuse protections (97ec39a)
- handle TelegramBadRequest in ticket edit_message_text calls (8e61fe4)
- replace deprecated Query(regex=) with pattern= (871ceb8)
3.12.0 (2026-02-15)
New Features
- add 'default' (no color) option for button styles (10538e7)
- add button style and emoji support for cabinet mode (Bot API 9.4) (bf2b2f1)
- add per-button enable/disable toggle and custom labels per locale (68773b7)
- add per-section button style and emoji customization via admin API (a968791)
- add web admin button for admins in cabinet mode (9ac6da4)
- rename MAIN_MENU_MODE=text to cabinet with deep-linking to frontend sections (ad87c5f)
Bug Fixes
- daily tariff subscriptions stuck in expired/disabled with no resume path (80914c1)
- filter out traffic packages with zero price from purchase options (64a684c)
- handle photo message in ticket creation flow (e182280)
- handle tariff_extend callback without period (back button crash) (ba0a5e9)
- pre-validate CABINET_BUTTON_STYLE to prevent invalid values from suppressing per-section defaults (46c1a69)
- remove redundant trial inactivity monitoring checks (d712ab8)
- webhook notification 'My Subscription' button uses unregistered callback_data (1e2a7e3)
3.11.0 (2026-02-12)
New Features
- add cabinet admin API for pinned messages management (1a476c4)
- add startup warnings for missing HAPP_CRYPTOLINK_REDIRECT_TEMPLATE and MINIAPP_CUSTOM_URL (476b89f)
Bug Fixes
- add passive_deletes to Subscription relationships to prevent NOT NULL violation on cascade delete (bfd66c4)
- add startup warning for missing HAPP_CRYPTOLINK_REDIRECT_TEMPLATE in guide mode (1d43ae5)
- flood control handling in pinned messages and XSS hardening in HTML sanitizer (454b831)
- suppress expired callback query error in AuthMiddleware (2de4384)
- ticket creation crash and webhook PendingRollbackError (760c833)
3.10.3 (2026-02-12)
Bug Fixes
- handle unique constraint conflicts during backup restore without clear_existing (5893874)
- harden backup create/restore against serialization and constraint errors (fc42916)
- resolve deadlock on server_squads counter updates and add webhook notification toggles (57dc1ff)
3.10.2 (2026-02-12)
Bug Fixes
- allow email change for unverified emails (93bb8e0)
- clean stale squad UUIDs from tariffs during server sync (fcaa9df)
- delete subscription_servers before subscription to prevent FK violation (7d9ced8)
- handle StaleDataError in webhook user.deleted server counter decrement (c30c2fe)
- handle time/date types in backup JSON serialization (27365b3)
- HTML parse fallback, email change race condition, username length limit (d05ff67)
- payment race conditions, balance atomicity, renewal rollback safety (c5124b9)
- remove DisplayNameRestrictionMiddleware (640da34)
- suppress bot-blocked-by-user error in AuthMiddleware (fda9f3b)
- UnboundLocalError for get_logo_media in required_sub_channel_check (d3c14ac)
- use traffic topup config and add WATA 429 retry (b5998ea)
Refactoring
- remove modem functionality from classic subscriptions (ee2e79d)
3.10.1 (2026-02-11)
Bug Fixes
- address review issues in backup, updates, and webhook handlers (2094886)
- allow purchase when recalculated price is lower than cached (19dabf3)
- change CryptoBot URL priority to bot_invoice_url for Telegram opening (3193ffb)
- clear subscription data when user deleted from Remnawave panel (b0fd38d)
- downgrade Telegram timeout errors to warning in monitoring service (e43a8d6)
- expand backup coverage to all 68 models and harden restore (02e40bd)
- handle nullable traffic_limit_gb and end_date in subscription model (e94b93d)
- handle StaleDataError in webhook when user already deleted (d58a80f)
- ignore 'message is not modified' on privacy policy decline (be1da97)
- preserve purchased traffic when extending same tariff (b167ed3)
- prevent cascading greenlet errors after sync rollback (a1ffd5b)
- protect server counter callers and fix tariff change detection (bee4aa4)
- suppress 'message is not modified' error in updates panel (3a680b4)
- use callback fallback when MINIAPP_CUSTOM_URL is not set (eaf3a07)
- use flush instead of commit in server counter functions (6cec024)
3.10.0 (2026-02-10)
New Features
- add all remaining RemnaWave webhook events (node, service, crm, device) (1e37fd9)
- add close button to all webhook notifications (d9de15a)
- add MULENPAY_WEBSITE_URL setting for post-payment redirect (fe5f5de)
- add RemnaWave incoming webhooks for real-time subscription events (6d67cad)
- handle errors.bandwidth_usage_threshold_reached_max_notifications webhook (8e85e24)
- handle service.subpage_config_changed webhook event (43a326a)
- unified notification delivery for webhook events (email + WS support) (26637f0)
- webhook protection — prevent sync/monitoring from overwriting webhook data (184c52d)
Bug Fixes
- add action buttons to webhook notifications and fix empty device names (7091eb9)
- add missing placeholders to Arabic SUBSCRIPTION_INFO template (fe54640)
- allow non-HTTP deep links in crypto link webhook updates (f779225)
- build composite device name from platform + hwid short suffix (17ce640)
- downgrade transient API errors (502/503/504) to warning level (ec8eaf5)
- extract device name from nested hwidUserDevice object (79793c4)
- preserve payment initiation time in transaction created_at (90d9df8)
- security and architecture fixes for webhook handlers (dc1e96b)
- stop CryptoBot webhook retry loop and save cabinet payments to DB (2cb6d73)
- sync subscription status from panel in user.modified webhook (5156d63)
- use event field directly as event_name (already includes scope prefix) (9aa22af)
- webhook:close button not working due to channel check timeout (019fbc1)
3.9.1 (2026-02-10)
Bug Fixes
- don't delete Heleket invoice message on status check (9943253)
- safe HTML preview truncation and lazy-load subscription fallback (40d8a6d)
- use actual DB columns for subscription fallback query (f0e7f8e)
3.9.0 (2026-02-09)
New Features
- add lite mode functionality with endpoints for retrieval and update (7b0403a)
- add Persian (fa) locale with complete translations (29a3b39)
- allow tariff deletion with active subscriptions (ebd6bee)
- localization: add Persian (fa) locale support and wire it across app flows (cc54a7a)
Bug Fixes
- nullify payment FK references before deleting transactions in user restoration (0b86f37)
- prevent sync from overwriting end_date for non-ACTIVE panel users (49871f8)
- promo code max_uses=0 conversion and trial UX after promo activation (1cae713)
- skip users with active subscriptions in admin inactive cleanup (e79f598)
- use selection.period.days instead of selection.period_days (4541016)
Performance
- cache logo file_id to avoid re-uploading on every message (142ff14)
Refactoring
- remove "both" mode from BOT_RUN_MODE, keep only polling and webhook (efa3a5d)
- remove Flask, use FastAPI exclusively for all webhooks (119f463)
- remove smart auto-activation & activation prompt, fix production bugs (a3903a2)
3.8.0 (2026-02-08)
New Features
- add admin device management endpoints (c57de10)
- add admin traffic packages and device limit management (2f90f91)
- add admin updates endpoint for bot and cabinet releases (11b8ab1)
- add endpoint for updating user referral commission percent (da6f746)
- add enrichment data to CSV export (f2dbab6)
- add server-side sorting for enrichment columns (15c7cc2)
- add system info endpoint for admin dashboard (02c30f8)
- add traffic usage enrichment endpoint with devices, spending, dates, last node (5cf3f2f)
- admin panel enhancements & bug fixes (e6ebf81)
Bug Fixes
- add debug logging for bulk device response structure (46da31d)
- add email field to traffic table for OAuth/email users (94fcf20)
- add email/UUID fallback for OAuth user panel sync (165965d)
- add enrichment device mapping debug logs (5be82f2)
- include additional devices in tariff renewal price and display (17e9259)
- paginate bulk device endpoint to fetch all HWID devices (4648a82)
- read bot version from pyproject.toml when VERSION env is not set (9828ff0)
- revert device pagination, add raw user data field discovery (8f7fa76)
- use bulk device endpoint instead of per-user calls (5f219c3)
- use correct pagination params (start/size) for bulk HWID devices (17af51c)
- use per-user panel endpoints for reliable device counts and last node data (9d39901)
3.7.2 (2026-02-08)
Bug Fixes
- handle FK violation in create_yookassa_payment when user is deleted (55d281b)
- remove dots from Remnawave username sanitization (d6fa86b)
3.7.1 (2026-02-08)
Bug Fixes
- release-please config — remove blocked workflow files (d88ca98)
- remove workflow files and pyproject.toml from release-please extra-files (5070bb3)
- resolve HWID reset and webhook FK violation (5f3e426)
- resolve HWID reset context manager bug and webhook FK violation (a9eee19)
- resolve merge conflict in release-please config (0ef4f55)
- resolve multiple production errors and performance issues (071c23d)
3.7.0 (2026-02-07)
Features
- add admin traffic usage API (aa1cd38)
- add admin traffic usage API with per-node statistics (6c2c25d)
- add node/status filters and custom date range to traffic page (ad260d9)
- add node/status filters, custom date range, connected devices to traffic page (9ea533a)
- add node/status filters, date range, devices to traffic page (ad6522f)
- add risk columns to traffic CSV export (7c1a142)
- add tariff filter, fix traffic data aggregation (fa01819)
- node/status filters + custom date range for traffic page (a161e2f)
- tariff filter + fix traffic data aggregation (1021c2c)
- traffic filters, date range & risk columns in CSV export (4c40b5b)
Bug Fixes
- close unclosed HTML tags in version notification (0b61c7f)
- close unclosed HTML tags when truncating version notification (b674550)
- correct response parsing for non-legacy node-users endpoint (a076dfb)
- correct response parsing for non-legacy node-users endpoint (91ac90c)
- handle mixed types in traffic sort (eeed2d6)
- handle mixed types in traffic sort for string fields (a194be0)
- resolve 429 rate limiting on traffic page (b12544d)
- resolve 429 rate limiting on traffic page (924d6bc)
- use legacy per-node endpoint for traffic aggregation (cc1c8ba)
- use legacy per-node endpoint with correct response format (b707b79)
- use PaymentService for cabinet YooKassa payments (61bb8fc)
- use PaymentService for cabinet YooKassa payments to save local DB record (ff5bba3)
3.6.0 (2026-02-07)
Features
- add OAuth 2.0 authorization (Google, Yandex, Discord, VK) (97be4af)
- add panel info, node usage endpoints and campaign to user detail (287a43b)
- add panel info, node usage endpoints and campaign to user detail (0703212)
- add TRIAL_DISABLED_FOR setting to disable trial by user type (c4794db)
- add user_id filter to admin tickets endpoint (8886d0d)
- add user_id filter to admin tickets endpoint (d3819c4)
- block registration with disposable email addresses (9ca24ef)
- block registration with disposable email addresses (116c845)
- disable trial by user type (email/telegram/all) (4e7438b)
- migrate OAuth state storage from in-memory to Redis (e9b98b8)
- OAuth 2.0 authorization (Google, Yandex, Discord, VK) (3cbb9ef)
- return 30-day daily breakdown for node usage (7102c50)
- return 30-day daily breakdown for node usage (e4c65ca)
Bug Fixes
- increase OAuth HTTP timeout to 30s (333a3c5)
- parse bandwidth stats series format for node usage (557dbf3)
- parse bandwidth stats series format for node usage (462f7a9)
- pass tariff object instead of tariff_id to set_tariff_promo_groups (1ffb8a5)
- query per-node legacy endpoint for user traffic breakdown (b94e3ed)
- query per-node legacy endpoint for user traffic breakdown (51ca3e4)
- reduce node usage to 2 API calls to avoid 429 rate limit (c68c4e5)
- reduce node usage to 2 API calls to avoid 429 rate limit (f00a051)
- use accessible nodes API and fix date format for node usage (943e9a8)
- use accessible nodes API and fix date format for node usage (c4da591)
3.5.0 (2026-02-06)
Features
- add tariff reorder API endpoint (4c2e11e)
- pass platform-level fields from RemnaWave config to frontend (095bc00)
- serve original RemnaWave config from app-config endpoint (43762ce)
- tariff reorder API endpoint (085a617)
Bug Fixes
- enforce blacklist via middleware (561708b)
- enforce blacklist via middleware instead of per-handler checks (966a599)
- exclude signature field from Telegram initData HMAC validation (5b64046)
- improve button URL resolution and pass uiConfig to frontend (0ed98c3)
- restore unquote for user data parsing in telegram auth (c2cabbe)
Reverts
- remove signature pop from HMAC validation (4234769)