Commit Graph

373 Commits

Author SHA1 Message Date
gy9vin
78d785f83f fix(contests): исправлены критические баги системы конкурсов
- Исправлен вызов get_active_rounds в админ-панели (передавалось 2 параметра вместо 1)
- Обновлены кнопки редактирования призов с prize_days на prize_type/prize_value
- Мигрирован Cabinet API с устаревшего prize_days на новые поля
- Добавлена поддержка нескольких типов призов (дни, баланс, кастом)
- Обновлена документация API конкурсов
2026-01-18 10:15:45 +03:00
libkit
5610a91866 feat(admin): добавить UI для создания DISCOUNT промокодов
Добавлена полная поддержка DISCOUNT типа в админке:
- Тип "💸 Одноразовая скидка" в селекторе
- Флоу создания: код → процент (1-100) → макс использований → срок промокода (дни) → срок скидки (часы)
- Валидация процента скидки (1-100)
- Валидация срока действия скидки (0-8760 часов)
- Отображение в списках и странице управления
- Новый стейт setting_discount_hours для ввода срока скидки
2026-01-17 11:22:32 +05:00
Egor
1eadbfe3f8 Update campaigns.py 2026-01-17 05:14:23 +03:00
Egor
bf0627a301 Update campaigns.py 2026-01-17 05:08:14 +03:00
Egor
ea4570ba71 Update campaigns.py 2026-01-17 05:05:42 +03:00
Egor
4599801f83 Update pricing.py 2026-01-17 02:35:23 +03:00
Egor
1b4758cdbf Update monitoring.py 2026-01-17 01:16:50 +03:00
Mikhail
1c7ed68674 Merge branch 'main' into main 2026-01-16 12:16:23 +03:00
Egor
b088328439 Update tariffs.py 2026-01-16 08:36:08 +03:00
Egor
dbf4c1f521 Update users.py 2026-01-16 06:12:01 +03:00
Egor
1337339d23 Update tariffs.py 2026-01-16 06:03:32 +03:00
Egor
f19445bcf1 Update pricing.py 2026-01-14 02:52:22 +03:00
Egor
6937bcbc3d Update pricing.py 2026-01-13 16:30:52 +03:00
Egor
70e747b866 Add files via upload 2026-01-13 01:06:13 +03:00
Egor
2f06285f69 Update messages.py 2026-01-13 00:53:08 +03:00
Egor
7fb7116101 Update messages.py 2026-01-13 00:52:02 +03:00
Egor
9d1b4bcb54 Update users.py 2026-01-13 00:22:32 +03:00
Egor
a9499337a0 Update messages.py 2026-01-12 23:31:28 +03:00
Egor
24666dd155 Update tariffs.py 2026-01-12 15:48:20 +03:00
Egor
785eabaa47 Update tariffs.py 2026-01-12 15:26:20 +03:00
evansvl
b5234f3265 Enhance Freekassa payment handling and improve Docker Compose configuration 2026-01-11 05:45:09 +03:00
Egor
3656f0181c Update tariffs.py 2026-01-11 02:59:48 +03:00
Egor
69f4fd2b2a Update tariffs.py 2026-01-10 20:32:57 +03:00
Egor
cd0a25abec Update users.py 2026-01-10 18:17:10 +03:00
gy9vin
6e1d671df2 feat(traffic): добавлен новый мониторинг трафика v2 с проверкой дельты и snapshot
Новый функционал:
- Быстрая проверка (TRAFFIC_FAST_CHECK_*) — отслеживает дельту трафика за интервал через snapshot
- Суточная проверка (TRAFFIC_DAILY_CHECK_*) — анализирует трафик за 24 часа через bandwidth API
- Фильтрация по нодам (TRAFFIC_MONIT
2026-01-10 00:47:23 +03:00
gy9vin
2607ee4d0a fix(referral-withdrawal): исправления тестового режима вывода
1. Исправлена кнопка "Профиль" после тестового начисления
     - callback изменён с admin_user_{id} на admin_user_manage_{id}

  2. Исправлена логика расчёта доступного баланса
     - Добавлен метод get_first_referral_earning_date()
     - Добавлен метод get_user_spending_after_first_earning()
     - Теперь учитываются только траты ПОСЛЕ первого реф. начисления
     - Старые траты больше не уменьшают доступный реферальный баланс

  3. Добавлен bypass cooldown в тестовом режиме
     - При REFERRAL_WITHDRAWAL_TEST_MODE=true 30-дневный cooldown пропускается
2026-01-07 16:05:42 +03:00
gy9vin
3299d47b11 merge: resolve conflict in universal_migration.py 2026-01-07 15:05:14 +03:00
gy9vin
4afefcafa4 Добавлена система вывода реферального баланса
Новая функциональность вывода средств:
  - config.py: добавлены настройки вывода (минимальная сумма, кулдаун, анализ подозрительности, тестовый режим)
  - models.py: добавлена модель WithdrawalRequest с полями для заявок, анализа рисков и обработки админ
2026-01-07 14:54:50 +03:00
Mikhail
c582e1b0c6 Merge branch 'BEDOLAGA-DEV:main' into main 2026-01-07 14:24:08 +03:00
Egor
9690436b9f Update tariffs.py 2026-01-07 03:47:28 +03:00
Egor
fdc382f309 Update tariffs.py 2026-01-07 03:31:17 +03:00
Egor
60a38d3ea6 Add files via upload 2026-01-07 03:18:46 +03:00
Egor
0fac84aa7d Update tariffs.py 2026-01-07 03:05:31 +03:00
Egor
fbb7d6c4ab Update tariffs.py 2026-01-07 02:45:42 +03:00
Egor
0b677e4205 Update tariffs.py 2026-01-07 02:35:27 +03:00
Egor
71dac493d8 Update tariffs.py 2026-01-07 02:29:37 +03:00
Egor
a981bf2ae0 Add files via upload 2026-01-07 02:15:16 +03:00
Egor
6223a5d63a Update bot_configuration.py 2026-01-06 20:57:55 +03:00
gy9vin
8342e8fe35 Ручной запуск мониторинга трафика
Ручная проверка в админке (monitoring.py):
  - Новая кнопка "📊 Проверка трафика" в меню мониторинга
  - Проверяет всех юзеров с активной подпиской
  - Показывает результат: сколько проверено, сколько превышений
  - Отправляет уведомления админам при превышении
2026-01-04 21:21:05 +03:00
gy9vin
2156f630dc Добавлена опция "только для первой покупки" в промокоды
- models.py: добавлено поле first_purchase_only в PromoCode
- universal_migration.py: миграция для добавления колонки first_purchase_only
- promocodes.py: добавлен хендлер toggle_promocode_first_purchase, отображение статуса в управлении промокодом
- promocode.py: обработка ошибки "not
2026-01-02 16:40:04 +03:00
gy9vin
5a5a18d80d Фикс промокодов
Пагинация списка промокодов:
     - promocodes.py: добавлен хендлер show_promocodes_list_page
     - Зарегистрирован для admin_promo_list_page_*
2026-01-01 22:59:12 +03:00
gy9vin
a4072237cc fix(nalogo): защита от дублирования чеков + очередь ручной проверки
ПРОБЛЕМА:
  При таймауте после успешной авторизации чек мог быть создан на сервере
  nalog.ru, но ответ не возвращался. Бот добавлял чек в очередь повторной
  отправки → создавался дубликат.

  РЕШЕНИЕ:
  1. Разделена обработка ошибок на два этапа:
     - Аутентификация не прошла → чек точно не создан → в очередь
     - Таймаут при создании → чек МОГ быть создан → НЕ в очередь

  2. Новая очередь `nalogo:pending_verification` для чеков требующих
     ручной проверки (когда таймаут после успешной авторизации)

  3. Кнопка в админке: Мониторинг → Статистика → "⚠️ Проверить (N)"
     - Показывает список чеков с суммой, датой, payment_id
     - " Создан" — чек найден в налоговой, убираем из очереди
     - "🔄 Отправить" — чек НЕ найден, отправляем повторно
     - "🗑 Очистить всё" — после полной сверки с lknpd.nalog.ru

  4. Таймаут увеличен с 10 до 30 секунд (NALOGO_TIMEOUT)

  5. Атомарная защита от race condition через cache.setnx()

  Изменённые файлы:
  - app/utils/cache.py — добавлен метод setnx()
  - app/services/nalogo_service.py — разделение ошибок, pending_verification
  - app/services/nalogo_queue_service.py — статус pending в get_status()
  - app/handlers/admin/monitoring.py — UI для ручной проверки
2025-12-31 01:25:47 +03:00
gy9vin
096b4d4fe3 fix Отправка сообщения пользователю из карточки
1. app/handlers/admin/users.py
  - Добавлен параметр parse_mode="HTML" в send_message для поддержки HTML-форматирования
  - Добавлен вызов await state.clear() при ошибке BadRequest для очистки состояния FSM
2025-12-30 22:48:15 +03:00
gy9vin
25dc7ff624 fix Добавлена фильтрация пользователей по балансу 2025-12-30 22:07:26 +03:00
gy9vin
1233d38fe1 fix Добавлена функция покупки подписки администратором с преобразованием триала в безлимитную подписку 2025-12-30 21:54:02 +03:00
Egor
2f1ef8a60d Update pricing.py 2025-12-30 18:16:35 +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
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
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