Files
telegram-helper-bot/voice_bot
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
..
2024-11-17 00:50:55 +03:00
2024-11-14 00:05:37 +03:00

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

Использование

Импорт сервисов

from voice_bot.handlers.services import VoiceBotService, AudioFileService
from voice_bot.handlers.utils import get_last_message_text

Использование в handlers

@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)

Обработка ошибок

try:
    result = voice_service.get_random_audio(user_id)
except AudioProcessingError as e:
    logger.error(f"Ошибка при получении аудио: {e}")
    # Обработка ошибки

Миграция

Для использования новой архитектуры:

  1. Замените прямые вызовы функций на использование сервисов
  2. Используйте dependency injection вместо глобальных переменных
  3. Обрабатывайте исключения через кастомные классы
  4. Используйте константы вместо хардкода строк

Преимущества новой архитектуры

  • Тестируемость - легко создавать моки и тесты
  • Поддерживаемость - четкое разделение ответственности
  • Расширяемость - легко добавлять новые функции
  • Читаемость - понятная структура кода
  • Переиспользование - сервисы можно использовать в разных местах