98 lines
4.9 KiB
Python
98 lines
4.9 KiB
Python
# BotCode/BotLibrary/analitics/log_type.py
|
|
# Закачка всех полученных медиа в бота (в разработке + сделать логирование!!!)
|
|
|
|
import os
|
|
import requests
|
|
from aiogram import Router, types
|
|
|
|
from BotLibrary import *
|
|
from .download_avatar_all import download_avatar
|
|
|
|
# Создание роутера и настройка экспорта модулей
|
|
__all__ = ("router", "handle_media",)
|
|
router = Router(name="download_media_router")
|
|
log_type = "Media"
|
|
|
|
|
|
# Функция для скачивания медиа отправленного в бота
|
|
@router.message(F_Media)
|
|
async def handle_media(message: types.Message):
|
|
try:
|
|
await download_avatar(message)
|
|
name = find_chat_id(message)
|
|
await logginger(message)
|
|
file_id = None
|
|
|
|
# Определяем тип контента и соответствующие параметры
|
|
if message.content_type in (types.ContentType.VIDEO, types.ContentType.ANIMATION):
|
|
media = message.video if message.content_type == types.ContentType.VIDEO else message.animation
|
|
file_extension = media.mime_type.split('/')[-1] # Получаем расширение файла (например, "mp4" или "gif")
|
|
file_name = f"{media.file_id}.{file_extension}" # Используем file_id и расширение для имени
|
|
save_dir = ImportantPath.video_directory if message.content_type == types.ContentType.VIDEO \
|
|
else ImportantPath.gif_directory
|
|
|
|
elif message.content_type == types.ContentType.PHOTO:
|
|
media = message.photo
|
|
# Получение file_id для самого качественного фото
|
|
file_id = max(message.photo, key=lambda x: x.width * x.height).file_id
|
|
file_info = await bot.get_file(file_id)
|
|
# Имя файла будет взято из file_path, который содержит оригинальное имя файла
|
|
file_name = file_info.file_path.split('/')[-1] # Используем имя файла из пути
|
|
save_dir = ImportantPath.photo_directory
|
|
|
|
elif message.content_type == types.ContentType.VOICE:
|
|
media = message.voice
|
|
file_name = f"{media.file_id}.ogg" # Для голосовых сообщений используем file_id и расширение .ogg
|
|
save_dir = ImportantPath.voice_directory
|
|
|
|
elif message.content_type == types.ContentType.VIDEO_NOTE:
|
|
media = message.video_note
|
|
file_name = f"{media.file_id}.mp4" # Для видеосообщений используем file_id и расширение .mp4
|
|
save_dir = ImportantPath.videonote_directory
|
|
|
|
elif message.content_type == types.ContentType.DOCUMENT:
|
|
media = message.document
|
|
file_name = media.file_name # Для видеосообщений используем file_id и расширение .mp4
|
|
save_dir = ImportantPath.document_directory
|
|
|
|
else:
|
|
(logger.bind(log_type=log_type, user=message.from_user.username)
|
|
.error(f"Неизвестный тип контента: {message.content_type}"))
|
|
raise ValueError()
|
|
|
|
# Убедимся, что директория существует
|
|
os.makedirs(save_dir, exist_ok=True)
|
|
|
|
# Если это фото, file_id был определен внутри блока обработки фото
|
|
if file_id is not None:
|
|
file_info = await bot.get_file(file_id)
|
|
else:
|
|
file_info = await bot.get_file(media.file_id)
|
|
|
|
save_path = os.path.join(save_dir, file_name)
|
|
|
|
# Загружаем медиафайл
|
|
if message.content_type == types.ContentType.PHOTO:
|
|
# Для фото скачиваем отдельно
|
|
file_url = f"https://api.telegram.org/file/bot{bot_token}/{file_info.file_path}"
|
|
response = requests.get(file_url)
|
|
if response.status_code == 200:
|
|
with open(save_path, "wb") as file:
|
|
file.write(response.content)
|
|
else:
|
|
await bot.download_file(file_info.file_path, save_path)
|
|
|
|
# Логирование успешного скачивания
|
|
logger.bind(log_type=log_type, user=f"@{message.from_user.username}").info(
|
|
f"Файл из ({name}) успешно скачан! Сохранён как: {save_path}")
|
|
|
|
except ValueError as ve:
|
|
# Обработка ошибок типа контента
|
|
(logger.bind(log_type=log_type, user=f"@{message.from_user.username}")
|
|
.error(f"ОШИБКА: {str(ve)}"))
|
|
|
|
except Exception as e:
|
|
# Логирование общих ошибок
|
|
(logger.bind(log_type=log_type, user=f"@{message.from_user.username}")
|
|
.error(f"МЕДИЯ ОШИБКА: {str(e)}"))
|