69 lines
2.8 KiB
Python
69 lines
2.8 KiB
Python
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)
|