import time from datetime import datetime from pathlib import Path from aiogram import Router, F from aiogram.types import CallbackQuery from helper_bot.utils.base_dependency_factory import BaseDependencyFactory callback_router = Router() bdf = BaseDependencyFactory() GROUP_FOR_LOGS = bdf.settings['Telegram']['group_for_logs'] GROUP_FOR_POST = bdf.settings['Telegram']['group_for_posts'] IMPORTANT_LOGS = bdf.settings['Telegram']['important_logs'] PREVIEW_LINK = bdf.settings['Telegram']['preview_link'] LOGS = bdf.settings['Settings']['logs'] TEST = bdf.settings['Settings']['test'] BotDB = bdf.get_db() @callback_router.callback_query( F.data == "save" ) async def save_voice_message(call: CallbackQuery): file_name = '' file_id = 1 user_id = BotDB.get_user_id_by_message_id_for_voice_bot(call.message.message_id) # Проверяем что запись о файле есть в базе данных is_having_audio_from_user = BotDB.get_last_user_audio_record(user_id=user_id) if is_having_audio_from_user is False: # Если нет, то генерируем имя файла file_name = f'message_from_{user_id}_number_{file_id}' else: # Иначе берем последнюю запись из БД, добавляем к ней 1, и создаем новую запись file_name = BotDB.get_path_for_audio_record(user_id=user_id) file_id = BotDB.get_id_for_audio_record(user_id) + 1 path = Path(f'voice_users/{file_name}.ogg') if path.exists(): file_name = f'message_from_{user_id}_number_{file_id}' else: pass # Собираем инфо о сообщении time_UTC = int(time.time()) date_added = datetime.fromtimestamp(time_UTC) # Сохраняем в базку BotDB.add_audio_record(file_name, user_id, date_added, 0, file_id) file_info = await call.message.bot.get_file(file_id=call.message.voice.file_id) downloaded_file = await call.message.bot.download_file(file_path=file_info.file_path) with open(f'voice_users/{file_name}.ogg', 'wb') as new_file: new_file.write(downloaded_file.read()) await call.bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id) await call.answer(text='Сохранено!', cache_time=3) @callback_router.callback_query( F.data == "delete" ) async def delete_voice_message(call: CallbackQuery): # Получаем из базы автора + отправляем сообщение + удаляем сообщение из предложки await call.bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id) await call.answer(text='Удалено!', cache_time=3)