Commit Graph

5266 Commits

Author SHA1 Message Date
Egor
22c8f73eac Update traffic limit handling in subscription service
Refactor traffic limit assignment logic for subscriptions.
2025-12-30 18:08:32 +04:00
Egor
d4bc7d0b51 Update subscription_renewal_service.py 2025-12-30 18:08:03 +04:00
Egor
aa3c9231b0 Update subscription_service.py 2025-12-30 18:07:39 +04:00
Egor
bce05d4bc4 Implement traffic limit reset on subscription renewal
Added logic to handle traffic limit reset during subscription renewal based on fixed traffic settings.
2025-12-30 18:05:26 +04:00
Egor
f107109091 Update traffic.py 2025-12-30 18:04:54 +04:00
Egor
826a554d55 Update config.py 2025-12-30 17:56:40 +04:00
Egor
fd5801839c Merge pull request #2225 from BEDOLAGA-DEV/main
w
2025-12-30 17:55:46 +04:00
Egor
abce475ccc Merge pull request #2223 from Gy9vin/main
Отправка чеков со временем
2025-12-30 09:47:45 +04:00
gy9vin
22129ecbec минификс в отладке конкурсов 2025-12-30 02:15:52 +03:00
gy9vin
2a2a3daaae fix(contests): исправление статистики реферальных конкурсов
Основные исправления:
  - Фильтрация событий по дате регистрации реферала (occurred_at)
    в период конкурса (start_at - end_at)
  - Лидерборд теперь показывает правильные числа (было 21, стало 11)
  - Разделение DEPOSIT и SUBSCRIPTION_PAYMENT в статистике:
    - Основная метрика: покупки подписок (SUBSCRIPTION_PAYMENT)
    - Информационно: пополнения баланса (DEPOSIT)

  Новый функционал:
  - Кнопка "🔍 Отладка" для просмотра транзакций конкурса
  - Разбивка сумм по типам в детальной статистике
  - Кнопки "Назад" в синхронизации и отладке
  - Логирование дат фильтрации в синхронизации

  Также исправлено:
  - NaloGO: защита от дублирования чеков в очереди
    (проверка nalogo:created и nalogo:queued в Redis)
2025-12-30 02:08:23 +03:00
gy9vin
ac94d5d708 Merge branch 'main' of https://github.com/Gy9vin/remnawave-bedolaga-telegram-bot 2025-12-30 00:39:50 +03:00
gy9vin
d10ccc4844 refactor(nalogo): улучшение системы чеков NaloGO
Сохранение времени оплаты:
  - Добавлен параметр operation_time в create_receipt()
  - Чеки из очереди создаются с оригинальным временем платежа
  - Парсинг created_at из Redis очереди

  Защита от дублей (3 уровня):
  - Проверка transaction.receipt_uuid перед созданием
  - Redis ключ nalogo:created:{payment_id} с TTL 30 дней
  - Сохранение receipt_uuid в транзакцию после создания

  Бесконечные повторы:
  - Убрано удаление чеков после 10 попыток
  - Чеки остаются в очереди до успешной отправки

  Обработка ошибок:
  - Добавлена обработка 500 и "внутренняя ошибка" как временной недоступности

  Сверка чеков:
  - Заменена API сверка на сверку по логам (logs/current/payments.log)
  - Кнопка "Без чеков" → "Сверка чеков" с прямым показом сверки
  - Исправлена навигация кнопок "Назад"
2025-12-30 00:39:00 +03:00
Mikhail
de733a5f08 Merge branch 'BEDOLAGA-DEV:main' into main 2025-12-29 22:15:48 +03:00
gy9vin
4cab3f5ed4 Отправка чеков со временем 2025-12-29 22:15:07 +03:00
Egor
26b85b16b5 Merge pull request #2220 from BEDOLAGA-DEV/main
w
2025-12-29 10:35:52 +04:00
Egor
ea770c32e8 Merge pull request #2218 from Gy9vin/main
Апдейты
2025-12-28 17:23:04 +03:00
gy9vin
23f8bdfbec feat(restrictions): добавить систему ограничений пользователей
Добавлена возможность ограничивать пользователям:
  - Пополнение баланса (restriction_topup)
  - Покупку/продление подписки (restriction_subscription)

  Изменения:
  - models.py: добавлены поля restriction_topup, restriction_subscription,
    restriction_reason и property has_restrictions
  - universal_migration.py: миграция для новых полей
  - admin/users.py: меню управления ограничениями в карточке пользователя
  - keyboards/admin.py: клавиатура ограничений с toggle-кнопками
  - states.py: состояние editing_user_restriction_reason

  Проверки ограничений добавлены на двух уровнях:
  - start_*_payment: при выборе метода оплаты
  - process_*_payment_amount: при создании платежа

  Затронутые провайдеры: stars, yookassa, mulenpay, wata, pal24,
  cryptobot, heleket, platega, tribute, cloudpayments

  При ограничении пользователь видит причину и кнопку "Обжаловать",
  ведущую на контакт поддержки из настроек.
2025-12-28 13:32:04 +03:00
gy9vin
a362ef9f25 refactor(nalogo): восстановить описание чеков из настроек и использовать локальную библиотеку
- Добавлено восстановление описания чека из настроек при обработке очереди
- Передача telegram_user_id и amount_kopeks через всю цепочку создания чеков
- Переход на локальную исправленную версию библ
2025-12-28 04:58:05 +03:00
gy9vin
1b736b381d refactor(nalogo): упростить настройку чеков и использовать локальное время
- Удалена избыточная настройка NALOGO_RECEIPTS_ENABLED
- Удален эндпоинт /settings/support/nalogo_receipts_enabled
- Удалены методы is_nalogo_receipts_enabled и set_nalogo_receipts_enabled из SupportSettingsService
- Упрощена логика создания чеков
2025-12-27 19:29:04 +03:00
gy9vin
d343a317ee feat(logging): добавить систему ротации логов
- Ежедневная ротация в 00:00 с архивацией в tar.gz
  - Разделение по уровням: info.log, warning.log, error.log
  - Отдельный payments.log для платежных операций
  - Отправка архивов в Telegram-канал бекапов
  - Автоочистка архивов старше 7 дней (настраивается)
  - Переключатель LOG_ROTATION_ENABLED (по умолчанию выключен)
2025-12-27 19:02:28 +03:00
Egor
3fc9e63653 Merge pull request #2208 from Gy9vin/fix
Исправление уязвимостей и багов в конкурсах
2025-12-27 16:20:18 +03:00
Mikhail
9f12462871 Merge branch 'main' into fix 2025-12-27 15:54:07 +03:00
Egor
e293470c14 Merge pull request #2217 from D4nilKO/promo-campaing-trial-fix
Fix campaign subscription logic: use trial instead of paid
2025-12-27 11:17:21 +03:00
Egor
6322e970ef Merge pull request #2216 from BEDOLAGA-DEV/main
w
2025-12-27 10:55:00 +03:00
PEDZEO
8a40d54c03 Merge pull request #2215 from BEDOLAGA-DEV/BACKUP
Add backup management endpoints
2025-12-27 05:18:15 +03:00
PEDZEO
0264c24743 Enhance backup upload validation
- Added checks for safe filename to prevent directory traversal attacks.
- Updated file type validation to use the sanitized filename.
- Implemented path resolution to ensure uploaded files are within the backup directory.
2025-12-27 05:16:08 +03:00
PEDZEO
1aade85fc9 Add backup management endpoints
- Implemented download, restore, upload and delete functionalities for backups.
- Added corresponding request and response schemas for backup operations.
- Enhanced security checks to prevent unauthorized access to backup files.
2025-12-27 04:33:13 +03:00
PEDZEO
a5874a9873 Merge pull request #2214 from BEDOLAGA-DEV/BACKUP
Add support for password-protected backup archives
2025-12-27 04:13:22 +03:00
PEDZEO
6f9dc45e16 Update BackupService to check for temporary zip path instead of password for captioning 2025-12-27 04:11:08 +03:00
PEDZEO
34db5a0d28 Add support for password-protected backup archives
- Updated .env.example to include BACKUP_ARCHIVE_PASSWORD variable.
- Added pyzipper to requirements.txt for ZIP file encryption.
- Modified Settings class in config.py to handle BACKUP_ARCHIVE_PASSWORD.
- Enhanced BackupService to create and send password-protected ZIP archives if a password is provided.
2025-12-27 03:58:48 +03:00
Dxnil
34517427b0 test 2025-12-27 03:05:48 +03:00
gy9vin
cad9abd8bd feat(payments): умная автоактивация подписки после пополнения + округление цен
Добавлена функция умной автоактивации подписки после пополнения баланса:

  - Новая настройка AUTO_ACTIVATE_AFTER_TOPUP_ENABLED в .env
  - Функция auto_activate_subscription_after_topup() в subscription_auto_purchase_service.py:
    - Автоматически продлевает истёкшую подписку с теми же параметрами
    - Создаёт новую подписку с дефолтными параметрами если подписки нет
    - Проверяет достаточность баланса перед активацией
    - Интеграция с RemnaWave API
    - Уведомления пользователю и админам

  - Интеграция во все 9 платёжных провайдеров:
    - Stars, CryptoBot, YooKassa, CloudPayments
    - WATA, Platega, Pal24, MulenPay, Tribute

  - Исправлен handle_activate_button в menu.py:
    - Полная переработка с интеграцией RemnaWave
    - Корректная работа с балансом и транзакциями
    - Использование SubscriptionRenewalService

  Добавлено округление цен при отображении:

  - Новая настройка PRICE_ROUNDING_ENABLED в .env
  - Логика: ≤50 коп → вниз, >50 коп → вверх
  - Применяется везде: пополнения, партнёрки, скидки, промогруппы
2025-12-26 23:38:46 +03:00
gy9vin
bf9728352e feat(subscription): улучшение UX выбора серверов и устройств
- Кнопки устройств теперь в один столбец (вместо 2 колонок)
  - Автоматический предвыбор бесплатных серверов (price_kopeks == 0)
  - Вывод описания сквадов в тексте сообщения над кнопками

  Изменённые файлы:
  - keyboards/inline.py: get_devices_keyboard в 1 столбец
  - handlers/subscription/countries.py: хелперы _get_preselected_free_countries и _build_countries_selection_text
  - handlers/subscription/purchase.py, traffic.py, autopay.py: применение новой логики
2025-12-26 22:15:34 +03:00
gy9vin
58c924b70a fix(campaign,channel): исправлена логика рекламных кампаний и проверки подписки на канал
- Рекламные кампании теперь выдают триальную подписку (is_trial=True),
    а не платную — пользователь становится платным только после оплаты

  - Добавлена настройка CHANNEL_REQUIRED_FOR_ALL для проверки подписки
    на канал для ВСЕХ пользователей (платных и триальных)

  - Добавлен параметр is_trial в create_paid_subscription для гибкости
2025-12-26 21:40:28 +03:00
gy9vin
64ffffdf90 fix(traffic): исправлен баг с бесплатным переключением трафика
При наличии докупленного трафика (например 250 + 10 ГБ = 260 ГБ)
  система округляла текущий пакет до ближайшего (500 ГБ) и позволяла
  бесплатно переключиться на него.

  Исправления:
  - confirm_switch_traffic: используется базовый трафик для расчёта цены
  - get_traffic_switch_keyboard: добавлен параметр base_traffic_gb
  - handle_switch_traffic: показывает информацию о докупленном трафике
  - execute_switch_traffic: сбрасывает purchased_traffic_gb при переключении
2025-12-26 11:18:16 +03:00
gy9vin
e71a3c1af7 feat(referral): топ рефереров по периодам в админ-панели
Добавлена возможность просмотра топа рефереров за неделю/месяц
   с сортировкой по количеству приглашённых или по заработку:

   - get_top_referrers_by_period() в crud/referral.py
   - Интерактивные кнопки выбора периода и критерия сортировки
   - Топ-20 рефереров с медалями для первых трёх мест
2025-12-26 09:11:08 +03:00
gy9vin
265d2b907b fix(devices): сброс устройств при уменьшении лимита
При уменьшении лимита устройств подключённые устройства не удалялись,
   позволяя пользователю продолжать использовать их бесплатно.

   Исправления:
   - execute_change_devices: сброс всех устройств через API если
     подключённых больше чем новый лимит
   - confirm_change_devices: предупреждение пользователя о сбросе
     устройств перед подтверждением
   - Уведомление о количестве сброшенных устройств в результате
2025-12-26 09:00:56 +03:00
gy9vin
54ffe3e126 feat(transactions): добавлен параметр payment_method для ручных пополнений баланса
Добавлена поддержка указания способа оплаты при пополнении баланса:

- add_user_balance(): новый параметр payment_method для передачи в транзакцию
- add_user_balance_by_id(): поддержка payment_method
- UserService: ручные пополнения админом пом
2025-12-26 08:53:08 +03:00
gy9vin
7e3d7d4771 refactor(referral): извлечена lambda в именованную функцию для пагинации списка рефералов
Заменена inline lambda на handle_referral_list_page() для улучшения читаемости:

- Извлечение номера страницы из callback.data
- Вызов show_detailed_referral_list() с параметром page
- Улучшена читаемость кода обработчика пагинации
2025-12-26 08:39:59 +03:00
gy9vin
05bfd89a02 ```
feat(tickets): добавлены уведомления админам об ответах пользователей на тикеты

Реализована функция notify_admins_about_ticket_reply() для оповещения администраторов:

- Уведомление отправляется после успешного добавления ответа пользователя
- Формат уведомления включает ID тикета, заголовок
2025-12-26 08:31:36 +03:00
gy9vin
3bf540427e feat(nalogo): расширена проверка временных ошибок для очереди чеков
Добавлены проверки сетевых ошибок и таймаутов в _is_service_unavailable():

- Проверка типа исключения (timeout, readtimeout, connecttimeout)
- Проверка сетевых ошибок (connectionerror, connecterror)
- Проверка текста ошибки на наличие "timeout"
- Обновлён docstring мет
2025-12-26 00:27:34 +03:00
gy9vin
bf6dc3991a feat(trial): платный триал с выбором метода оплаты
Реализована система платного триала с гибким выбором способа оплаты:

- Автоопределение платности: если TRIAL_ACTIVATION_PRICE > 0, триал автоматически платный
- TRIAL_PAYMENT_ENABLED теперь опционален (для обратной совместимости)
- Добавлена функция create
2025-12-26 00:03:08 +03:00
Mikhail
fb9405cccd Merge branch 'BEDOLAGA-DEV:main' into main 2025-12-25 23:56:04 +03:00
gy9vin
0b34e90372 feat(migrations): добавлены миграции для модема, трафика и призов конкурсов
Добавлены миграции для новых функций:

- migrate_contest_templates_prize_columns(): миграция prize_days → prize_type + prize_value
- add_subscription_modem_enabled_column(): колонка modem_enabled в subscriptions
- add_subscription_purchased_traffic_column(): колонка purchased_traffic_gb в subscriptions
- Обновлён check
2025-12-25 23:29:02 +03:00
Egor
04e83814b4 Merge pull request #2213 from BEDOLAGA-DEV/dev5
CloudPayments
2025-12-25 23:09:44 +03:00
gy9vin
0df3018703 feat(nalogo): система очереди чеков с отложенной отправкой
Реализована отказоустойчивая система отправки чеков в налоговую:

  - Добавлен NalogoQueueService для фоновой обработки очереди чеков
  - При недоступности nalog.ru (503) чеки сохраняются в Redis
  - Автоматическая повторная отправка с настраиваемым интервалом
  - Защита от DDoS: задержка между чеками (NALOGO_QUEUE_RECEIPT_DELAY)
  - Уведомления админам в топик при проблемах и успешной разгрузке

  Изменения в файлах:
  - app/services/nalogo_queue_service.py: новый фоновый сервис
  - app/services/nalogo_service.py: методы очереди, определение 503
  - app/utils/cache.py: lpush/rpop/llen/lrange для Redis List
  - app/handlers/admin/monitoring.py: статистика чеков в админке
  - app/config.py: NALOGO_QUEUE_* и ADMIN_NOTIFICATIONS_NALOG_TOPIC_ID
  - main.py: интеграция запуска/остановки сервиса

  Новые ENV переменные:
  - ADMIN_NOTIFICATIONS_NALOG_TOPIC_ID
  - NALOGO_QUEUE_CHECK_INTERVAL (300с)
  - NALOGO_QUEUE_RECEIPT_DELAY (3с)
  - NALOGO_QUEUE_MAX_ATTEMPTS (10)
2025-12-25 23:01:49 +03:00
Egor
8eb2be15ff Update index.html 2025-12-25 21:11:13 +03:00
Egor
648fba6e2a Update miniapp.py 2025-12-25 21:10:15 +03:00
Egor
3df8d0cb24 Update bot_configuration.py 2025-12-25 21:09:18 +03:00
Egor
a59a15af7f Update inline.py 2025-12-25 21:07:42 +03:00