mirror of
https://github.com/FerraSoft/bottohelp.git
synced 2026-08-06 21:55:03 +00:00
Подготовка к релизу
This commit is contained in:
+731
@@ -0,0 +1,731 @@
|
||||
# 🏗 Архитектура телеграм-бота
|
||||
|
||||
## Обзор
|
||||
|
||||
Проект телеграм-бота был полностью реструктурирован для улучшения поддерживаемости, масштабируемости и надежности. Новая модульная архитектура обеспечивает четкое разделение ответственности между компонентами.
|
||||
|
||||
## 🏛 Структура архитектуры
|
||||
|
||||
### Основные принципы
|
||||
|
||||
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*
|
||||
Reference in New Issue
Block a user