🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند تمدید اشتراک فعال شد (روزانه ساعت ۰۳:۰۰)
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند تمدید اشتراک فعال شد (روزانه ساعت ۰۳:۰۰)
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=22
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 22 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=22
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 22 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=22
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 22 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=22
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 22 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=22
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 22 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8620473195, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=22
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 22 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=22
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 22 جزو [1, 5, 10, 15, 20, 25] نبود).
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-07-14 03:30:00.123759
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8620473195, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8620473195, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8620473195, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=8620473195 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 5, 'final_price': 171000, 'discount': 5.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=5
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=283435180, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5981583637, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=5981583637 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 7, 'final_price': 171000, 'discount': 5.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=7
[receive_receipt] done, state cleared after receipt submission
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-07-15 03:30:00.037795🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند تمدید اشتراک فعال شد (روزانه ساعت ۰۳:۰۰)
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-07-20 03:30:00.091276
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=377498903, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=377498903, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 29 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=377498903, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 29 جزو [1, 5, 10, 15, 20, 25] نبود).
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-07-21 03:30:00.124115
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8620473195, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=2 total=2 page=1
[INFO] edited message with user list
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-07-22 03:30:00.138726
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 31 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 0 plans available
🔍 is_category_full(2) = True
⚠️ Category 2 is full
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 1 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 1
✅ Keyboard buttons generated: 2
👉 Category selected: 3
🔎 [is_category_full] category 3 → 0 plans available
🔍 is_category_full(3) = True
⚠️ Category 3 is full
👉 Category selected: 2
🔎 [is_category_full] category 2 → 1 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 1
✅ Keyboard buttons generated: 2
👉 prompt_terms: user=6496584416, plan_id=4
🔎 [is_plan_full] plan 4 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
🔎 [is_plan_full] plan 4 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 31 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 31 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 2
🔎 [is_category_full] category 2 → 3 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=6
🔎 [is_plan_full] plan 6 → False
🔎 [is_plan_full] plan 6 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
👉 Category selected: 2
🔎 [is_category_full] category 2 → 6 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 6
✅ Keyboard buttons generated: 7
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 3
🔎 [is_category_full] category 3 → 8 plans available
🔍 is_category_full(3) = False
✅ Plans found for category 3: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6496584416, plan_id=12
🔎 [is_plan_full] plan 12 → False
🔎 [is_plan_full] plan 12 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 3🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند تمدید اشتراک فعال شد (روزانه ساعت ۰۳:۰۰)
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-07-26 03:30:00.119961
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8569755094, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 4 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 4 جزو [1, 5, 10, 15, 20, 25] نبود).
🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند تمدید اشتراک فعال شد (روزانه ساعت ۰۳:۰۰)
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 4 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 4 جزو [1, 5, 10, 15, 20, 25] نبود).
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-07-27 03:30:00.042688
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=283435180, plan_id=21
🔎 [is_plan_full] plan 21 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1028775319, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7757871435, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
[receive_receipt] triggered for user=7757871435 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 25, 'plan_id': 2}
[receive_receipt] attach_receipt called for order_id=25
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=7757871435 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 25, 'plan_id': 2}
[receive_receipt] attach_receipt called for order_id=25
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=6496584416 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 26, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=26
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=6496584416 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 26, 'plan_id': 2}Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 36, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 85, in <module>
    from aiogram.types import CopyTextButton
ImportError: cannot import name 'CopyTextButton' from 'aiogram.types' (/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/types/__init__.py)
🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند تمدید اشتراک فعال شد (روزانه ساعت ۰۳:۰۰)
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=6496584416 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 34, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=34
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=120610590, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8745254215, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=8745254215 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 36, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=36
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8745254215, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=8745254215 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 38, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=38
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=400412690, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5657478347, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=41030460, plan_id=5
🔎 [is_plan_full] plan 5 → False
🔎 [is_plan_full] plan 5 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[receive_receipt] triggered for user=41030460 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 5, 'order_id': 40, 'final_price': 80000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=40
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=41030460, plan_id=5
🔎 [is_plan_full] plan 5 → False
🔎 [is_plan_full] plan 5 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7212081761, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=41030460, plan_id=5
🔎 [is_plan_full] plan 5 → False
🔎 [is_plan_full] plan 5 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[receive_receipt] triggered for user=41030460 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 5, 'order_id': 42, 'final_price': 80000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=42
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=180807422, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=180807422 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 43, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=43
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6893827596, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=6893827596 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 44, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=44
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5000942347, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=5000942347 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 45, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=45
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8620473195, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-07-29 03:30:00.109537
✅ CRON Done → sent=0, failed=0
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6899031914, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=6899031914 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 47, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=47
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7412028434, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7412028434, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=7412028434 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 49, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=49
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1190911179, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=1190911179 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 50, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=50
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6807062685, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=6807062685 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 51, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=51
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند تمدید اشتراک فعال شد (روزانه ساعت ۰۳:۰۰)
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7489931852, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7489931852, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=7489931852 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 78, 'plan_id': 1}
[receive_receipt] attach_receipt called for order_id=78
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7489931852, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=7489931852 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 79, 'plan_id': 1}
[receive_receipt] attach_receipt called for order_id=79
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7489931852, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7489931852, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7489931852, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7656735182, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=7656735182 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 82, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=82
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=72670234, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=72670234 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 83, 'plan_id': 3}
[receive_receipt] attach_receipt called for order_id=83
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=208648469, plan_id=4
🔎 [is_plan_full] plan 4 → False
🔎 [is_plan_full] plan 4 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[receive_receipt] triggered for user=208648469 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 4, 'order_id': 84, 'final_price': 40000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=84
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6374039130, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=6374039130 content_types=['message_id', 'date', 'chat', 'from_user', 'forward_origin', 'photo', 'caption', 'caption_entities', 'forward_date', 'forward_from']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 85, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=85
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=922685775, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=439500743, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=439500743 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 87, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=87
[receive_receipt] done, state cleared after receipt submission
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-07-31 03:30:00.115127
✅ CRON Done → sent=1, failed=0
[receive_receipt] triggered for user=922685775 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 86, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=86
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=75032199, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=75032199 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 88, 'plan_id': 2}
[receive_receipt] attach_receipt called for order_id=88
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=34 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 89, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=89
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=86434668, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7412028434, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=7412028434 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 92, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=92
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=94494883, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=63691502, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=94494883 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 25, 'order_id': 93, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=93
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=63691502 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 94, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=94
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=86434668 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 91, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=91
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=38 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users:2 from=1028775319
[INFO] fetched orders_count=10 total=38 page=2
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users:3 from=1028775319
[INFO] fetched orders_count=10 total=38 page=3
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users:4 from=1028775319
[INFO] fetched orders_count=8 total=38 page=4
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=38 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=427100718, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=427100718 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 95, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=95
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=40 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=40 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6374039130, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8617044385, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=6374039130 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 96, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=96
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=8617044385 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 97, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=97
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=357015692, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7697118755, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=382831540, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6127668233, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=6127668233 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 101, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=101
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=382831540 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 100, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=100
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=42 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7697118755, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=44 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=44 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=245041903, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=245041903 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 103, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=103
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=357015692 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 3, 'order_id': 98, 'final_price': 270000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=98
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=162182112, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5766257315, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=5766257315 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 105, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=105
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=46 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=46 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=47 page=1
[INFO] edited message with user list
[receive_receipt] triggered for user=162182112 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 104, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=104
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=48 page=1
[INFO] edited message with user list
[receive_receipt] triggered for user=7697118755 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 102, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=102
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=49 page=1
[INFO] edited message with user list
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-01 03:30:00.104311
✅ CRON Done → sent=1, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=573947456, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=573947456 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 106, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=106
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1346587302, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=1346587302 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 107, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=107
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7615648396, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=7615648396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 108, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=108
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=107583311, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=107583311 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 109, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=109
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=494756532, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=494756532 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 110, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=110
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6836542931, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=6836542931 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 111, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=111
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1106501219, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6673103024, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=6673103024 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 112, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=112
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6164514956, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=6164514956 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 113, 'plan_id': 1}
[receive_receipt] attach_receipt called for order_id=113
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5983135861, plan_id=25
🔎 [is_plan_full] plan 25 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5983135861, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5983135861, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-02 03:30:00.098973
✅ CRON Done → sent=1, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7687307272, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7052504400, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 11 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=7052504400 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 115, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=115
[receive_receipt] done, state cleared after receipt submission🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند تمدید اشتراک فعال شد (روزانه ساعت ۰۳:۰۰)
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6113499208, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 11 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=6113499208 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 119, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=119
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=61 page=1
[INFO] edited message with user list
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1674999336, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 11 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1674999336, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[receive_receipt] triggered for user=1674999336 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 121, 'plan_id': 25}
[receive_receipt] attach_receipt called for order_id=121
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6038533323, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 11 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=6038533323 content_types=['message_id', 'date', 'chat', 'from_user', 'photo', 'caption', 'caption_entities']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 122, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=122
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
[receive_receipt] triggered for user=5983135861 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 114, 'plan_id': 1}
[receive_receipt] attach_receipt called for order_id=114
[receive_receipt] done, state cleared after receipt submission
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 11 جزو [1, 5, 10, 15, 20, 25] نبود).
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-03 03:30:00.030278
✅ CRON Done → sent=1, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=367612725, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=367612725 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 124, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=124
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=137124696, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=137124696 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 3, 'order_id': 125, 'final_price': 270000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=125
[receive_receipt] done, state cleared after receipt submission
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=1106501219 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 126, 'plan_id': 2, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=126
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=8569001765, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[receive_receipt] triggered for user=8569001765 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'renew_order_id': 4, 'plan_id': 3, 'order_id': 127, 'final_price': 270000, 'discount': 0.0}
[receive_receipt] attach_receipt called for order_id=127
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=67 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=67 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=67 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users:2 from=1028775319
[INFO] fetched orders_count=10 total=67 page=2
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=300520861, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=300520861, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=300520861, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=300520861 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 129, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=129
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=95116491, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=95116491 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 3, 'order_id': 130, 'final_price': 270000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=130
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8305897150, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=8305897150 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 131, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=131
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6952599911, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=6952599911 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 132, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=132
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=130766008, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=130766008 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 133, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=133
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=179793849, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-04 03:30:00.031388
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=104544781, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=104544781 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 135, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=135
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=73 page=1
[INFO] edited message with user list
[receive_receipt] triggered for user=179793849 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 134, 'plan_id': 1}
[receive_receipt] attach_receipt called for order_id=134
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=74 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8305897150, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=8305897150 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 136, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=136
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=75 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=80072173, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=80072173 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 137, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=137
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=76 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=76 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=76 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=76 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=76 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=76 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=76 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=76 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=76 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-05 03:30:00.032272
✅ CRON Done → sent=1, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8998470944, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=265872204, plan_id=2
🔎 [is_plan_full] plan 2 → False
[receive_receipt] triggered for user=8998470944 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 139, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=139
[receive_receipt] done, state cleared after receipt submission
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=73730779, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=73730779 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 140, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=140
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=137819615, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=137819615 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 141, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=141
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=755831858, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=755831858 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 144, 'plan_id': 2}
[receive_receipt] attach_receipt called for order_id=144
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=80 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=80 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7596082124, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=7596082124 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 145, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] triggered for user=7596082124 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 145, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=145
[receive_receipt] attach_receipt called for order_id=145
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] done, state cleared after receipt submission
⚠️ edit_photo failed (will fallback to send new): 'Message' object has no attribute 'edit_photo'
Traceback (most recent call last):
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/pydantic/main.py", line 753, in __getattr__
    return pydantic_extra[item]
           ~~~~~~~~~~~~~~^^^^^^
KeyError: 'edit_photo'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/admin.py", line 978, in admin_order_detail_merged
    await cb.message.edit_photo(
          ^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/pydantic/main.py", line 755, in __getattr__
    raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}') from exc
AttributeError: 'Message' object has no attribute 'edit_photo'

[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=81 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=81 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=72928460, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=72928460 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 146, 'plan_id': 2}
[receive_receipt] attach_receipt called for order_id=146
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=300520861, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=300520861 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 147, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=147
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=265872204, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=265872204 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 148, 'plan_id': 2}
[receive_receipt] attach_receipt called for order_id=148
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند تمدید اشتراک فعال شد (روزانه ساعت ۰۳:۰۰)
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1246905146, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=1246905146 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 157, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=157
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=91 page=1
[INFO] edited message with user list
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-06 03:30:00.043603
✅ CRON Done → sent=1, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=433664001, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=433664001 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 158, 'plan_id': 1}
[receive_receipt] attach_receipt called for order_id=158
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=93024350, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=93024350 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 159, 'plan_id': 2}
[receive_receipt] attach_receipt called for order_id=159
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=775660082, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=775660082 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 160, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=160
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=414720915, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=414720915 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 161, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=161
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=581142761, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=581142761, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=581142761 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 163, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=163
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=93 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=93 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=94 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=95 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=95 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=96 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans availableERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-649, started daemon 140214585538304)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
<string>:26: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-649, started daemon 140214585538304)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-692, started daemon 140214339090176)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-692, started daemon 140214339090176)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-713, started daemon 140214374758144)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-713, started daemon 140214374758144)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6826433803, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=6826433803 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 164, 'plan_id': 1}
[receive_receipt] attach_receipt called for order_id=164
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8871379568, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=1674999336 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 155, 'plan_id': 1}
[receive_receipt] attach_receipt called for order_id=155
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=632535778, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=632535778 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 167, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=167
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=310979089, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=310979089 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 168, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=168
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=100 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=28440307, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8305897150, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=8305897150 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 170, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=170
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7253061531, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=112003169, plan_id=24
🔎 [is_plan_full] plan 24 → False
🔎 [is_plan_full] plan 24 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[receive_receipt] triggered for user=112003169 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 172, 'plan_id': 24}
[receive_receipt] attach_receipt called for order_id=172
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=28440307, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=28440307 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 173, 'plan_id': 2}
[receive_receipt] attach_receipt called for order_id=173
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1412611471, plan_id=2
🔎 [is_plan_full] plan 2 → False
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=103 page=1
[INFO] edited message with user list
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=103 page=1
[INFO] edited message with user list
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
[receive_receipt] triggered for user=1412611471 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 174, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=174
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=104 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=291237891, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=291237891, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=291237891 content_types=['message_id', 'date', 'chat', 'from_user', 'forward_origin', 'photo', 'caption', 'caption_entities', 'forward_date', 'forward_from']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 175, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=175
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=105 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8745254215, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1122369216, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=8745254215 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 176, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=176
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5837202019, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5837202019, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5837202019, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=5837202019 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 180, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=180
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=107 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=107 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=71953383, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=71953383 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 181, 'plan_id': 2}
[receive_receipt] attach_receipt called for order_id=181
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=128008539, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=128008539 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 182, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=182
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=689505443, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[receive_receipt] triggered for user=689505443 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 2, 'order_id': 183, 'final_price': 220000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=183
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1034636889, plan_id=1
🔎 [is_plan_full] plan 1 → False
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-07 03:30:00.023642
✅ CRON Done → sent=1, failed=0
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=110 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=110 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=109 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=109 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=109 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=109 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=110 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=110 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=110 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=110 page=1
[INFO] edited message with user list
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8141236107, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8141236107, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=8141236107 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 3, 'order_id': 185, 'final_price': 270000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=185
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8141236107, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=8141236107 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 3, 'order_id': 186, 'final_price': 270000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=186
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7253061531, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=7253061531 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 188, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=188
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=1034636889 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 187, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=187
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5340395103, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6493467981, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8704049873, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=657096454, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=657096454 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'order_id': 192, 'plan_id': 2}
[receive_receipt] attach_receipt called for order_id=192
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=6493467981 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 190, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=190
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5837202019, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[receive_receipt] triggered for user=5837202019 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 25, 'order_id': 193, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None, 'gift_applied': 9000}
[receive_receipt] attach_receipt called for order_id=193
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6127668233, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=16
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 16 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=889428370, plan_id=1
🔎 [is_plan_full] plan 1 → False
[receive_receipt] triggered for user=6127668233 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities', 'link_preview_options']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 194, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=194
[receive_receipt] done, state cleared after receipt submission
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-08 03:30:00.038712
✅ CRON Done → sent=1, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=365438571, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=17
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 17 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=365438571 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 195, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=195
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8719900929, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=17
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 17 جزو [1, 5, 10, 15, 20, 25] نبود).
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=117 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7251481620, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=17
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 17 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=7251481620 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] current_state=Purchase:waiting_receipt, state_data={'plan_id': 1, 'order_id': 197, 'final_price': 180000, 'discount': 0.0, 'renew_order_id': None}
[receive_receipt] attach_receipt called for order_id=197
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7656735182, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=17
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 17 جزو [1, 5, 10, 15, 20, 25] نبود).ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5, started daemon 140406795167488)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/pydantic/_internal/_core_utils.py:466: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5, started daemon 140406795167488)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
  ref_counts[ref] += 1
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-9, started daemon 140406803560192)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-9, started daemon 140406803560192)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-13, started daemon 140406786774784)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-13, started daemon 140406786774784)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-58, started daemon 140405962172160)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-58, started daemon 140405962172160)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-62, started daemon 140406566151936)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-62, started daemon 140406566151936)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-57, started daemon 140439435253504)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-57, started daemon 140439435253504)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-122, started daemon 140438979733248)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-122, started daemon 140438979733248)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-126, started daemon 140439410075392)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-126, started daemon 140439410075392)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-136, started daemon 140438971340544)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-136, started daemon 140438971340544)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5, started daemon 140655970379520)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/pydantic/_internal/_core_utils.py:466: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5, started daemon 140655970379520)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
  ref_counts[ref] += 1
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-11, started daemon 140655615538944)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-11, started daemon 140655615538944)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-9, started daemon 140655978772224)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-9, started daemon 140655978772224)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند کرون‌جاب‌ها و پاک‌سازی دیتابیس فعال شد.
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1246905146, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=19
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 19 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1246905146, order_id=213
[receive_receipt] triggered for user=1246905146 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 8870
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=128 page=1
[INFO] edited message with user list
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=283435180, plan_id=20
🔎 [is_plan_full] plan 20 → False
👉 prompt_terms: user=211096711, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=19
[prompt_receipt] callback from user=211096711, order_id=214
[prompt_receipt] callback from user=211096711, order_id=214
[receive_receipt] triggered for user=211096711 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 8932
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6229807838, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=19
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 19 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6229807838, plan_id=21
🔎 [is_plan_full] plan 21 → False
🔎 [is_plan_full] plan 21 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=19
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-11 03:30:00.042079
✅ CRON Done → sent=0, failed=0
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5731057483, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[discount-check] ⛔️ بدون تخفیف (روز 20 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=5731057483, order_id=215
[receive_receipt] triggered for user=5731057483 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 9042
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8871379568, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[discount-check] ⛔️ بدون تخفیف (روز 20 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=377498903, plan_id=20
🔎 [is_plan_full] plan 20 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=377498903, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[discount-check] ⛔️ بدون تخفیف (روز 20 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=721953699, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[discount-check] ⛔️ بدون تخفیف (روز 20 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6077389381, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[discount-check] ⛔️ بدون تخفیف (روز 20 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=721953699, order_id=217
[receive_receipt] triggered for user=721953699 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 9133
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=6077389381, order_id=218
[receive_receipt] triggered for user=6077389381 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 9135
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=377498903, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[discount-check] ⛔️ بدون تخفیف (روز 20 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=377498903, order_id=219
[receive_receipt] triggered for user=377498903 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 9168
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=133 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=133 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=105695433, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[discount-check] ⛔️ بدون تخفیف (روز 20 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=105695433, order_id=220
[receive_receipt] triggered for user=105695433 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 9196
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=697898166, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[discount-check] ⛔️ بدون تخفیف (روز 20 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=697898166, order_id=221
[receive_receipt] triggered for user=697898166 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 9221
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=84938558, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[discount-check] ⛔️ بدون تخفیف (روز 20 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=747989741, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[discount-check] ⛔️ بدون تخفیف (روز 20 جزو [1, 5, 10, 15, 20, 25] بود).
👉 prompt_terms: user=7769658040, plan_id=22
🔎 [is_plan_full] plan 22 → False
🔎 [is_plan_full] plan 22 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6799643682, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6799643682, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=20
[prompt_receipt] callback from user=6799643682, order_id=225
[receive_receipt] triggered for user=6799643682 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 9265
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=7769658040, order_id=224
[receive_receipt] triggered for user=7769658040 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 9248
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-12 03:30:00.028337
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5812472924, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=487624992, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=383900579, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 21 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=383900579, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 21 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=383900579, order_id=228
[receive_receipt] triggered for user=383900579 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 9875
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 21 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6496584416, order_id=229
[receive_receipt] triggered for user=6496584416 content_types=['message_id', 'date', 'chat', 'from_user', 'photo', 'caption']
[receive_receipt] successfully removed reply_markup from invoice msg 9883
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=383900579, order_id=228
[receive_receipt] triggered for user=383900579 content_types=['message_id', 'date', 'chat', 'from_user', 'forward_origin', 'photo', 'forward_date', 'forward_from']
[receive_receipt] successfully removed reply_markup from invoice msg 9902
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=138 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5015545525, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 21 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5015545525, order_id=230
[receive_receipt] triggered for user=5015545525 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 9939
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1081384702, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 21 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1081384702, order_id=231
[receive_receipt] triggered for user=1081384702 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10002
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=1106680119, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 21 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1670723268, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 21 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1106680119, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 21 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=722652779, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 21 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=722652779, order_id=235
[prompt_receipt] callback from user=722652779, order_id=235
[receive_receipt] triggered for user=722652779 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10063
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=86303305, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=21
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 21 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=86303305, order_id=236
[receive_receipt] triggered for user=86303305 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10101
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-13 03:30:00.139886
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=721953699, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=22
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 22 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=721953699, order_id=237
[receive_receipt] triggered for user=721953699 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10143
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1507697636, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=22
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 22 جزو [1, 5, 10, 15, 20, 25] نبود).ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-94, started daemon 140296287405824)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
/opt/alt/python311/lib64/python3.11/functools.py:52: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-94, started daemon 140296287405824)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
  value = getattr(wrapped, attr)
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-108, started daemon 140295693915904)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-108, started daemon 140295693915904)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-112, started daemon 140295702308608)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib64/python3.11/site-packages/aiohttp/client_reqrep.py:971: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-112, started daemon 140295702308608)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
  with self._timer:
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-114, started daemon 140295677130496)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-114, started daemon 140295677130496)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-118, started daemon 140295685523200)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-118, started daemon 140295685523200)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند کرون‌جاب‌ها و پاک‌سازی دیتابیس فعال شد.
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7077851703, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7077851703, order_id=241
[receive_receipt] triggered for user=7077851703 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10651
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=95953345, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=95953345, order_id=242
[prompt_receipt] callback from user=95953345, order_id=242
[receive_receipt] triggered for user=95953345 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10662
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=147 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=148 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=407458767, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=104544781, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=104544781, order_id=244
[receive_receipt] triggered for user=104544781 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10714
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=149 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7815086396, order_id=245
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10752
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=150 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=150 page=1
[INFO] edited message with user list
[prompt_receipt] callback from user=407458767, order_id=243
[receive_receipt] triggered for user=407458767 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 10709
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=151 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5727557324, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5727557324, order_id=246
[receive_receipt] triggered for user=5727557324 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities']
[receive_receipt] successfully removed reply_markup from invoice msg 10807
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5727557324, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5727557324, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5727557324, order_id=247
[receive_receipt] triggered for user=5727557324 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities']
[receive_receipt] successfully removed reply_markup from invoice msg 10830
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=153 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6955735795, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6955735795, order_id=248
[receive_receipt] triggered for user=6955735795 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 10864
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=154 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5812472924, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[prompt_receipt] callback from user=5812472924, order_id=249
[cancel_upload_receipt] user=5812472924 cancel upload
[prompt_receipt] callback from user=5812472924, order_id=249
[cancel_upload_receipt] user=5812472924 cancel upload
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5812472924, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[prompt_receipt] callback from user=5812472924, order_id=250
[receive_receipt] triggered for user=5812472924 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10906
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=747989741, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[prompt_receipt] callback from user=747989741, order_id=251
[receive_receipt] triggered for user=747989741 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities', 'link_preview_options']
[receive_receipt] successfully removed reply_markup from invoice msg 10915
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5962425340, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5962425340, order_id=252
[receive_receipt] triggered for user=5962425340 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10938
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=157 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=88932703, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8141236107, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=8141236107, order_id=254
[receive_receipt] triggered for user=8141236107 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10993
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=88932703, order_id=253
[receive_receipt] triggered for user=88932703 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 10980
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=158 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=106064914, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=106064914, order_id=255
[receive_receipt] triggered for user=106064914 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11054
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1028775319, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=394132426, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=23
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 23 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-15 03:30:01.061813
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6155501292, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6155501292, order_id=258
[cancel_upload_receipt] user=6155501292 cancel upload
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6155501292, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6155501292, order_id=259
[receive_receipt] triggered for user=6155501292 content_types=['message_id', 'date', 'chat', 'from_user', 'photo', 'caption']
[receive_receipt] successfully removed reply_markup from invoice msg 11113
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6831554853, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6831554853, order_id=260
[receive_receipt] triggered for user=6831554853 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11127
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8042839874, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8042839874, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=95953345, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=782870704, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=95953345, order_id=263
[receive_receipt] triggered for user=95953345 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11177
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=782870704, order_id=264
[receive_receipt] triggered for user=782870704 content_types=['message_id', 'date', 'chat', 'from_user', 'forward_origin', 'photo', 'forward_date', 'forward_from']
[receive_receipt] successfully removed reply_markup from invoice msg 11186
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=178506901, plan_id=27
🔎 [is_plan_full] plan 27 → False
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5638719974, plan_id=23
🔎 [is_plan_full] plan 23 → False
🔎 [is_plan_full] plan 23 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[prompt_receipt] callback from user=5638719974, order_id=265
[receive_receipt] triggered for user=5638719974 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11231
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8305897150, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
🔎 [is_plan_full] plan 27 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[prompt_receipt] callback from user=178506901, order_id=267
[receive_receipt] triggered for user=178506901 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-1771, started daemon 140295668737792)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-1771, started daemon 140295668737792)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

[receive_receipt] successfully removed reply_markup from invoice msg 11259
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=747989741, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=747989741, order_id=268
[receive_receipt] triggered for user=747989741 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11293
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1418209388, plan_id=27
🔎 [is_plan_full] plan 27 → False
🔎 [is_plan_full] plan 27 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[prompt_receipt] callback from user=1418209388, order_id=269
[receive_receipt] triggered for user=1418209388 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11312
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1418209388, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1418209388, order_id=270
[receive_receipt] triggered for user=1418209388 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11341
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=86589572, plan_id=3
🔎 [is_plan_full] plan 3 → False
👉 Category selected: 5
🔎 [is_category_full] category 5 → 0 plans available
🔍 is_category_full(5) = True
⚠️ Category 5 is full
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=24
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 24 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 5
🔎 [is_category_full] category 5 → 0 plans available
🔍 is_category_full(5) = True
⚠️ Category 5 is full
👉 Category selected: 5
🔎 [is_category_full] category 5 → 1 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 1
✅ Keyboard buttons generated: 2
[prompt_receipt] callback from user=86589572, order_id=271
[receive_receipt] triggered for user=86589572 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11459
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6403373139, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-169, started daemon 140699135620864)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-169, started daemon 140699135620864)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-173, started daemon 140699127228160)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-173, started daemon 140699127228160)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5, started daemon 140529621174016)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/pydantic/_internal/_core_utils.py:466: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5, started daemon 140529621174016)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
  ref_counts[ref] += 1
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-9, started daemon 140529629566720)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-9, started daemon 140529629566720)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-13, started daemon 140529604388608)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-13, started daemon 140529604388608)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-17, started daemon 140529612781312)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-17, started daemon 140529612781312)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/main.py", line 37, in <module>
    from bot.handlers.user import router as user_router
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 254
    reply_markup=kb
                 ^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-151, started daemon 140410813306624)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
<frozen abc>:123: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-151, started daemon 140410813306624)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-387, started daemon 140410307462912)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-387, started daemon 140410307462912)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند کرون‌جاب‌ها و پاک‌سازی دیتابیس فعال شد.
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
🧹 پاک‌سازی خودکار: تعداد 3 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=721953699, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=25
[discount-check] ⛔️ بدون تخفیف (روز 25 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=721953699, order_id=276
[receive_receipt] triggered for user=721953699 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11844
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=172 page=1
[INFO] edited message with user list
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=293805214, plan_id=29
🔎 [is_plan_full] plan 29 → False
🔎 [is_plan_full] plan 29 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=25
[prompt_receipt] callback from user=293805214, order_id=277
[cancel_upload_receipt] user=293805214 cancel upload
[prompt_receipt] callback from user=293805214, order_id=277
[receive_receipt] triggered for user=293805214 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11884
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=25
[discount-check] ⛔️ بدون تخفیف (روز 25 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=7815086396, order_id=278
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11921
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=174 page=1
[INFO] edited message with user list
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=128008539, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=25
[discount-check] ⛔️ بدون تخفیف (روز 25 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=128008539, order_id=279
[receive_receipt] triggered for user=128008539 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11964
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1418209388, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=25
[discount-check] ⛔️ بدون تخفیف (روز 25 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=1418209388, order_id=280
[receive_receipt] triggered for user=1418209388 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 11973
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6487221990, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6487221990, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=25
[discount-check] ⛔️ بدون تخفیف (روز 25 جزو [1, 5, 10, 15, 20, 25] بود).
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=175 page=1
[INFO] edited message with user list
[prompt_receipt] callback from user=6487221990, order_id=281
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=176 page=1
[INFO] edited message with user list
[receive_receipt] triggered for user=6487221990 content_types=['message_id', 'date', 'chat', 'from_user', 'forward_origin', 'photo', 'forward_date', 'forward_from']
[receive_receipt] successfully removed reply_markup from invoice msg 11997
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=177 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5291720566, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5291720566, plan_id=1
🔎 [is_plan_full] plan 1 → FalseERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-811, started daemon 140410324248320)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-811, started daemon 140410324248320)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=25
[discount-check] ⛔️ بدون تخفیف (روز 25 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=5291720566, order_id=282
[receive_receipt] triggered for user=5291720566 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 12071
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=178 page=1
[INFO] edited message with user list
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-17 03:30:01.085771
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5893828652, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=26
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 26 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5893828652, order_id=283
[prompt_receipt] callback from user=5893828652, order_id=283
[receive_receipt] triggered for user=5893828652 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 12191
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=377498903, plan_id=27
🔎 [is_plan_full] plan 27 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=927762266, plan_id=41
🔎 [is_plan_full] plan 41 → False
🔎 [is_plan_full] plan 41 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=26
[prompt_receipt] callback from user=927762266, order_id=284
[receive_receipt] triggered for user=927762266 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 12233
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=180 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=180 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=803854421, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=803854421, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=26
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 26 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=803854421, order_id=285
[receive_receipt] triggered for user=803854421 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 12318
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6292352515, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=26ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-899, started daemon 140409929987840)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-899, started daemon 140409929987840)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-1097, started daemon 140410282284800)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-1097, started daemon 140410282284800)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 26 جزو [1, 5, 10, 15, 20, 25] نبود).
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-18 03:30:01.134135
✅ CRON Done → sent=0, failed=0
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=8288861472, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=227856002, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=227856002, order_id=288
[receive_receipt] triggered for user=227856002 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 12424
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7235199597, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=7235199597, plan_id=27
🔎 [is_plan_full] plan 27 → False
🔎 [is_plan_full] plan 27 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=182 page=1
[INFO] edited message with user list
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5230631635, plan_id=29
🔎 [is_plan_full] plan 29 → False
🔎 [is_plan_full] plan 29 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[prompt_receipt] callback from user=5230631635, order_id=291
[receive_receipt] triggered for user=5230631635 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 12479
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7815086396, order_id=292
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 12488
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=184 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6496584416, order_id=293
[receive_receipt] triggered for user=6496584416 content_types=['message_id', 'date', 'chat', 'from_user', 'photo', 'caption']
[receive_receipt] successfully removed reply_markup from invoice msg 12529
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=109411318, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1108887565, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=8852653265, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=8852653265, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[prompt_receipt] callback from user=109411318, order_id=296
[receive_receipt] triggered for user=109411318 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 12615
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1108887565, plan_id=1
🔎 [is_plan_full] plan 1 → False
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=185 page=1
[INFO] edited message with user list
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1108887565, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1143437222, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=927762266, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=927762266, order_id=299
[receive_receipt] triggered for user=927762266 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 12720
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=186 page=1
[INFO] edited message with user list
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=107678613, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=107678613, order_id=300
[receive_receipt] triggered for user=107678613 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 12756
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=187 page=1
[INFO] edited message with user list
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=187 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=187 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1143437222, plan_id=22
🔎 [is_plan_full] plan 22 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1143437222, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1143437222, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 27 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
[prompt_receipt] callback from user=1143437222, order_id=301
[receive_receipt] triggered for user=1143437222 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
[receive_receipt] successfully removed reply_markup from invoice msg 12815
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=93142393, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=27ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-370, started daemon 139797485053696)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
<frozen abc>:123: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-370, started daemon 139797485053696)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند کرون‌جاب‌ها و پاک‌سازی دیتابیس فعال شد.
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-19 03:30:01.902984
✅ CRON Done → sent=0, failed=0
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=188 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=188 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=188 page=1
[INFO] edited message with user list
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8141236107, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=28
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 28 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=8141236107, order_id=303
[receive_receipt] triggered for user=8141236107 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13257
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5978745857, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=28
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 28 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5978745857, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=487624992, plan_id=21
🔎 [is_plan_full] plan 21 → False
🔎 [is_plan_full] plan 21 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=28
[prompt_receipt] callback from user=487624992, order_id=305
[receive_receipt] triggered for user=487624992 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13307
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=28
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 28 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7815086396, order_id=306
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13332
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=721953699, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=28
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 28 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=28
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 28 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند کرون‌جاب‌ها و پاک‌سازی دیتابیس فعال شد.
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6292352515, plan_id=1
🔎 [is_plan_full] plan 1 → False
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-20 03:30:01.099742
✅ CRON Done → sent=0, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1341938372, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 29 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1341938372, plan_id=27
🔎 [is_plan_full] plan 27 → False
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1341938372, plan_id=27
🔎 [is_plan_full] plan 27 → False
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1286918603, plan_id=21
🔎 [is_plan_full] plan 21 → False
🔎 [is_plan_full] plan 21 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1028775319, plan_id=21
🔎 [is_plan_full] plan 21 → False
🔎 [is_plan_full] plan 21 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1286918603, plan_id=21
🔎 [is_plan_full] plan 21 → False
🔎 [is_plan_full] plan 21 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[prompt_receipt] callback from user=721953699, order_id=307
[receive_receipt] triggered for user=721953699 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13355
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1246905146, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 29 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1246905146, order_id=319
[receive_receipt] triggered for user=1246905146 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13586
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=195 page=1
[INFO] edited message with user list
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=84938558, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 29 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1001419580, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 29 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=103509502, plan_id=28
🔎 [is_plan_full] plan 28 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=105695433, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 29 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=105695433, order_id=323
[receive_receipt] triggered for user=105695433 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13678
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=196 page=1
[INFO] edited message with user list
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=103509502, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[prompt_receipt] callback from user=103509502, order_id=325
[receive_receipt] triggered for user=103509502 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13722
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=397232597, plan_id=42
🔎 [is_plan_full] plan 42 → False
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=397232597, plan_id=36
🔎 [is_plan_full] plan 36 → False
🔎 [is_plan_full] plan 36 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[prompt_receipt] callback from user=397232597, order_id=326
[receive_receipt] triggered for user=397232597 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13753
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=899751386, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 29 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=899751386, order_id=327
[receive_receipt] triggered for user=899751386 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13781
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=6836542931, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 29 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6836542931, order_id=328
[receive_receipt] triggered for user=6836542931 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13786
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=199 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=200 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8001527938, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 29 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=8001527938, order_id=329
[receive_receipt] triggered for user=8001527938 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 13842
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=201 page=1
[INFO] edited message with user list
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=92370991, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=29
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-21 03:30:01.108423
✅ CRON Done → sent=0, failed=0
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=73346752, plan_id=24
🔎 [is_plan_full] plan 24 → False
🔎 [is_plan_full] plan 24 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[prompt_receipt] callback from user=73346752, order_id=331
[receive_receipt] triggered for user=73346752 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13913
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6955735795, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6955735795, order_id=332
[receive_receipt] triggered for user=6955735795 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities']
[receive_receipt] successfully removed reply_markup from invoice msg 13960
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=112327251, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=112327251, order_id=333
[receive_receipt] triggered for user=112327251 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 13991
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1071465357, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1071465357, order_id=334
[receive_receipt] triggered for user=1071465357 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities']
[receive_receipt] successfully removed reply_markup from invoice msg 14024
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7464138044, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7464138044, order_id=335
[cancel_upload_receipt] user=7464138044 cancel upload
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6046277153, plan_id=30
🔎 [is_plan_full] plan 30 → False
🔎 [is_plan_full] plan 30 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=139020576, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=139020576, order_id=337
[receive_receipt] triggered for user=139020576 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14055
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=89911631, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7464138044, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7464138044, order_id=338
[receive_receipt] triggered for user=7464138044 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14086
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=7086327257, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[prompt_receipt] callback from user=89911631, order_id=339
[receive_receipt] triggered for user=89911631 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14104
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=7481870532, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[prompt_receipt] callback from user=7481870532, order_id=341
[receive_receipt] triggered for user=7481870532 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14130
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=7086327257, order_id=340
[receive_receipt] triggered for user=7086327257 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14105
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=90056386, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=90056386, order_id=342
[receive_receipt] triggered for user=90056386 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14175
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=82389022, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
[prompt_receipt] callback from user=82389022, order_id=343
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=250764581, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[receive_receipt] triggered for user=82389022 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14208
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=250764581, order_id=344
[receive_receipt] triggered for user=250764581 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14224
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=608364815, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=608364815, order_id=345
[receive_receipt] triggered for user=608364815 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14245
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7313471274, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7313471274, order_id=346
[receive_receipt] triggered for user=7313471274 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14295
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=593883061, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8617044385, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند کرون‌جاب‌ها و پاک‌سازی دیتابیس فعال شد.
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8020960301, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=304493243, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 30 جزو [1, 5, 10, 15, 20, 25] نبود).
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=30
[prompt_receipt] callback from user=304493243, order_id=354
[receive_receipt] triggered for user=304493243 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14448
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=8020960301, order_id=353
[receive_receipt] triggered for user=8020960301 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14450
[receive_receipt] done, state cleared after receipt submission
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-22 03:30:03.740161
✅ CRON Done → sent=16, failed=0
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5812472924, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[prompt_receipt] callback from user=5812472924, order_id=355
[receive_receipt] triggered for user=5812472924 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14512
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8663719701, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 31 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=95953345, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 31 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=95953345, order_id=357
[receive_receipt] triggered for user=95953345 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14538
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=220 page=1
[INFO] edited message with user list
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5978745857, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 31 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5978745857, order_id=358
[receive_receipt] triggered for user=5978745857 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14571
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6658318545, plan_id=22
🔎 [is_plan_full] plan 22 → False
🔎 [is_plan_full] plan 22 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=221 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7464138044, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 31 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=2035362761, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-127, started daemon 139727147620096)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
/opt/alt/python311/lib64/python3.11/weakref.py:369: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-127, started daemon 139727147620096)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
  def remove(k, selfref=ref(self)):
🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند کرون‌جاب‌ها و پاک‌سازی دیتابیس فعال شد.
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6046277153, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 31 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6046277153, order_id=365
[receive_receipt] triggered for user=6046277153 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14703
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=223 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=93372311, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 31 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=93372311, order_id=366
[receive_receipt] triggered for user=93372311 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14735
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=224 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5340395103, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=31
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 31 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5340395103, order_id=367
[receive_receipt] triggered for user=5340395103 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14783
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=225 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-23 03:30:00.027608
✅ CRON Done → sent=17, failed=0
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=73346752, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[prompt_receipt] callback from user=73346752, order_id=368
[receive_receipt] triggered for user=73346752 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14847
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=105096176, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=105096176, order_id=369
[receive_receipt] triggered for user=105096176 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14856
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=67750059, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=67750059, order_id=370
[receive_receipt] triggered for user=67750059 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 14900
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=104544781, plan_id=1
🔎 [is_plan_full] plan 1 → FalseERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-535, started daemon 139727844300544)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/pydantic/_internal/_core_utils.py:210: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-535, started daemon 139727844300544)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
  schema = self._schema_type_to_method[schema['type']](schema.copy(), f)
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-539, started daemon 139727852693248)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-539, started daemon 139727852693248)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-543, started daemon 139727877871360)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-543, started daemon 139727877871360)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-811, started daemon 139727861085952)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-811, started daemon 139727861085952)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=104544781, order_id=371
[receive_receipt] triggered for user=104544781 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14919
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=2099081968, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=2099081968, order_id=372
[receive_receipt] triggered for user=2099081968 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14940
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5791005776, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=5791005776, order_id=373
[receive_receipt] triggered for user=5791005776 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14960
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=105096176, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=105096176, order_id=374
[receive_receipt] triggered for user=105096176 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 14981
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=7412028434, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1001667224, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1001667224, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=1001667224, order_id=376
[receive_receipt] triggered for user=1001667224 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15010
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1108887565, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1670723268, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=7412028434, order_id=375
[receive_receipt] triggered for user=7412028434 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 15005
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5649862187, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8305897150, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=1
[discount-check] ⛔️ بدون تخفیف (روز 1 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=8305897150, order_id=380
[receive_receipt] triggered for user=8305897150 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15068
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=8305897150, order_id=380
[receive_receipt] triggered for user=8305897150 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15075
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=233 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=233 page=1
[INFO] edited message with user list
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-24 03:30:00.113715
✅ CRON Done → sent=17, failed=0
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5000942347, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=2
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 2 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5000942347, plan_id=1
🔎 [is_plan_full] plan 1 → FalseERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-995, started daemon 139727164405504)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-995, started daemon 139727164405504)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=2
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 2 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5000942347, order_id=382
[receive_receipt] triggered for user=5000942347 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15134
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=234 page=1
[INFO] edited message with user list
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8305897150, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=2
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 2 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=8305897150, order_id=383
[receive_receipt] triggered for user=8305897150 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15185
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=235 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=128008539, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=2
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 2 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6857411879, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=2
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 2 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=128008539, order_id=384
[prompt_receipt] callback from user=6857411879, order_id=385
[receive_receipt] triggered for user=6857411879 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15220
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=128008539 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15211
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=237 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7497359389, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=2
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 2 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7497359389, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=2
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 2 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=2
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 2 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7815086396, order_id=388
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15281
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=238 page=1
[INFO] edited message with user list
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 prompt_terms: user=6496584416, plan_id=52
🔎 [is_plan_full] plan 52 → False
🔎 [is_plan_full] plan 52 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=2
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 prompt_terms: user=2096225759, plan_id=44
🔎 [is_plan_full] plan 44 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 Category selected: 1Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: bot was blocked by the user

🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-25 03:30:00.024714
[ULTRA-NOTIF-ERR] order=84 err=Telegram server says - Forbidden: bot was blocked by the user
✅ CRON Done → sent=17, failed=1
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 prompt_terms: user=2096225759, plan_id=44
🔎 [is_plan_full] plan 44 → False
🔎 [is_plan_full] plan 44 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
[prompt_receipt] callback from user=2096225759, order_id=389
[receive_receipt] triggered for user=2096225759 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15486
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=632535778, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 3 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=632535778, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
[prompt_receipt] callback from user=632535778, order_id=391
[prompt_receipt] callback from user=632535778, order_id=391
[receive_receipt] triggered for user=632535778 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 15515
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1652792976, plan_id=23
🔎 [is_plan_full] plan 23 → False
🔎 [is_plan_full] plan 23 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1652792976, plan_id=23
🔎 [is_plan_full] plan 23 → False
🔎 [is_plan_full] plan 23 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=2096225759, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 prompt_terms: user=283435180, plan_id=44
🔎 [is_plan_full] plan 44 → False
👉 prompt_terms: user=86303305, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
[prompt_receipt] callback from user=86303305, order_id=395
[receive_receipt] triggered for user=86303305 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 15601
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=629458146, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 3 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=629458146, order_id=396
[receive_receipt] triggered for user=629458146 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15617
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=397232597, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
[prompt_receipt] callback from user=397232597, order_id=397
[receive_receipt] triggered for user=397232597 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 15664
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6661277888, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: bot was blocked by the user
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2068, started daemon 139726627534592)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
/opt/alt/python311/lib64/python3.11/enum.py:714: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2068, started daemon 139726627534592)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
  return cls.__new__(cls, value)
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2083, started daemon 139727129786112)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2083, started daemon 139727129786112)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

[prompt_receipt] callback from user=6661277888, order_id=398
[receive_receipt] triggered for user=6661277888 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15685
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1994672870, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 3 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1994672870, order_id=399
[receive_receipt] triggered for user=1994672870 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15706
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 3 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7815086396, order_id=400
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15715
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=722652779, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 3 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=722652779, order_id=401
[prompt_receipt] callback from user=722652779, order_id=401
[prompt_receipt] callback from user=722652779, order_id=401
[receive_receipt] triggered for user=722652779 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15742
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=8745254215, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
👉 prompt_terms: user=8745254215, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=3
[prompt_receipt] callback from user=8745254215, order_id=403
[receive_receipt] triggered for user=8745254215 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 15779
[receive_receipt] done, state cleared after receipt submission
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-26 03:30:01.107156
[ULTRA-NOTIF-ERR] order=84 err=Telegram server says - Forbidden: bot was blocked by the user
✅ CRON Done → sent=26, failed=1
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6511380757, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
👉 prompt_terms: user=6155501292, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[prompt_receipt] callback from user=6155501292, order_id=404
[receive_receipt] triggered for user=6155501292 content_types=['message_id', 'date', 'chat', 'from_user', 'photo', 'caption']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 15838
[receive_receipt] done, state cleared after receipt submission
[cancel_upload_receipt] user=73346752 cancel upload
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=73346752, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[prompt_receipt] callback from user=73346752, order_id=405
[receive_receipt] triggered for user=73346752 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 15857
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=6899031914, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[prompt_receipt] callback from user=6899031914, order_id=406
[receive_receipt] triggered for user=6899031914 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 15885
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=245 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=245 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users:2 from=1028775319
[INFO] fetched orders_count=10 total=245 page=2
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=245 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1108887565, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 4 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=7226366692, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[prompt_receipt] callback from user=7226366692, order_id=408
[receive_receipt] triggered for user=7226366692 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15935
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6843898472, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 4 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6843898472, order_id=409
[receive_receipt] triggered for user=6843898472 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 15972
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=247 page=1
[INFO] edited message with user list
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6579982492, plan_id=29
🔎 [is_plan_full] plan 29 → False
🔎 [is_plan_full] plan 29 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[prompt_receipt] callback from user=6579982492, order_id=410
[receive_receipt] triggered for user=6579982492 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16006
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5812472924, plan_id=36
🔎 [is_plan_full] plan 36 → False
🔎 [is_plan_full] plan 36 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[prompt_receipt] callback from user=5812472924, order_id=411
[receive_receipt] triggered for user=5812472924 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16029
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=75978856, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 4 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=75978856, order_id=412
[receive_receipt] triggered for user=75978856 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16060
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=250 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=534964583, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 4 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2899, started daemon 139727156012800)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2899, started daemon 139727156012800)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: bot was blocked by the user
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: user is deactivated

👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=487624992, plan_id=23
🔎 [is_plan_full] plan 23 → False
🔎 [is_plan_full] plan 23 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[prompt_receipt] callback from user=487624992, order_id=414
[receive_receipt] triggered for user=487624992 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16147
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=446265127, plan_id=23
🔎 [is_plan_full] plan 23 → False
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=446265127, plan_id=23
🔎 [is_plan_full] plan 23 → False
🔎 [is_plan_full] plan 23 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[prompt_receipt] callback from user=446265127, order_id=415
[receive_receipt] triggered for user=446265127 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16160
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=7769658040, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 4 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5530409774, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 4 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5530409774, order_id=417
[receive_receipt] triggered for user=5530409774 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16201
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=8745254215, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=4
[prompt_receipt] callback from user=8745254215, order_id=418
[receive_receipt] triggered for user=8745254215 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 16218
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=253 page=1
[INFO] edited message with user list
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-27 03:30:01.093854
[ULTRA-NOTIF-ERR] order=84 err=Telegram server says - Forbidden: bot was blocked by the user
[ULTRA-NOTIF-ERR] order=119 err=Telegram server says - Forbidden: user is deactivated
✅ CRON Done → sent=31, failed=2
👉 prompt_terms: user=1292913600, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[prompt_receipt] callback from user=1292913600, order_id=419
[receive_receipt] triggered for user=1292913600 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 16285
[receive_receipt] done, state cleared after receipt submission
🧹 پاک‌سازی خودکار: تعداد 11 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=242 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7757871435, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=7757871435, order_id=420
[receive_receipt] triggered for user=7757871435 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16324
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6167131192, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-3249, started daemon 139726619141888)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-3249, started daemon 139726619141888)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=6167131192, order_id=421
[receive_receipt] triggered for user=6167131192 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16343
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=382831540, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[prompt_receipt] callback from user=382831540, order_id=422
[receive_receipt] triggered for user=382831540 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 16359
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=244 page=1
[INFO] edited message with user list
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 6
🔎 [is_category_full] category 6 → 9 plans available
🔍 is_category_full(6) = False
✅ Plans found for category 6: 9
✅ Keyboard buttons generated: 10
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6167131192, plan_id=37
🔎 [is_plan_full] plan 37 → False
🔎 [is_plan_full] plan 37 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[prompt_receipt] callback from user=6167131192, order_id=423
[receive_receipt] triggered for user=6167131192 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16400
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=96014652, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
👉 prompt_terms: user=96014652, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[prompt_receipt] callback from user=96014652, order_id=425
[receive_receipt] triggered for user=96014652 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 16427
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=245 page=1
[INFO] edited message with user list
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=922685775, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[prompt_receipt] callback from user=922685775, order_id=426
[receive_receipt] triggered for user=922685775 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16456
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=769378216, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=769378216, order_id=427
[receive_receipt] triggered for user=769378216 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16481
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1050316900, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=1050316900, order_id=428
[receive_receipt] triggered for user=1050316900 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 16525
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7380517705, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=7380517705, order_id=429
[receive_receipt] triggered for user=7380517705 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16546
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1151776790, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=86589572, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=86589572, order_id=431
[receive_receipt] triggered for user=86589572 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-3622, started daemon 139726585571072)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
<string>:28: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-3622, started daemon 139726585571072)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: bot was blocked by the user
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: user is deactivated

[receive_receipt] successfully removed reply_markup from invoice msg 16564
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
[prompt_receipt] callback from user=7769658040, order_id=416
[receive_receipt] triggered for user=7769658040 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16190
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1244769334, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=1244769334, order_id=432
[receive_receipt] triggered for user=1244769334 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16631
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8815401669, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8815401669, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=8815401669, order_id=433
[receive_receipt] triggered for user=8815401669 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 16652
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6988964802, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=6988964802, order_id=434
[receive_receipt] triggered for user=6988964802 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16670
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5533112073, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 prompt_terms: user=5533112073, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=5
[discount-check] ⛔️ بدون تخفیف (روز 5 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=5533112073, order_id=435
[receive_receipt] triggered for user=5533112073 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16702
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-28 03:30:00.014163
[ULTRA-NOTIF-ERR] order=84 err=Telegram server says - Forbidden: bot was blocked by the user
[ULTRA-NOTIF-ERR] order=119 err=Telegram server says - Forbidden: user is deactivated
✅ CRON Done → sent=37, failed=2
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1144886781, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1144886781, order_id=436
[prompt_receipt] callback from user=1144886781, order_id=436
[receive_receipt] triggered for user=1144886781 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16788
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=255 page=1
[INFO] edited message with user list
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7412028434, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7412028434, order_id=437
[receive_receipt] triggered for user=7412028434 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16814
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=256 page=1
[INFO] edited message with user list
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=2090174934, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
[prompt_receipt] callback from user=2090174934, order_id=438
[receive_receipt] triggered for user=2090174934 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16856
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=94494883, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=86303305, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=848503163, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=86303305, order_id=440
[receive_receipt] triggered for user=86303305 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 16893
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=94494883, order_id=439
[receive_receipt] triggered for user=94494883 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 16882
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=258 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6566145851, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=7313471274, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7313471274, order_id=443
[receive_receipt] triggered for user=7313471274 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16941
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=377498903, plan_id=27
🔎 [is_plan_full] plan 27 → False
🔎 [is_plan_full] plan 27 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[prompt_receipt] callback from user=377498903, order_id=444
[receive_receipt] triggered for user=377498903 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16956
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=6566145851, order_id=442
[receive_receipt] triggered for user=6566145851 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 16963
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=260 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=260 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=261 page=1
[INFO] edited message with user list
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=7885366377, plan_id=28
🔎 [is_plan_full] plan 28 → False
👉 prompt_terms: user=7615648396, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8296863370, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 prompt_terms: user=377498903, plan_id=27
🔎 [is_plan_full] plan 27 → False
🔎 [is_plan_full] plan 27 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans availableTraceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: bot was blocked by the user
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: user is deactivated
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-4751, started daemon 139726602356480)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-4751, started daemon 139726602356480)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=93024350, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=93024350, order_id=449
[receive_receipt] triggered for user=93024350 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17051
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7464138044, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=199523008, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=6
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 6 جزو [1, 5, 10, 15, 20, 25] نبود).
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-29 03:30:01.119772
[ULTRA-NOTIF-ERR] order=84 err=Telegram server says - Forbidden: bot was blocked by the user
[ULTRA-NOTIF-ERR] order=119 err=Telegram server says - Forbidden: user is deactivated
✅ CRON Done → sent=40, failed=2
👉 prompt_terms: user=573947456, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[prompt_receipt] callback from user=573947456, order_id=452
[receive_receipt] triggered for user=573947456 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 17138
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=261 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=261 page=1
[INFO] edited message with user list
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=199523008, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=199523008, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=199523008, order_id=454
[receive_receipt] triggered for user=199523008 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17189
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5495201244, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5495201244, order_id=455
[receive_receipt] triggered for user=5495201244 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17214
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=7771940159, plan_id=21
🔎 [is_plan_full] plan 21 → False
🔎 [is_plan_full] plan 21 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[prompt_receipt] callback from user=7771940159, order_id=456
[receive_receipt] triggered for user=7771940159 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17233
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7756764509, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=7756764509, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
   ⏳ Deleted old receipt: 6496584416_1_20260629_114051.bin
   ⏳ Deleted old receipt: 6496584416_1_20260629_114051.json
   ⏳ Deleted old receipt: 6496584416_2_20260629_114409.json
   ⏳ Deleted old receipt: 6496584416_2_20260629_114409.bin
✅ Cleanup finished. 4 file(s) removed.

👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5061, started daemon 139727138178816)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5061, started daemon 139727138178816)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5171, started daemon 139726577178368)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5171, started daemon 139726577178368)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8296863370, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=8296863370, order_id=458
[receive_receipt] triggered for user=8296863370 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17278
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=263 page=1
[INFO] edited message with user list
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=8496953155, plan_id=20
🔎 [is_plan_full] plan 20 → False
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=8496953155, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[prompt_receipt] callback from user=8496953155, order_id=459
[receive_receipt] triggered for user=8496953155 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17321
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=747989741, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=747989741, order_id=460
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
[receive_receipt] triggered for user=747989741 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17332
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=751378627, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7141069669, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=494756532, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[prompt_receipt] callback from user=494756532, order_id=463
[receive_receipt] triggered for user=494756532 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 17404
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans availableTraceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: user is deactivated

🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=128709739, plan_id=25
🔎 [is_plan_full] plan 25 → False
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=128709739, plan_id=22
🔎 [is_plan_full] plan 22 → False
🔎 [is_plan_full] plan 22 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[prompt_receipt] callback from user=128709739, order_id=464
[receive_receipt] triggered for user=128709739 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17423
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=265 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=88992563, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=88992563, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=7
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 7 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=88992563, order_id=465
[receive_receipt] triggered for user=88992563 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17461
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-30 03:30:00.111123
[ULTRA-NOTIF-ERR] order=119 err=Telegram server says - Forbidden: user is deactivated
✅ CRON Done → sent=46, failed=1
👉 prompt_terms: user=1346587302, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[prompt_receipt] callback from user=1346587302, order_id=466
[receive_receipt] triggered for user=1346587302 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 17536
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6658318545, plan_id=22
🔎 [is_plan_full] plan 22 → False
🔎 [is_plan_full] plan 22 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[prompt_receipt] callback from user=6658318545, order_id=467
[receive_receipt] triggered for user=6658318545 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17544
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7815086396, order_id=468
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17569
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=266 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=268 page=1
[INFO] edited message with user list
👉 prompt_terms: user=245041903, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[prompt_receipt] callback from user=245041903, order_id=469
[receive_receipt] triggered for user=245041903 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 17634
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=268 page=1
[INFO] edited message with user list
👉 prompt_terms: user=63691502, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[prompt_receipt] callback from user=63691502, order_id=470
[receive_receipt] triggered for user=63691502 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 17662
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=268 page=1
[INFO] edited message with user list
👉 prompt_terms: user=730858789, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[prompt_receipt] callback from user=730858789, order_id=471
[receive_receipt] triggered for user=730858789 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5995, started daemon 139726208096000)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-5995, started daemon 139726208096000)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

[receive_receipt] successfully removed reply_markup from invoice msg 17683
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
[prompt_receipt] callback from user=7815086396, order_id=472
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17713
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] state missing order_id or plan_id -> ignoring
👉 prompt_terms: user=6374039130, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6374039130, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=268 page=1
[INFO] edited message with user list
[prompt_receipt] callback from user=6374039130, order_id=473
[receive_receipt] triggered for user=6374039130 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17720
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=269 page=1
[INFO] edited message with user list
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=72670234, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
[prompt_receipt] callback from user=72670234, order_id=474
[receive_receipt] triggered for user=72670234 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 17774
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
🧹 پاک‌سازی خودکار: تعداد 3 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=269 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5766257315, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[prompt_receipt] callback from user=5766257315, order_id=475
[receive_receipt] triggered for user=5766257315 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 17843
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6549248405, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6549248405, order_id=476
[receive_receipt] triggered for user=6549248405 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 17856
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=269 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=270 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=270 page=1
[INFO] edited message with user list🚀 Starting bot...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

🟢 زمان‌بند کرون‌جاب‌ها و پاک‌سازی دیتابیس فعال شد.
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
✅ Cleanup finished. No files removed.

ℹ️ هیچ وبهوکی تنظیم نشده است.
🤖 Polling mode فعال شد...
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=95953345, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=95953345, order_id=483
[receive_receipt] triggered for user=95953345 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18024
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=275 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=137124696, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=137124696, order_id=484
[receive_receipt] triggered for user=137124696 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18054
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7313471274, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7313471274, order_id=485
[receive_receipt] triggered for user=7313471274 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18061
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=276 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=277 page=1
[INFO] edited message with user list
👉 prompt_terms: user=6164514956, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[prompt_receipt] callback from user=6164514956, order_id=486
[receive_receipt] triggered for user=6164514956 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 18099
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=83365592, plan_id=45
🔎 [is_plan_full] plan 45 → False
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6610870274, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=6610870274, order_id=487
[receive_receipt] triggered for user=6610870274 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18133
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=277 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1246905146, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
🧹 پاک‌سازی خودکار: تعداد 2 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 prompt_terms: user=5024329427, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=8
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 8 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5024329427, order_id=489
[receive_receipt] triggered for user=5024329427 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18167
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: user is deactivated

[INFO] fetched orders_count=10 total=276 page=1
[INFO] edited message with user list
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
🧹 پاک‌سازی خودکار: تعداد 3 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-08-31 03:30:01.092040
[ULTRA-NOTIF-ERR] order=119 err=Telegram server says - Forbidden: user is deactivated
✅ CRON Done → sent=47, failed=1
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8617044385, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=8617044385, order_id=490
[receive_receipt] triggered for user=8617044385 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18269
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=433664001, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[prompt_receipt] callback from user=433664001, order_id=491
[receive_receipt] triggered for user=433664001 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 18295
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=6673103024, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[prompt_receipt] callback from user=6673103024, order_id=492
[receive_receipt] triggered for user=6673103024 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 18301
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=274 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=274 page=1
[INFO] edited message with user list
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6730155330, plan_id=28
🔎 [is_plan_full] plan 28 → False
🔎 [is_plan_full] plan 28 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[cancel_upload_receipt] user=1246905146 cancel upload
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1246905146, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1246905146, order_id=494
[receive_receipt] triggered for user=1246905146 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18365
[receive_receipt] done, state cleared after receipt submission
🧹 پاک‌سازی خودکار: تعداد 2 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=75032199, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-803, started daemon 139644249290496)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-803, started daemon 139644249290496)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-807, started daemon 139644283909888)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-807, started daemon 139644283909888)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-811, started daemon 139644275517184)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-811, started daemon 139644275517184)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-815, started daemon 139644240897792)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-815, started daemon 139644240897792)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-819, started daemon 139644257683200)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-819, started daemon 139644257683200)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-823, started daemon 139644232505088)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-823, started daemon 139644232505088)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

[prompt_receipt] callback from user=75032199, order_id=495
[receive_receipt] triggered for user=75032199 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18373
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6511380757, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=250764581, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=250764581, order_id=497
[receive_receipt] triggered for user=250764581 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18438
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=112003169, plan_id=24
🔎 [is_plan_full] plan 24 → False
🔎 [is_plan_full] plan 24 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[prompt_receipt] callback from user=112003169, order_id=498
[receive_receipt] triggered for user=112003169 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 18461
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7756764509, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1670723268, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=9
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 9 جزو [1, 5, 10, 15, 20, 25] نبود).
🧹 پاک‌سازی خودکار: تعداد 2 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-09-01 03:30:01.092393
✅ CRON Done → sent=48, failed=0
🧹 پاک‌سازی خودکار: تعداد 9 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 prompt_terms: user=7615648396, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[prompt_receipt] callback from user=7615648396, order_id=502
[receive_receipt] triggered for user=7615648396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 18576
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=263 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7596082124, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=7596082124, order_id=503
[receive_receipt] triggered for user=7596082124 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18616
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=264 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7402348111, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=7402348111, order_id=504
[receive_receipt] triggered for user=7402348111 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18642
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7402348111, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=265 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=265 page=1
[INFO] edited message with user list
👉 prompt_terms: user=8998470944, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[prompt_receipt] callback from user=8998470944, order_id=505
[receive_receipt] triggered for user=8998470944 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 18669
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=264 page=1
[INFO] edited message with user list
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=264 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=384429318, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6127668233, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=6127668233, order_id=507
[prompt_receipt] callback from user=6127668233, order_id=507
[receive_receipt] triggered for user=6127668233 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18712
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=414720915, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[prompt_receipt] callback from user=414720915, order_id=508
[receive_receipt] triggered for user=414720915 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 18738
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=265 page=1
[INFO] edited message with user list
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7412028434, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=7412028434, order_id=509
[receive_receipt] triggered for user=7412028434 content_types=['message_id', 'date', 'chat', 'from_user', 'photo', 'caption', 'caption_entities']
[receive_receipt] successfully removed reply_markup from invoice msg 18772
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=266 page=1
[INFO] edited message with user list
🧹 پاک‌سازی خودکار: تعداد 2 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=2093341911, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=2093341911, order_id=510
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=2093341911, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=2093341911, order_id=511
[receive_receipt] triggered for user=2093341911 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18821
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5812472924, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[prompt_receipt] callback from user=5812472924, order_id=512
[receive_receipt] triggered for user=5812472924 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18834
[receive_receipt] done, state cleared after receipt submission
[INFO] admin_list_active_users called; data=admin:list_users from=1028775319
[INFO] fetched orders_count=10 total=263 page=1
[INFO] edited message with user list
[prompt_receipt] callback from user=2093341911, order_id=511
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=86434668, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=86434668, order_id=513
[receive_receipt] triggered for user=86434668 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18863
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6133635492, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5351760138, plan_id=2
🔎 [is_plan_full] plan 2 → FalseTraceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: bot was blocked by the user
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2218, started daemon 139643605477120)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2218, started daemon 139643605477120)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2222, started daemon 139643597084416)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2222, started daemon 139643597084416)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2226, started daemon 139643580299008)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-2226, started daemon 139643580299008)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[discount-check] ⛔️ بدون تخفیف (روز 10 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=5351760138, order_id=515
[receive_receipt] triggered for user=5351760138 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18891
[receive_receipt] done, state cleared after receipt submission
[receive_receipt] triggered for user=2093341911 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 18832
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=7052504400, plan_id=1
🔎 [is_plan_full] plan 1 → False
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 prompt_terms: user=6952599911, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=10
[prompt_receipt] callback from user=6952599911, order_id=516
[prompt_receipt] callback from user=6952599911, order_id=516
[receive_receipt] triggered for user=6952599911 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 18922
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-09-02 03:30:01.093445
[ULTRA-NOTIF-ERR] order=155 err=Telegram server says - Forbidden: bot was blocked by the user
✅ CRON Done → sent=48, failed=1
👉 prompt_terms: user=607306605, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[prompt_receipt] callback from user=607306605, order_id=517
[receive_receipt] triggered for user=607306605 content_types=['message_id', 'date', 'chat', 'from_user', 'forward_origin', 'photo', 'caption', 'caption_entities', 'forward_date', 'forward_from']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 19005
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=427100718, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 11 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=427100718, order_id=518
[receive_receipt] triggered for user=427100718 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19014
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=72928460, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[prompt_receipt] callback from user=72928460, order_id=519
[receive_receipt] triggered for user=72928460 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 19042
[receive_receipt] done, state cleared after receipt submission
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=104544781, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 11 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=104544781, order_id=520
[receive_receipt] triggered for user=104544781 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19074
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5727557324, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 11 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5727557324, order_id=521
[receive_receipt] triggered for user=5727557324 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19095
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=73346752, plan_id=23
🔎 [is_plan_full] plan 23 → False
🔎 [is_plan_full] plan 23 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
[prompt_receipt] callback from user=73346752, order_id=522
[receive_receipt] triggered for user=73346752 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 19132
[receive_receipt] done, state cleared after receipt submission
[update_link] URL قبلی: https://panpro.1tools.ir:8000/sub/djMsMzQ1NiwxNzg4MzgyNjk5.piRyZ_trFtY9PK91rEOTC-03mgk4iQXkHEi9Ae1NA8o → جدید: https://panpro.1tools.ir:8000/sub/djMsMjUyMiwxNzg4MzgyOTg2.-dVD5gz9IhXGhalQNXKGXy5zPhn0VBA7zpMAXkYu7Po
[update_link] تعداد سفارش‌هایی که آپدیت شدند: 0
👉 prompt_terms: user=80072173, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=11
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-09-03 03:30:01.087653
[ULTRA-NOTIF-ERR] order=155 err=Telegram server says - Forbidden: bot was blocked by the userTraceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: bot was blocked by the user

✅ CRON Done → sent=45, failed=1
🧹 پاک‌سازی خودکار: تعداد 4 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 prompt_terms: user=291237891, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
🧹 پاک‌سازی خودکار: تعداد 2 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 prompt_terms: user=1412611471, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7825358341, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7825358341, order_id=526
[receive_receipt] triggered for user=7825358341 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19224
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=556721330, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=556721330, order_id=527
[receive_receipt] triggered for user=556721330 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19248
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=137124696, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=137124696, order_id=528
[receive_receipt] triggered for user=137124696 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19266
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=107583311, plan_id=2
🔎 [is_plan_full] plan 2 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=107583311, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=107583311, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=107583311, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=107583311, order_id=531
[receive_receipt] triggered for user=107583311 content_types=['message_id', 'date', 'chat', 'from_user', 'text']
[receive_receipt] successfully removed reply_markup from invoice msg 19289
[receive_receipt] done, state cleared after receipt submission
🧹 پاک‌سازی خودکار: تعداد 2 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 prompt_terms: user=265872204, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[prompt_receipt] callback from user=265872204, order_id=532
[receive_receipt] triggered for user=265872204 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 19307
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=291237891, order_id=524
[receive_receipt] triggered for user=291237891 content_types=['message_id', 'date', 'chat', 'from_user', 'forward_origin', 'photo', 'forward_date', 'forward_from']
[receive_receipt] successfully removed reply_markup from invoice msg 19213
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5812472924, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[prompt_receipt] callback from user=5812472924, order_id=533
[receive_receipt] triggered for user=5812472924 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19339
[receive_receipt] done, state cleared after receipt submission
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=105695433, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=12
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 12 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=105695433, order_id=534
[receive_receipt] triggered for user=105695433 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19356
[receive_receipt] done, state cleared after receipt submissionTraceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: bot was blocked by the user

👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=407458767, plan_id=2
🔎 [is_plan_full] plan 2 → False
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-09-04 03:30:01.060755
[ULTRA-NOTIF-ERR] order=155 err=Telegram server says - Forbidden: bot was blocked by the user
✅ CRON Done → sent=39, failed=1
👉 prompt_terms: user=137819615, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[prompt_receipt] callback from user=137819615, order_id=535
[receive_receipt] triggered for user=137819615 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 19444
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1071465357, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1071465357, order_id=536
[receive_receipt] triggered for user=1071465357 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities']
[receive_receipt] successfully removed reply_markup from invoice msg 19466
[receive_receipt] done, state cleared after receipt submission
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=407458767, order_id=537
[receive_receipt] triggered for user=407458767 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19482
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=80072173, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6496584416, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=80072173, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=80072173, order_id=540
[receive_receipt] triggered for user=80072173 content_types=['message_id', 'date', 'chat', 'from_user', 'forward_origin', 'photo', 'forward_date', 'forward_from']
[receive_receipt] successfully removed reply_markup from invoice msg 19514
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=179793849, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=179793849, order_id=541
[receive_receipt] triggered for user=179793849 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19537
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=95116491, plan_id=23
🔎 [is_plan_full] plan 23 → False
🔎 [is_plan_full] plan 23 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[prompt_receipt] callback from user=95116491, order_id=542
[receive_receipt] triggered for user=95116491 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19548
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=8569001765, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[prompt_receipt] callback from user=8569001765, order_id=543
[receive_receipt] triggered for user=8569001765 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 19554
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=73730779, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → FalseERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-3606, started daemon 139643613869824)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-3606, started daemon 139643613869824)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.

[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1108887565, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1108887565, order_id=545
[receive_receipt] triggered for user=1108887565 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19601
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8305897150, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8305897150, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=8305897150, order_id=546
[receive_receipt] triggered for user=8305897150 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19627
[receive_receipt] done, state cleared after receipt submission
[prompt_receipt] callback from user=73730779, order_id=544
[receive_receipt] triggered for user=73730779 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 19594
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1122369216, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6690143951, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=534964583, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=105695433, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=105695433, order_id=550
[receive_receipt] triggered for user=105695433 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19670
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1122369216, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 prompt_terms: user=565019791, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[prompt_receipt] callback from user=565019791, order_id=552
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=353238767, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1122369216, plan_id=2
🔎 [is_plan_full] plan 2 → False
[prompt_receipt] callback from user=353238767, order_id=553
[receive_receipt] triggered for user=353238767 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19716
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=7815086396, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 13 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=7815086396, order_id=554
[receive_receipt] triggered for user=7815086396 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19725
[receive_receipt] done, state cleared after receipt submission
[cancel_upload_receipt] user=565019791 cancel upload
👉 prompt_terms: user=565019791, plan_id=2Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/services/notification/sender.py", line 149, in send_expiration_notifications
    await bot.send_message(
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 2823, in send_message
    return await self(call, request_timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 128, in check_response
    raise TelegramForbiddenError(method=method, message=description)
aiogram.exceptions.TelegramForbiddenError: Telegram server says - Forbidden: bot was blocked by the user

🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=13
[prompt_receipt] callback from user=565019791, order_id=555
[receive_receipt] triggered for user=565019791 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 19733
[receive_receipt] done, state cleared after receipt submission
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-09-05 03:30:01.119734
[ULTRA-NOTIF-ERR] order=155 err=Telegram server says - Forbidden: bot was blocked by the user
✅ CRON Done → sent=28, failed=1
🧹 پاک‌سازی خودکار: تعداد 12 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 prompt_terms: user=365438571, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
👉 prompt_terms: user=76144024, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[prompt_receipt] callback from user=76144024, order_id=557
[receive_receipt] triggered for user=76144024 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 19770
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=84573831, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[prompt_receipt] callback from user=84573831, order_id=558
[receive_receipt] triggered for user=84573831 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 19780
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5024329427, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=5024329427, order_id=559
[receive_receipt] triggered for user=5024329427 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19787
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=127135722, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=127135722, order_id=560
[receive_receipt] triggered for user=127135722 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19868
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1122369216, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1122369216, order_id=561
[receive_receipt] triggered for user=1122369216 content_types=['message_id', 'date', 'chat', 'from_user', 'text', 'entities']
[receive_receipt] successfully removed reply_markup from invoice msg 19885
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1412611471, plan_id=3
🔎 [is_plan_full] plan 3 → False
🔎 [is_plan_full] plan 3 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1412611471, order_id=562
[receive_receipt] triggered for user=1412611471 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 19902
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5749621105, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[prompt_receipt] callback from user=5749621105, order_id=563
[receive_receipt] triggered for user=5749621105 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20098
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=6826433803, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[prompt_receipt] callback from user=6826433803, order_id=564
[prompt_receipt] callback from user=6826433803, order_id=564
[receive_receipt] triggered for user=6826433803 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 20126
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6826433803, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=6826433803, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
👉 prompt_terms: user=755831858, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[prompt_receipt] callback from user=755831858, order_id=565
[receive_receipt] triggered for user=755831858 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 20143
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
🧹 پاک‌سازی خودکار: تعداد 2 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=1674999336, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=1674999336, order_id=566
[receive_receipt] triggered for user=1674999336 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20184
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=6496584416, plan_id=41
🔎 [is_plan_full] plan 41 → False
🔎 [is_plan_full] plan 41 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=467276394, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=489419057, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=489419057, order_id=569
[receive_receipt] triggered for user=489419057 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[prompt_receipt] callback from user=489419057, order_id=569
[receive_receipt] successfully removed reply_markup from invoice msg 20256
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=310979089, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[discount-check] ✅ تخفیف ۱۰٪ اعمال شد (روز 14 جزو [1, 5, 10, 15, 20, 25] نبود).
[prompt_receipt] callback from user=310979089, order_id=570
[receive_receipt] triggered for user=310979089 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20268
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=5849703254, plan_id=2
🔎 [is_plan_full] plan 2 → False
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6799643682, plan_id=30
🔎 [is_plan_full] plan 30 → False
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=6799643682, plan_id=29
🔎 [is_plan_full] plan 29 → False
🔎 [is_plan_full] plan 29 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[prompt_receipt] callback from user=6799643682, order_id=571
[receive_receipt] triggered for user=6799643682 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20308
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=657096454, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
👉 prompt_terms: user=657096454, plan_id=2ERROR:sqlalchemy.pool.impl.NullPool:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-4829, started daemon 139643563513600)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
sys:1: SAWarning: The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-4829, started daemon 139643563513600)>>, which will be dropped, as it cannot be safely terminated.  Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
Traceback (most recent call last):
  File "/home/musighsv/public_html/Music-Bot/bot/handlers/user.py", line 1866, in play_prize_game
    await cb.answer()
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/methods/base.py", line 84, in emit
    return await bot(self)
           ^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/bot.py", line 492, in __call__
    return await self.session(self, method, timeout=request_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 254, in __call__
    return cast(TelegramType, await middleware(bot, method))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/aiohttp.py", line 178, in make_request
    response = self.check_response(
               ^^^^^^^^^^^^^^^^^^^^
  File "/home/musighsv/virtualenv/public_html/Music-Bot/3.11/lib/python3.11/site-packages/aiogram/client/session/base.py", line 120, in check_response
    raise TelegramBadRequest(method=method, message=description)
aiogram.exceptions.TelegramBadRequest: Telegram server says - Bad Request: query is too old and response timeout expired or query ID is invalid

🔎 [is_plan_full] plan 2 → False
👉 prompt_terms: user=657096454, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[prompt_receipt] callback from user=657096454, order_id=573
[receive_receipt] triggered for user=657096454 content_types=['message_id', 'date', 'chat', 'from_user', 'photo', 'caption']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 20350
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=8745254215, plan_id=40
🔎 [is_plan_full] plan 40 → False
🔎 [is_plan_full] plan 40 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=14
[prompt_receipt] callback from user=8745254215, order_id=574
[receive_receipt] triggered for user=8745254215 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20357
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
⏰ [CRON] اجرای خودکار اطلاع‌رسانی تمدید در 2026-09-06 03:30:01.118177
✅ CRON Done → sent=24, failed=0
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 prompt_terms: user=775660082, plan_id=1
🔎 [is_plan_full] plan 1 → False
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=775660082, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=775660082, order_id=575
[receive_receipt] triggered for user=775660082 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20435
[receive_receipt] done, state cleared after receipt submission
👉 prompt_terms: user=170475047, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[prompt_receipt] callback from user=170475047, order_id=576
[receive_receipt] triggered for user=170475047 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] failed to update renew_order_id: Unconsumed column names: is_expired
[receive_receipt] successfully removed reply_markup from invoice msg 20457
[receive_receipt] done, state cleared after receipt submission
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1509314202, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=1509314202, order_id=577
[receive_receipt] triggered for user=1509314202 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20492
[receive_receipt] done, state cleared after receipt submission
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=7052504400, order_id=578
[receive_receipt] triggered for user=7052504400 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20534
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=1385012188, plan_id=40
🔎 [is_plan_full] plan 40 → False
👉 prompt_terms: user=1385012188, plan_id=42
👉 prompt_terms: user=1385012188, plan_id=40
🔎 [is_plan_full] plan 42 → False
🔎 [is_plan_full] plan 40 → False
👉 prompt_terms: user=1385012188, plan_id=39
🔎 [is_plan_full] plan 39 → False
🔎 [is_plan_full] plan 39 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
👉 Category selected: 5
🔎 [is_category_full] category 5 → 8 plans available
🔍 is_category_full(5) = False
✅ Plans found for category 5: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=5812472924, plan_id=20
🔎 [is_plan_full] plan 20 → False
🔎 [is_plan_full] plan 20 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[prompt_receipt] callback from user=5812472924, order_id=580
[receive_receipt] triggered for user=5812472924 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20584
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=2029077121, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=2029077121, order_id=581
[receive_receipt] triggered for user=2029077121 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20595
[receive_receipt] done, state cleared after receipt submission
❌ Error in play_prize_game: Telegram server says - Bad Request: query is too old and response timeout expired or query ID is invalid
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=747989741, plan_id=1
👉 prompt_terms: user=747989741, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
⚠️ prompt_terms: edit_text failed (Telegram server says - Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message), sending new message.
❌ Exception in prompt_terms: Telegram server says - Bad Request: query is too old and response timeout expired or query ID is invalid
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
❌ Exception in terms_accepted: HTTP Client says - Request timeout error
🧹 Running weekly cleanup task...
🧹 Running weekly cleanup task...
   ⏳ Deleted old receipt: 8569001765_4_20260706_140342.jpg
   ⏳ Deleted old receipt: 8569001765_4_20260706_140342.json
   ⏳ Deleted old receipt: 8569001765_4_20260706_140342.bin
✅ Cleanup finished. 3 file(s) removed.

👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=128008539, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=592821074, plan_id=2
🔎 [is_plan_full] plan 2 → False
🔎 [is_plan_full] plan 2 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=592821074, order_id=584
[receive_receipt] triggered for user=592821074 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20662
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
👉 prompt_terms: user=8305897150, plan_id=1
🔎 [is_plan_full] plan 1 → False
🔎 [is_plan_full] plan 1 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[discount-check] ⛔️ بدون تخفیف (روز 15 جزو [1, 5, 10, 15, 20, 25] بود).
[prompt_receipt] callback from user=8305897150, order_id=585
[receive_receipt] triggered for user=8305897150 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20695
[receive_receipt] done, state cleared after receipt submission
🧹 پاک‌سازی خودکار: تعداد 1 اشتراک منقضی‌شده و لینک‌های آن‌ها حذف شدند.
👉 Category selected: 4
🔎 [is_category_full] category 4 → 8 plans available
🔍 is_category_full(4) = False
✅ Plans found for category 4: 8
✅ Keyboard buttons generated: 9
👉 prompt_terms: user=8752344979, plan_id=25
🔎 [is_plan_full] plan 25 → False
🔎 [is_plan_full] plan 25 → False
[discount-check] تاریخ شمسی خرید واقعی:  → روز=15
[prompt_receipt] callback from user=8752344979, order_id=586
[receive_receipt] triggered for user=8752344979 content_types=['message_id', 'date', 'chat', 'from_user', 'photo']
[receive_receipt] successfully removed reply_markup from invoice msg 20742
[receive_receipt] done, state cleared after receipt submission
👉 Category selected: 2
🔎 [is_category_full] category 2 → 8 plans available
🔍 is_category_full(2) = False
✅ Plans found for category 2: 8
✅ Keyboard buttons generated: 9
👉 Category selected: 1
🔎 [is_category_full] category 1 → 3 plans available
🔍 is_category_full(1) = False
✅ Plans found for category 1: 3
✅ Keyboard buttons generated: 4
