Commit Graph

16 Commits

Author SHA1 Message Date
8d4baeb720 Require club cards in cashier enrollment and restore ticket owners
All checks were successful
continuous-integration/drone/push Build is passing
2026-09-14 21:30:38 +09:00
a9af9cb010 Fix account enrollment and operator callback flows with Redis scenarios
Some checks failed
continuous-integration/drone/push Build is failing
2026-09-14 21:01:56 +09:00
f3f8d0f737 Fix text dialog routing and club card registration recovery
All checks were successful
continuous-integration/drone/push Build is passing
2026-09-13 21:39:40 +09:00
3c1a6a02a5 Separate staff roles and protect message delivery with operator guides
All checks were successful
continuous-integration/drone/push Build is passing
2026-09-13 21:00:53 +09:00
cb35bb12e3 Stabilize staff concurrency and premium emoji; enable verified Drone deployment
Some checks failed
continuous-integration/drone/push Build is failing
2026-09-13 19:48:41 +09:00
b45fe005b9 Обновление UI: убрать розыгрыши, переименовать счета, добавить кнопку главная
Some checks failed
continuous-integration/drone/pr Build is failing
- Удалена кнопка 'Розыгрыши' из главной клавиатуры
- Переименована кнопка 'Мои счета' -> 'Мои логины'
- Показывается ник пользователя вместо TG_ID в чате
- Добавлена кнопка 'Главная' на все клавиатуры
- Проверка регистрации и сокрытие кнопки регистрации
- Валидация номера телефона при регистрации (проверка на символ '-')
2026-03-07 08:11:10 +09:00
0fdad07d82 refactor
Some checks failed
continuous-integration/drone/pr Build is failing
2026-02-17 00:22:42 +09:00
e882601b85 fix: группировка записей по маркеру Viposnova
Some checks reported errors
continuous-integration/drone/push Build encountered an error
- Одна запись = от 'Viposnova' до следующего 'Viposnova'
- Все строки между маркерами объединяются в одну запись
- Извлечение счета и клубной карты из объединенной записи
- Пример: 'Viposnova 16-11-2025 22:19:36 17-24-66-42-38-31-53 0.00 2918'
2025-11-17 10:57:18 +09:00
57da952b80 fix: парсинг клубной карты из следующей строки
- Поддержка многострочного формата из кабинета
- Строка 1: название кабинета, дата, время
- Строка 2: номер счета
- Строка 3: сумма и клубная карта (последнее 4-значное число)
- Если карта не найдена в текущей строке, проверяется следующая
2025-11-17 10:55:52 +09:00
babaee0ca3 fix: исправлен парсинг клубной карты из текста кабинета
- Клубная карта теперь извлекается как отдельное число ПОСЛЕ счета и суммы
- Формат: кабинет дата время СЧЕТ сумма КЛУБНАЯ_КАРТА
- Пример: 'Viposnova 16-11-2025 13:48:51 21-04-80-64-68-25-68 0.00 2521'
- Карта: 2521 (последнее 4-значное число), а НЕ последние 4 цифры счета
- Поиск карты после счета с пропуском сумм (содержат точку)
2025-11-17 10:54:30 +09:00
79eb66cf51 feat: доработки функционала бота
1. Подтверждение запуска розыгрыша:
   - Показ диалога с информацией об участниках и призах
   - Кнопки 'Да, провести' и 'Отмена'
   - Индикатор загрузки при проведении

2. Удаление сообщений администратором:
   - Команда /delete для удаления сообщений бота (ответ на сообщение)
   - Callback кнопка delete_message
   - Новый роутер message_admin_router

3. Определение владельцев счетов:
   - Извлечение номера клубной карты (последние 4 цифры)
   - Поиск владельца по club_card_number
   - Отображение владельца в списке обнаруженных счетов
   - Метод UserService.get_user_by_club_card()

4. Тестирование производительности:
   - Скрипт generate_test_accounts.py
   - Генерация файлов с 100, 500, 1000, 2000, 5000 счетов
   - Готовые тестовые файлы для проверки

5. Улучшения парсинга:
   - Обработка текста из кабинета с мусорными данными
   - Построчный парсинг с разбором по пробелам
   - Поддержка формата 'Viposnova  16-11-2025 22:19:36  17-24-66-42-38-31-53  0.00    2918'

6. Исправления багов:
   - AttributeError при отображении победителей без user_id
   - Безопасная обработка winner.user == None
2025-11-17 10:42:41 +09:00
65b550f8c8 fix: исправлен импорт config в notifications.py
Изменено:
- from config import ADMIN_IDS
  на
- from ..core.config import ADMIN_IDS

Проблема: ModuleNotFoundError при проведении розыгрыша
2025-11-17 10:10:33 +09:00
7343c1af4c fix: исправлен алгоритм парсинга счетов - удаление найденных совпадений
Заменен подход с негативными lookbehind на удаление найденных совпадений:
- Сначала находим все 'КАРТА СЧЕТ' паттерны
- Заменяем их пробелами в копии текста
- Потом ищем только счета в оставшемся тексте
- Это предотвращает дублирование типа '25-22-63-30-90-57-17'
2025-11-17 08:37:40 +09:00
712577e694 fix: исправлен парсинг счетов и добавлены уведомления победителям
Исправления:
1. Парсинг счетов (parse_accounts_from_message):
   - Исправлено дублирование счетов при формате 'КАРТА СЧЕТ'
   - Добавлены негативные lookbehind для корректного разбора
   - Теперь '2521 11-22-33-44-55-66-77' парсится только 1 раз

2. Уведомления победителям:
   - Создан новый модуль src/utils/notifications.py
   - Добавлена функция notify_winners_async()
   - Уведомления отправляются автоматически после розыгрыша
   - Поддержка счетов и обычных пользователей
   - Включает кнопки подтверждения для победителей по счетам
2025-11-17 08:32:11 +09:00
2d03c3e14c fix: apply club card format parsing to winner setting mechanism
- Updated parse_accounts_from_message() to support 'CARD ACCOUNT' format
- Updated set_account_as_winner() to split by space before formatting
- Added card number display in success/error messages
- Now winner setting works with format '2521 45-59-19-91-23-80-37'
2025-11-17 08:22:13 +09:00
eb3f3807fd refactor 2025-11-16 12:36:02 +09:00