# 🏗 Архитектура телеграм-бота ## Обзор Проект телеграм-бота был полностью реструктурирован для улучшения поддерживаемости, масштабируемости и надежности. Новая модульная архитектура обеспечивает четкое разделение ответственности между компонентами. ## 🏛 Структура архитектуры ### Основные принципы 1. **Модульность** - каждый компонент имеет четко определенную ответственность 2. **Разделение слоев** - четкое разделение между API, бизнес-логикой и данными 3. **Зависимости** - использование dependency injection для связывания компонентов 4. **Тестируемость** - каждый модуль может быть протестирован независимо 5. **Расширяемость** - новые функции добавляются без изменения существующего кода ### Слои архитектуры ``` ┌─────────────────────────────────────────────────────────┐ │ Презентационный слой │ │ (Telegram API, Handlers) │ ├─────────────────────────────────────────────────────────┤ │ Бизнес-логика (Services) │ ├─────────────────────────────────────────────────────────┤ │ Доступ к данным (Repositories) │ ├─────────────────────────────────────────────────────────┤ │ База данных │ └─────────────────────────────────────────────────────────┘ ``` ## 📁 Структура проекта ``` telegram_bot/ ├── core/ # Ядро приложения │ ├── __init__.py │ ├── application.py # Главный класс приложения │ ├── config.py # Управление конфигурацией │ ├── exceptions.py # Кастомные исключения │ ├── command_router.py # Маршрутизатор команд │ ├── message_router.py # Маршрутизатор сообщений │ ├── menu_manager.py # Менеджер меню │ ├── permissions.py # Система ролей и разрешений │ ├── unified_router.py # Объединенный маршрутизатор │ ├── middleware.py # Middleware компоненты │ └── monitoring.py # Мониторинг и метрики │ ├── database/ # Слой базы данных │ ├── __init__.py │ ├── models.py # Модели данных │ ├── repository.py # Репозитории для работы с БД │ └── migrations/ # Миграции БД (планируется) │ ├── services/ # Бизнес-логика │ ├── __init__.py │ ├── role_service.py # Сервис управления ролями │ ├── user_service.py # Сервис управления пользователями │ ├── game_service.py # Игровая логика │ ├── moderation_service.py # Модерация │ ├── scheduler_service.py # Планировщик постов │ ├── welcome_service.py # Сервис приветствий │ └── donation_service.py # Донаты и достижения │ ├── handlers/ # Обработчики команд │ ├── __init__.py │ ├── base_handler.py # Базовый обработчик │ ├── user_handlers.py # Пользовательские команды │ ├── game_handlers.py # Игровые команды │ ├── admin_handlers.py # Админские команды │ ├── media_handlers.py # Обработка медиа │ └── moderation_handlers.py # Модерация │ ├── utils/ # Вспомогательные утилиты │ ├── __init__.py │ ├── validators.py # Валидация данных │ ├── formatters.py # Форматирование сообщений │ └── helpers.py # Вспомогательные функции │ ├── games/ # Игровые модули │ ├── __init__.py │ ├── game_2048.py # Игра 2048 │ ├── game_tetris.py # Тетрис │ ├── game_snake.py # Змейка │ └── game_base.py # Базовый класс игр │ ├── new_bot.py # Точка входа новой архитектуры ├── bot.py # Старый монолитный файл (для совместимости) ├── requirements.txt └── README.md ``` ## 🔧 Компоненты системы ### Core (Ядро) #### Application (`core/application.py`) Главный класс приложения, организующий работу всех компонентов: - Инициализация всех модулей - Настройка обработчиков - Управление жизненным циклом - Обработка ошибок верхнего уровня - Интеграция новой системы маршрутизации с fallback на старую #### Новая система маршрутизации ##### UnifiedMessageRouter (`core/unified_router.py`) Объединенный маршрутизатор для всех типов обновлений: - Единая точка входа для обработки сообщений - Интеграция CommandRouter, MessageTypeRouter и ContextMenuManager - Централизованное управление маршрутизацией - Логирование и мониторинг ##### CommandRouter (`core/command_router.py`) Центральный маршрутизатор команд: - Регистрация и маршрутизация команд - Проверка прав доступа через middleware - Обработка callback запросов - Метаданные команд (описания, категории) ##### MessageTypeRouter (`core/message_router.py`) Маршрутизатор типов сообщений: - Обработка текстовых сообщений по паттернам - Роутинг медиафайлов (голос, видео, фото) - Поддержка регулярных выражений для фильтрации ##### ContextMenuManager (`core/menu_manager.py`) Менеджер контекстных меню: - Управление доступностью меню на основе ролей - Кеширование меню для производительности - Динамическое формирование меню #### Система разрешений ##### PermissionManager (`core/permissions.py`) Менеджер разрешений: - Иерархия ролей пользователей (USER, MODERATOR, ADMIN, SUPER_ADMIN) - Проверка прав доступа к командам - Определение роли по ID пользователя или правам в чате - Матрица разрешений для каждой роли ##### UserRole (Enum) Перечисление ролей: - USER - обычный пользователь - MODERATOR - модератор с правами предупреждений - ADMIN - администратор с полными правами модерации - SUPER_ADMIN - супер-администратор с полным доступом ##### Permission (Enum) Перечисление конкретных разрешений: - USE_BASIC_COMMANDS - базовые команды - WARN_USERS - предупреждение пользователей - BAN_USERS - блокировка пользователей - MANAGE_SYSTEM - управление системой #### Config (`core/config.py`) Система управления конфигурацией: - Загрузка из переменных окружения - Поддержка файлов конфигурации - Валидация обязательных параметров - Типизация конфигурации #### Exceptions (`core/exceptions.py`) Кастомные исключения для единообразной обработки ошибок: - `BotException` - базовое исключение - `ValidationError` - ошибки валидации - `DatabaseError` - ошибки базы данных - `PermissionError` - ошибки доступа ### Database (База данных) #### Models (`database/models.py`) Модели данных с типизацией: - `User` - модель пользователя - `Score` - очки и статистика - `Error` - ошибки и отчеты - `ScheduledPost` - запланированные посты - `Achievement` - достижения #### Repositories (`database/repository.py`) Паттерн Repository для доступа к данным: - `UserRepository` - работа с пользователями - `ScoreRepository` - управление очками - `ErrorRepository` - ошибки и отчеты - `ScheduledPostRepository` - планировщик ### Services (Бизнес-логика) #### RoleService (`services/role_service.py`) Управление ролями пользователей: - Создание и инициализация ролей - Назначение ролей пользователям - Проверка принадлежности к ролям - Управление правами доступа #### UserService (`services/user_service.py`) Управление пользователями и профилями: - Создание и обновление профилей - Расчет рейтингов и рангов - Управление достижениями - Статистика активности - Интеграция с RoleService для проверки прав #### WelcomeService (`services/welcome_service.py`) Сервис персонализированных приветствий: - Генерация приветственных сообщений - Доступные команды по ролям - Персонализация на основе роли пользователя ### Handlers (Обработчики) #### BaseHandler (`handlers/base_handler.py`) Абстрактный базовый класс для всех обработчиков: - Общие методы валидации - Обработка ошибок - Проверка прав доступа - Логирование действий #### UserHandlers (`handlers/user_handlers.py`) Обработчики пользовательских команд: - `/start`, `/help`, `/rank` - `/leaderboard`, `/info` - Обработка текстовых сообщений ### Utils (Утилиты) #### Validators (`utils/validators.py`) Валидация входящих данных: - Проверка ID пользователей и чатов - Валидация текста и ссылок - Проверка форматов времени и сумм #### Formatters (`utils/formatters.py`) Форматирование вывода: - Форматирование сообщений пользователей - Создание клавиатур и меню - Экранирование HTML #### Helpers (`utils/helpers.py`) Вспомогательные функции: - Безопасное выполнение функций - Работа с текстом и числами - Обработка ошибок ## 🚀 Запуск новой архитектуры ### Требования ```bash pip install python-telegram-bot==20.7 requests==2.31.0 ``` ### Конфигурация Создайте файл `config_local.py` или настройте переменные окружения: ```python # config_local.py BOT_TOKEN = "ваш_токен_бота" ADMIN_IDS = [123456789, 987654321] OPENWEATHER_API_KEY = "ключ_погоды" NEWS_API_KEY = "ключ_новостей" OPENAI_API_KEY = "ключ_openai" ``` Или через переменные окружения: ```bash export BOT_TOKEN="ваш_токен" export ADMIN_IDS="123456789,987654321" ``` ### Запуск ```bash python new_bot.py ``` ## 🔄 Миграция со старой архитектуры ### Пошаговый план миграции 1. **Создание резервной копии** ```bash cp bot.py bot_old.py cp telegram_bot.db telegram_bot_old.db ``` 2. **Параллельный запуск** - Запустите новую архитектуру: `python new_bot.py` - Старая архитектура остается в `bot.py` для совместимости 3. **Тестирование функциональности** - Проверьте основные команды: `/start`, `/help`, `/rank` - Протестируйте игры и модерацию - Убедитесь в корректности работы базы данных 4. **Постепенная миграция** - Переносите обработчики по одному модулю - Тестируйте каждый модуль отдельно - Обновляйте документацию 5. **Полная замена** - Замените `bot.py` на новую версию - Обновите скрипты запуска - Удалите старый код после подтверждения работоспособности ## 📊 Преимущества новой архитектуры ### Поддерживаемость - **Размер файлов**: Основной файл уменьшен с 3500+ до < 500 строк - **Читаемость**: Каждый модуль имеет четкую ответственность - **Отладка**: Легче находить и исправлять ошибки ### Масштабируемость - **Добавление функций**: Новые возможности без изменения существующего кода - **Командная разработка**: Каждый разработчик работает с отдельным модулем - **Тестирование**: Unit и integration тесты для каждого компонента ### Надежность - **Обработка ошибок**: Единообразная обработка на всех уровнях - **Валидация**: Проверка данных на входе и выходе - **Мониторинг**: Логирование действий и ошибок ### Производительность - **Оптимизация**: Локализация узких мест и оптимизация - **Кеширование**: Возможность добавления кеширования (Redis) - **База данных**: Оптимизированные запросы ## 🔧 Расширение функциональности ### Добавление новой команды 1. **Создайте обработчик** в соответствующем модуле: ```python class NewHandlers(BaseHandler): def get_command_handlers(self) -> Dict[str, Callable]: return { 'new_command': self.handle_new_command } ``` 2. **Добавьте бизнес-логику** в сервис: ```python class NewService: async def process_new_feature(self, user_id: int) -> str: # Логика обработки pass ``` 3. **Зарегистрируйте в приложении**: ```python # В Application._initialize_handlers() handlers['new'] = NewHandlers(self.config, NewService(...)) ``` ### Добавление новой игры 1. **Создайте игровой модуль** в `games/`: ```python class NewGame(GameBase): async def start_game(self, user_id: int) -> str: # Логика игры pass ``` 2. **Добавьте обработчик** в `GameHandlers`: ```python async def handle_new_game(self, update: Update, context: ContextTypes): # Обработка команды игры pass ``` ## 🧪 Тестирование ### Структура тестов ``` tests/ ├── __init__.py ├── test_services/ │ ├── test_user_service.py │ ├── test_game_service.py │ └── test_moderation_service.py ├── test_handlers/ │ ├── test_user_handlers.py │ ├── test_admin_handlers.py │ └── test_game_handlers.py ├── test_utils/ │ ├── test_validators.py │ └── test_formatters.py └── test_integration/ └── test_full_flow.py ``` ### Запуск тестов ```bash # Установка зависимостей для тестирования pip install pytest pytest-asyncio pytest-mock # Запуск всех тестов pytest # Запуск тестов конкретного модуля pytest tests/test_services/test_user_service.py # Запуск с покрытием pytest --cov=telegram_bot ``` ## 📈 Мониторинг и аналитика ### Метрики для отслеживания - **Производительность**: Время ответа на команды - **Надежность**: Количество ошибок и их типы - **Использование**: Статистика команд и активность пользователей - **Ресурсы**: Загрузка CPU, памяти, базы данных ### Инструменты мониторинга - **Логирование**: Структурированные логи с уровнями важности - **Метрики**: Сбор метрик с помощью библиотеки (например, `prometheus_client`) - **Отчеты**: Регулярные отчеты об ошибках и использовании ## 🔒 Безопасность ### Меры защиты - **Валидация входных данных**: Проверка всех пользовательских вводов - **Rate limiting**: Ограничение частоты запросов - **Санитизация**: Очистка данных перед сохранением - **Доступ к API**: Безопасное хранение ключей API ### Лучшие практики - **Принцип наименьших прав**: Минимальные разрешения для выполнения задач - **Обработка ошибок**: Не раскрытие внутренней информации в сообщениях об ошибках - **Логирование**: Безопасное логирование без чувствительных данных ## 📚 Документация ### Обновление документации - **README.md**: Общая информация о проекте и запуске - **ARCHITECTURE.md**: Подробное описание архитектуры (этот файл) - **API.md**: Документация API для разработчиков - **DEPLOYMENT.md**: Инструкции по развертыванию ### Генерация документации ```bash # Автоматическая генерация документации (если используется Sphinx) sphinx-build docs/ docs/_build/ ``` ## 🔄 Новая система маршрутизации ### Архитектура маршрутизации ``` Telegram Update ↓ UnifiedMessageRouter.handle_update() ↓ ├── Команды (/start, /help) → CommandRouter ├── Текстовые сообщения → MessageTypeRouter ├── Callback запросы → CommandRouter (callback handlers) ├── Инлайн запросы → MessageTypeRouter └── Медиа файлы → MessageTypeRouter ``` ### Принципы работы 1. **Единая точка входа**: Все обновления проходят через `UnifiedMessageRouter` 2. **Разделение ответственности**: Каждый тип обновлений обрабатывается специализированным роутером 3. **Проверка прав**: Middleware проверяет разрешения перед выполнением команд 4. **Fallback система**: При сбое новой системы активируется старая система обработчиков 5. **Логирование**: Все операции маршрутизации логируются для отладки ### Преимущества новой системы - **Централизованное управление**: Все маршруты в одном месте - **Гибкость**: Легко добавлять новые типы обработчиков - **Безопасность**: Встроенная проверка прав доступа - **Отказоустойчивость**: Fallback на старую систему - **Производительность**: Кеширование и оптимизация маршрутов ## 📨 Архитектура обработки сообщений ### Общая структура Проект использует модульную архитектуру с четким разделением ответственности. Обработка сообщений происходит через многоуровневую систему маршрутизации с интегрированной системой разрешений. ### Ключевые компоненты #### 1. **UnifiedMessageRouter** (`core/unified_router.py`) Единая точка входа для всех обновлений от Telegram API: - Определяет тип обновления (message, callback_query, inline_query, etc.) - Распределяет обработку между специализированными роутерами - Интегрирует CommandRouter, MessageTypeRouter и ContextMenuManager - Логирует все операции маршрутизации #### 2. **CommandRouter** (`core/command_router.py`) Центральный маршрутизатор команд: - Регистрирует и маршрутизирует команды (начинающиеся с `/`) - Проверяет права доступа через middleware - Обрабатывает callback-запросы - Содержит метаданные команд (описания, категории) #### 3. **MessageTypeRouter** (`core/message_router.py`) Маршрутизатор типов сообщений: - Обработка текстовых сообщений по паттернам (регулярные выражения) - Роутинг медиафайлов (фото, видео, аудио, документы, голосовые) - Поддержка регулярных выражений для фильтрации - Регистрация обработчиков с учетом ролей пользователей #### 4. **ContextMenuManager** (`core/menu_manager.py`) Менеджер контекстных меню: - Управляет доступностью меню на основе ролей - Кеширует меню для производительности - Динамически формирует меню - Проверяет права доступа к элементам меню #### 5. **PermissionManager** (`core/permissions.py`) Система ролей и разрешений: - Иерархия ролей: USER, MODERATOR, ADMIN, SUPER_ADMIN - Проверка прав доступа к командам и функциям - Определение роли по ID пользователя или правам в чате - Матрица разрешений для каждой роли #### 6. **Handlers** (`handlers/`) Обработчики команд и сообщений: - **BaseHandler** - абстрактный базовый класс с общими методами - **GameHandlers** - игровые команды и механики - **AdminHandlers** - административные функции - **UserHandlers** - пользовательские команды - **ModerationHandlers** - модерационные функции #### 7. **Services** (`services/`) Бизнес-логика: - **GameService** - управление игровыми сессиями и логикой игр - **UserService** - управление пользователями и профилями - **ModerationService** - функции модерации - **WelcomeService** - персонализированные приветствия #### 8. **Database** (`database/`) Слой данных: - Модели данных (User, Score, Warning, etc.) - Репозитории для работы с БД - Миграции базы данных ### Потоки данных #### Основной поток обработки сообщений: ``` Telegram Update ↓ UnifiedMessageRouter.handle_update() ↓ ├── Команды (/start, /help) → CommandRouter ├── Текстовые сообщения → MessageTypeRouter (по паттернам) ├── Callback запросы → CommandRouter (callback handlers) ├── Инлайн запросы → MessageTypeRouter ├── Медиа файлы → MessageTypeRouter └── Меню → ContextMenuManager ↓ Handlers (с проверкой прав) ↓ Services (бизнес-логика) ↓ Database (сохранение данных) ``` #### Обработка игровой команды: ``` Команда /play_game ↓ GameHandlers.handle_play_game() ↓ GameService.create_game_session() ↓ Возврат клавиатуры выбора игры ↓ Callback от пользователя ↓ MessageTypeRouter.route_callback() ↓ GameHandlers.handle_2048() или другая игра ↓ GameService.play_game_logic() ↓ Database (обновление статистики) ``` #### Обработка административных команд: ``` Команда /admin_stats ↓ AdminHandlers.handle_admin_stats() ↓ (проверка прав ADMIN) ModerationService.get_moderation_stats() ↓ Database (запрос статистики) ↓ Возврат результатов пользователю ``` ### Система маршрутизации #### Регистрация обработчиков: - **Command handlers**: регистрируются в CommandRouter с указанием требуемой роли - **Message handlers**: регистрируются в MessageTypeRouter с паттернами и ролями - **Callback handlers**: регистрируются с паттернами callback_data - **Media handlers**: регистрируются по типу медиа (photo, video, etc.) #### Проверка прав доступа: - Каждый обработчик имеет требуемую роль - PermissionManager проверяет соответствие роли пользователя - Иерархия ролей: SUPER_ADMIN > ADMIN > MODERATOR > USER ### Точки интеграции для новой системы триггеров #### 1. **UnifiedMessageRouter** - основная точка интеграции - Можно добавить новый тип обработки: триггеры - Расширить `handle_update()` для обработки триггерных событий #### 2. **MessageTypeRouter** - для текстовых паттернов - Добавить регистрацию триггерных паттернов - Интегрировать с базой данных триггеров #### 3. **Services layer** - бизнес-логика триггеров - Создать **TriggerService** для управления триггерами - Хранение условий и действий триггеров - Выполнение действий при срабатывании #### 4. **Database layer** - хранение триггеров - Добавить модели: Trigger, TriggerCondition, TriggerAction - Репозитории для работы с триггерами - Миграции для новых таблиц #### 5. **Handlers** - обработчики триггеров - **TriggerHandlers** для управления триггерами через команды - Интеграция с существующими обработчиками #### Возможные триггерные события: - Текстовые паттерны в сообщениях - Команды пользователей - Изменения статуса пользователей - Временные события (cron-like) - Игровые события (победы, достижения) #### Архитектура интеграции триггеров: ``` Сообщение пользователя ↓ UnifiedMessageRouter (расширенный) ↓ ├── Обычная обработка └── Проверка триггеров → TriggerService.check_triggers() ↓ TriggerService.execute_actions() ↓ Отправка ответов/выполнение действий ``` ### Интеграция с Application ```python # В Application.__init__() self._initialize_unified_router() # Создание компонентов self._setup_unified_router() # Регистрация обработчиков # В обработчиках команд async def _handle_command_fallback(self, update, context, command, handler): try: if self.unified_router: await self.unified_router.handle_update(update, context) else: await handler(update, context) # Fallback except AttributeError: await handler(update, context) # Безопасный fallback ``` ## 🔮 Планы развития ### Короткосрочные цели (1-3 месяца) - [x] Исправить синтаксическую ошибку в user_handlers.py - [x] Реализовать fallback для unified_router - [x] Добавить проверку инициализации unified_router - [ ] Полная миграция на новую архитектуру - [ ] Покрытие тестами > 80% - [ ] Документация всех модулей - [ ] Настройка мониторинга ### Среднесрочные цели (3-6 месяцев) - [ ] Веб-интерфейс для управления ботом - [ ] Многоязычность (i18n) - [ ] Миграция на PostgreSQL - [ ] Добавление Redis для кеширования ### Долгосрочные цели (6+ месяцев) - [ ] Микросервисная архитектура - [ ] Автоматическое масштабирование - [ ] Расширенная аналитика и ML - [ ] Интеграция с другими платформами ## 🤝 Вклад в развитие ### Рабочий процесс 1. **Создание задачи** в TODO.md или issue tracker 2. **Разработка** в отдельной ветке 3. **Тестирование** с покрытием > 80% 4. **Code review** другими разработчиками 5. **Слияние** после одобрения ### Стандарты кода - **Типизация**: Использование type hints для всех функций - **Документация**: Docstrings для всех публичных методов - **Тестирование**: Unit тесты для всех новых функций - **Стиль**: Соблюдение PEP 8 и проекта стандартов --- *Последнее обновление: Октябрь 2025* *Версия архитектуры: 2.0.0*