- Удалена кнопка 'Розыгрыши' из главной клавиатуры
- Переименована кнопка 'Мои счета' -> 'Мои логины'
- Показывается ник пользователя вместо TG_ID в чате
- Добавлена кнопка 'Главная' на все клавиатуры
- Проверка регистрации и сокрытие кнопки регистрации
- Валидация номера телефона при регистрации (проверка на символ '-')
- Fixed get_all_active_users() to broadcast to ALL users regardless of registration status
- Merged duplicate text message handlers (check_exit_keywords and handle_text_message)
- Added detailed logging for chat message broadcasting
- Now users can receive messages in chat without full registration
Resolves: Messages not being delivered to unregistered users in chat
Блок 1: Система никнеймов
- ✅ Добавлено поле nickname в модель User
- ✅ Создана миграция для nickname
- ✅ Обновлена регистрация (3 шага: nickname → карта → телефон)
- ✅ Валидация nickname (длина 2-20, проверка служебных слов)
- ✅ Подписи в чате используют nickname
Блок 2: Админские функции
- ✅ Массовая рассылка (кнопка в админке, поддержка текста/фото/видео/документов)
- ✅ Экспорт пользователей в JSON (бэкап с метаданными)
- ✅ Импорт пользователей из JSON (восстановление с обновлением)
Блок 3: Улучшения розыгрышей
- ✅ Рассылка результатов розыгрыша всем участникам (кроме победителей)
- ✅ Сообщения подтверждения показывают nickname + клубную карту
- ✅ Ручное назначение победителя по номеру счета/telegram ID/username
- Все пользователи видят сообщения друг друга (как в обычном чате)
- Админ получает все сообщения для модерации
- Быстрое удаление: админ отвечает на сообщение словом 'удалить'/'del'/'-'
- Удаление происходит у всех получателей автоматически
- Команда удаления самоудаляется через 3 секунды
- Сохранена админ-панель для управления сообщениями
- Голосовые сообщения (F.voice) теперь отклоняются с предупреждением
- Аудиофайлы/музыка (F.audio) теперь отклоняются с предупреждением
- Пользователям предлагается использовать текст или изображения
- Упрощена логика обработчиков - теперь просто блокировка без проверок
- Исправлен exclude_user_id для всех типов сообщений (фото, видео, документы, анимации, стикеры, голосовые)
- Теперь админ получает копии всех сообщений пользователей, независимо от типа контента
- Ранее работало только для текстовых сообщений
- Исправлен порядок роутеров: account_router перемещён после chat_router
- Добавлен фильтр is_delete_trigger для quick_delete (перехватывал все сообщения)
- Статистика доставки теперь показывается только админам
- Обычные пользователи больше не видят 'Сообщение разослано' после отправки
- Все сообщения (текст, фото, видео, документы, стикеры, голосовые) автоматически рассылаются всем пользователям
- Исключение: команды (начинаются с /) не рассылаются
- Исключение для админов: паттерны счетов обрабатываются в account_handlers
- Упрощена логика - убран режим forward, всегда broadcast
- Показ статистики доставки: успешно/неуспешно
- Проверка прав на отправку сообщений (баны)
PROBLEM:
- /start command was not responding
- Chat router was intercepting all text messages including commands
- Main router with /start handler was connected AFTER chat_router
ROOT CAUSE:
- chat_router has @router.message(F.text) handler that catches ALL text
- It was connected BEFORE main router with Command('start') handler
- chat_router returned early for /start, preventing main handler from running
SOLUTION:
1. Move main router (with /start, /help, /admin) to FIRST position
2. Keep chat_router LAST (catches only unhandled messages)
3. Remove /start and /help from chat_handlers command list (handled earlier)
ROUTER ORDER (priority):
1. router (main.py) - base commands
2. admin_router - admin panel
3. registration_router
4. admin_account_router
5. admin_chat_router
6. redraw_router
7. account_router
8. chat_router - LAST (catch-all for broadcasts)
ALSO FIXED:
- Add missing imports in admin_panel.py: Lottery, Participation, Account
- Fixes NameError crashes in cleanup functions
- Исправлены импорты: database → src.core.database, config → src.core.config
- Заменены async for get_session() на async with async_session_maker()
- Добавлен планировщик для пакетной рассылки сообщений (BATCH_SIZE=20, BATCH_DELAY=1.0s)
- Исправлено использование is_registered вместо is_active для фильтрации пользователей
- Реализована защита от блокировки Telegram при массовой рассылке
Изменения:
- src/handlers/chat_handlers.py: добавлен broadcast_message_with_scheduler
- src/handlers/admin_chat_handlers.py: исправлены импорты и использование сессий
Реализована полнофункциональная система чата с двумя режимами работы:
## Режимы работы:
- Broadcast: рассылка сообщений всем пользователям
- Forward: пересылка сообщений в указанную группу/канал
## Функционал:
- Поддержка всех типов сообщений: text, photo, video, document, animation, sticker, voice
- Система банов: личные баны пользователей и глобальный бан чата
- Модерация: удаление сообщений с отслеживанием в БД
- История сообщений с сохранением ID пересланных сообщений
## Структура БД (миграция 005):
- chat_settings: настройки чата (режим, ID канала, глобальный бан)
- banned_users: история банов с причинами и информацией о модераторе
- chat_messages: история сообщений с типами, файлами и картой доставки (JSONB)
## Сервисы:
- ChatSettingsService: управление настройками чата
- BanService: управление банами пользователей
- ChatMessageService: работа с историей сообщений
- ChatPermissionService: проверка прав на отправку сообщений
## Обработчики:
- chat_handlers.py: обработка сообщений пользователей (7 типов контента)
- admin_chat_handlers.py: админские команды управления чатом
## Админские команды:
- /chat_mode - переключение режима (broadcast/forward)
- /set_forward <chat_id> - установка ID канала для пересылки
- /ban <user_id> [причина] - бан пользователя
- /unban <user_id> - разбан пользователя
- /banlist - список забаненных
- /global_ban - включение/выключение глобального бана
- /delete_msg - удаление сообщения (ответ на сообщение)
- /chat_stats - статистика чата
## Документация:
- docs/CHAT_SYSTEM.md: полное описание системы с примерами использования
Изменено файлов: 7 (2 modified, 5 new)
- main.py: подключены chat_router и admin_chat_router
- src/core/models.py: добавлены модели ChatSettings, BannedUser, ChatMessage
- migrations/versions/005_add_chat_system.py: миграция создания таблиц
- src/core/chat_services.py: сервисный слой для чата (267 строк)
- src/handlers/chat_handlers.py: обработчики сообщений (447 строк)
- src/handlers/admin_chat_handlers.py: админские команды (369 строк)
- docs/CHAT_SYSTEM.md: документация (390 строк)