Files
telegram-helper-bot/voice_bot/README.md
Andrey d128e54694 Refactor project structure and remove obsolete files
- Deleted the Makefile, `README_TESTING.md`, and several deployment scripts to streamline the project.
- Updated `.dockerignore` to exclude unnecessary development files.
- Adjusted database schema comments for clarity.
- Refactored metrics handling in middleware for improved command extraction and logging.
- Enhanced command mappings for buttons and callbacks in constants for better maintainability.
- Start refactor voice bot
2025-09-01 00:54:10 +03:00

112 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Voice Bot - Архитектура
## Обзор
Voice Bot был рефакторен в соответствии с принципами чистой архитектуры, следуя паттернам, используемым в `helper_bot`.
## Структура проекта
```
voice_bot/
├── handlers/
│ ├── __init__.py # Экспорт всех модулей
│ ├── constants.py # Константы и сообщения
│ ├── dependencies.py # Dependency injection и middleware
│ ├── exceptions.py # Кастомные исключения
│ ├── services.py # Бизнес-логика
│ ├── utils.py # Вспомогательные функции
│ ├── voice_handler.py # Обработчики голосовых сообщений
│ └── callback_handler.py # Обработчики callback'ов
├── keyboards/
│ └── keyboards.py # Клавиатуры
├── utils/
│ └── helper_func.py # Устаревшие функции (для совместимости)
├── main.py # Точка входа
└── README.md # Этот файл
```
## Принципы архитектуры
### 1. Разделение ответственности
- **Handlers** - только обработка событий и координация
- **Services** - бизнес-логика и операции с данными
- **Utils** - вспомогательные функции
- **Constants** - константы и сообщения
### 2. Dependency Injection
- Использование `VoiceBotMiddleware` для внедрения зависимостей
- Типизированные зависимости `BotDB` и `Settings`
- Автоматическое получение экземпляров через `get_global_instance()`
### 3. Обработка ошибок
- Кастомные исключения для разных типов ошибок
- Логирование всех ошибок
- Graceful fallback для пользователей
### 4. Константы
- Все строки и значения вынесены в `constants.py`
- Легко изменять сообщения и настройки
- Централизованное управление конфигурацией
## Основные компоненты
### VoiceBotService
Основной сервис для работы с голосовыми сообщениями:
- Отправка приветственных сообщений
- Управление аудио файлами
- Работа с базой данных
### AudioFileService
Сервис для работы с аудио файлами:
- Генерация имен файлов
- Сохранение в базу данных
- Скачивание и сохранение файлов
### VoiceBotMiddleware
Middleware для dependency injection:
- Автоматическое внедрение зависимостей
- Обработка ошибок
- Совместимость с MagicData
## Использование
### Импорт сервисов
```python
from voice_bot.handlers.services import VoiceBotService, AudioFileService
from voice_bot.handlers.utils import get_last_message_text
```
### Использование в handlers
```python
@voice_router.message(Command("start"))
async def start(message: types.Message, bot_db: BotDB, settings: Settings):
voice_service = VoiceBotService(bot_db, settings)
await voice_service.send_welcome_messages(message, user_emoji)
```
### Обработка ошибок
```python
try:
result = voice_service.get_random_audio(user_id)
except AudioProcessingError as e:
logger.error(f"Ошибка при получении аудио: {e}")
# Обработка ошибки
```
## Миграция
Для использования новой архитектуры:
1. Замените прямые вызовы функций на использование сервисов
2. Используйте dependency injection вместо глобальных переменных
3. Обрабатывайте исключения через кастомные классы
4. Используйте константы вместо хардкода строк
## Преимущества новой архитектуры
- **Тестируемость** - легко создавать моки и тесты
- **Поддерживаемость** - четкое разделение ответственности
- **Расширяемость** - легко добавлять новые функции
- **Читаемость** - понятная структура кода
- **Переиспользование** - сервисы можно использовать в разных местах