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)