feature/chat-system #1

Merged
trevor merged 11 commits from feature/chat-system into master 2025-11-17 00:32:48 +00:00
Owner
No description provided.
trevor added 11 commits 2025-11-17 00:32:43 +00:00
feat: добавлена система чата с модерацией
Some checks reported errors
continuous-integration/drone/push Build encountered an error
b6c27b7b70
Реализована полнофункциональная система чата с двумя режимами работы:

## Режимы работы:
- 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 строк)
fix: исправлены импорты и добавлен планировщик рассылки
Some checks reported errors
continuous-integration/drone/push Build encountered an error
e798216cef
- Исправлены импорты: 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: исправлены импорты и использование сессий
docs: добавлена документация по планировщику рассылки
Some checks reported errors
continuous-integration/drone/push Build encountered an error
a0e6a385b6
- Подробное описание работы планировщика с пакетной отправкой
- Математика расчета скорости отправки (10-13 сообщений/сек)
- Рекомендации по настройке параметров BATCH_SIZE и BATCH_DELAY
- Примеры для разных размеров групп пользователей
- Troubleshooting распространенных проблем
- Объяснение защиты от блокировки Telegram (лимит 30 сообщений/сек)
fixes, chat handlers
Some checks reported errors
continuous-integration/drone/push Build encountered an error
4e06e6296c
feat: Полный рефакторинг с модульной архитектурой
Some checks reported errors
continuous-integration/drone/push Build encountered an error
4a741715f5
- Исправлены критические ошибки callback обработки
- Реализована модульная архитектура с применением SOLID принципов
- Добавлена система dependency injection
- Создана новая структура: interfaces, repositories, components, controllers
- Исправлены проблемы с базой данных (добавлены отсутствующие столбцы)
- Заменены заглушки на полную функциональность управления розыгрышами
- Добавлены отчеты о проделанной работе и документация

Архитектура готова для production и легко масштабируется
feat: Добавлена миграция 006 для исправления схемы БД
Some checks reported errors
continuous-integration/drone/push Build encountered an error
0623de5046
- Создана миграция 006_fix_missing_columns.py
- Автоматически добавляет отсутствующие столбцы:
  * participations.account_id с FK на accounts
  * winners.is_notified, is_claimed, claimed_at
- Миграция идемпотентна (безопасна для повторного выполнения)
- Добавлен откат (downgrade) функционал
- Обновлена документация в README.md
- Создан отчет MIGRATION_006_REPORT.md

Теперь изменения БД применяются через alembic upgrade head
- Удалены заглушки 'в разработке' из main.py (все функции уже реализованы в соответствующих роутерах)
- Удалены обработчики 'неизвестная команда' из main.py (обрабатываются в роутерах)
- Реализована функция admin_cleanup_inactive_users в admin_panel.py:
  * Удаляет незарегистрированных пользователей неактивных более 30 дней
  * Проверяет отсутствие связанных данных (участия, счета)
  * Безопасное удаление с сохранением целостности БД
- Все функции теперь полностью реализованы, заглушек не осталось
fix: подключены все роутеры, исправлена ошибка callback обработчиков
Some checks reported errors
continuous-integration/drone/push Build encountered an error
3d7338b3ed
- Подключены роутеры: admin_panel, registration, admin_account, admin_chat, redraw, account, chat
- Исправлен back_to_main_handler: использует callback.message вместо fake_message
- Роутеры подключены в правильном порядке (от специфичных к общим)
- Все кнопки админ-панели теперь работают корректно
fix: change telegram_id from INTEGER to BIGINT to support large bot IDs
Some checks reported errors
continuous-integration/drone/push Build encountered an error
d3f9f2fb53
- Add migration 007 to change users.telegram_id from INTEGER to BIGINT
- Update User.telegram_id model to use BigInteger
- Update BannedUser.telegram_id model to use BigInteger
- Fixes asyncpg.exceptions.DataError: value 8300330445 out of int32 range
- PostgreSQL INTEGER supports only -2.1B to 2.1B, but Telegram IDs can exceed this
- BIGINT supports up to 9.2 quintillion, sufficient for all Telegram IDs
feat: add bot control script to prevent multiple instances
Some checks reported errors
continuous-integration/drone/push Build encountered an error
72e95db811
- Add bot_control.sh script for safe bot management
- Prevent 'Conflict: terminated by other getUpdates' error
- Add Makefile commands: bot-start, bot-stop, bot-restart, bot-status, bot-logs
- Add BOT_MANAGEMENT.md with usage instructions
- Use PID file to track single bot instance
- Auto-stop all old processes before starting
- Add .bot.pid to .gitignore

Fixes issue where multiple bot instances cause command processing failures
fix: fix /start command not working - router order issue
Some checks reported errors
continuous-integration/drone/push Build encountered an error
continuous-integration/drone/pr Build encountered an error
0dc0ae8111
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
trevor merged commit 438a5b5b05 into master 2025-11-17 00:32:48 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: trevor/new_lottery_bot#1
No description provided.