- 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
72 lines
2.9 KiB
Python
72 lines
2.9 KiB
Python
import time
|
||
from datetime import datetime
|
||
|
||
from aiogram import Router, F
|
||
from aiogram.types import CallbackQuery
|
||
|
||
from voice_bot.handlers.constants import CALLBACK_SAVE, CALLBACK_DELETE, VOICE_USERS_DIR
|
||
from voice_bot.handlers.dependencies import VoiceBotMiddleware, BotDB
|
||
from voice_bot.handlers.services import AudioFileService
|
||
from logs.custom_logger import logger
|
||
|
||
callback_router = Router()
|
||
|
||
# Middleware
|
||
callback_router.callback_query.middleware(VoiceBotMiddleware())
|
||
|
||
|
||
@callback_router.callback_query(F.data == CALLBACK_SAVE)
|
||
async def save_voice_message(call: CallbackQuery, bot_db: BotDB):
|
||
try:
|
||
# Создаем сервис для работы с аудио файлами
|
||
audio_service = AudioFileService(bot_db)
|
||
|
||
# Получаем ID пользователя из базы
|
||
user_id = bot_db.get_user_id_by_message_id_for_voice_bot(call.message.message_id)
|
||
|
||
# Генерируем имя файла
|
||
file_name = audio_service.generate_file_name(user_id)
|
||
|
||
# Собираем инфо о сообщении
|
||
time_UTC = int(time.time())
|
||
date_added = datetime.fromtimestamp(time_UTC)
|
||
|
||
# Определяем file_id
|
||
file_id = 1
|
||
if bot_db.get_last_user_audio_record(user_id=user_id):
|
||
file_id = bot_db.get_id_for_audio_record(user_id) + 1
|
||
|
||
# Сохраняем в базу данных
|
||
audio_service.save_audio_file(file_name, user_id, file_id, date_added)
|
||
|
||
# Скачиваем и сохраняем файл
|
||
await audio_service.download_and_save_audio(call.bot, call.message.message_id, file_name)
|
||
|
||
# Удаляем сообщение из предложки
|
||
await call.bot.delete_message(
|
||
chat_id=bot_db.settings['Telegram']['group_for_posts'],
|
||
message_id=call.message.message_id
|
||
)
|
||
|
||
await call.answer(text='Сохранено!', cache_time=3)
|
||
|
||
except Exception as e:
|
||
logger.error(f"Ошибка при сохранении голосового сообщения: {e}")
|
||
await call.answer(text='Ошибка при сохранении!', cache_time=3)
|
||
|
||
|
||
@callback_router.callback_query(F.data == CALLBACK_DELETE)
|
||
async def delete_voice_message(call: CallbackQuery, bot_db: BotDB):
|
||
try:
|
||
# Удаляем сообщение из предложки
|
||
await call.bot.delete_message(
|
||
chat_id=bot_db.settings['Telegram']['group_for_posts'],
|
||
message_id=call.message.message_id
|
||
)
|
||
|
||
await call.answer(text='Удалено!', cache_time=3)
|
||
|
||
except Exception as e:
|
||
logger.error(f"Ошибка при удалении голосового сообщения: {e}")
|
||
await call.answer(text='Ошибка при удалении!', cache_time=3)
|