# 🏗 Архитектура телеграм-бота

## Обзор

Проект телеграм-бота был полностью реструктурирован для улучшения поддерживаемости, масштабируемости и надежности. Новая модульная архитектура обеспечивает четкое разделение ответственности между компонентами.

## 🏛 Структура архитектуры

### Основные принципы

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*