Files
telegram-helper-bot/voice_bot
Andrey 2d40f4496e Update voice bot functionality and clean up project structure
- Added voice message handling capabilities, including saving and deleting audio messages via callback queries.
- Refactored audio record management in the database to remove unnecessary fields and streamline operations.
- Introduced new keyboard options for voice interactions in the bot.
- Updated `.gitignore` to include voice user files for better project organization.
- Removed obsolete voice bot handler files to simplify the codebase.
2025-09-01 19:17:05 +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. Используйте константы вместо хардкода строк

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

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