Обновление загрузчика аватарок
This commit is contained in:
@@ -1,15 +1,15 @@
|
|||||||
# BotCode/routers/downloads/download_avatar_all.py
|
# BotCode/routers/downloads/download_avatar_all.py
|
||||||
# Объединение закачки аватаров всех типов
|
# Объединение закачки аватаров всех типов
|
||||||
|
from BotLibrary import write_user_info_to_file
|
||||||
from .download_chat_avatar import download_chat_avatar
|
from .download_chat_avatar import download_chat_avatar
|
||||||
from .download_user_avatar import download_user_photos
|
from .download_user_avatar import download_user_photos
|
||||||
|
|
||||||
# Настройка экспорта модулей
|
# Настройка экспорта модулей
|
||||||
__all__ = ("download_avatar",)
|
__all__ = ("download_avatar", "download_chat_avatar", "download_user_photos")
|
||||||
|
|
||||||
|
|
||||||
# Функция объединения закачки аватарок
|
# Функция объединения закачки аватарок
|
||||||
async def download_avatar(message):
|
async def download_avatar(message):
|
||||||
await download_chat_avatar(message, message.chat)
|
await download_chat_avatar(message)
|
||||||
await download_user_photos(message)
|
await download_user_photos(message)
|
||||||
return f"Успешная закачка аватаров!"
|
write_user_info_to_file(message.from_user)
|
||||||
|
|||||||
@@ -1,32 +1,29 @@
|
|||||||
|
# BotCode/routers/downloads/download_chat_avatar.py
|
||||||
|
# Функция скачивания аватара чата
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import requests
|
import aiohttp
|
||||||
from aiogram import Router
|
|
||||||
from aiogram.types import Chat
|
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта модулей
|
# Создание роутера и настройка экспорта модулей
|
||||||
__all__ = ("router", "download_chat_avatar",)
|
__all__ = ("download_chat_avatar",)
|
||||||
router = Router(name="avatar_chat_router")
|
|
||||||
log_type = "AvatarChat"
|
log_type = "AvatarChat"
|
||||||
|
|
||||||
|
|
||||||
# Функция закачки аватарок чатов
|
# Функция закачки аватарок чатов
|
||||||
async def download_chat_avatar(message, chat: Chat):
|
async def download_chat_avatar(message):
|
||||||
try:
|
try:
|
||||||
|
chat = message.chat
|
||||||
# Проверка типа чата (группа или супергруппа)
|
# Проверка типа чата (группа или супергруппа)
|
||||||
if chat.type in ["group", "supergroup"]:
|
if chat.type in ["group", "supergroup"]:
|
||||||
# Получаем информацию о чате (включая фото)
|
|
||||||
chat_info = await bot.get_chat(chat.id)
|
chat_info = await bot.get_chat(chat.id)
|
||||||
|
|
||||||
chat_id = chat.id
|
# Проверка на наличие фотографий чата
|
||||||
|
|
||||||
# Проверка наличия аватара
|
|
||||||
if not chat_info.photo:
|
if not chat_info.photo:
|
||||||
text_error = f"Чат с ID {chat_id} не имеет аватара."
|
text_error = f"Чат с ID {chat.id} не имеет аватара."
|
||||||
logger.bind(log_type=log_type, user=chat_id).error(text_error)
|
logger.bind(log_type=log_type, user=chat.id).error(text_error)
|
||||||
return text_error
|
return text_error
|
||||||
|
|
||||||
# Получаем file_id для фото (высокое качество приоритетно)
|
|
||||||
file_id = (
|
file_id = (
|
||||||
getattr(chat_info.photo, 'big_file_id', None) or
|
getattr(chat_info.photo, 'big_file_id', None) or
|
||||||
getattr(chat_info.photo, 'medium_file_id', None) or
|
getattr(chat_info.photo, 'medium_file_id', None) or
|
||||||
@@ -34,39 +31,41 @@ async def download_chat_avatar(message, chat: Chat):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if not file_id:
|
if not file_id:
|
||||||
text_error = f"Не удалось получить file_id аватара чата с ID {chat_id}."
|
text_error = f"Не удалось получить file_id аватара чата с ID {chat.id}."
|
||||||
logger.bind(log_type=log_type, user=chat_id).error(text_error)
|
logger.bind(log_type=log_type, user=chat.id).error(text_error)
|
||||||
return text_error
|
return text_error
|
||||||
|
|
||||||
# Получаем file_info для фото
|
|
||||||
file_info = await bot.get_file(file_id)
|
file_info = await bot.get_file(file_id)
|
||||||
|
|
||||||
# Строим URL для скачивания файла
|
|
||||||
file_url = f"https://api.telegram.org/file/bot{bot.token}/{file_info.file_path}"
|
file_url = f"https://api.telegram.org/file/bot{bot.token}/{file_info.file_path}"
|
||||||
|
|
||||||
# Формируем путь для сохранения фото
|
chat_id = find_imp_id(chat.id)
|
||||||
chat_id = find_chat_id(message)
|
save_dir = f"{ProjectPath.chat_avatar}/{chat_id}"
|
||||||
save_dir = f"{ImportantPath.chat_avatar}/{chat_id}"
|
|
||||||
os.makedirs(save_dir, exist_ok=True)
|
os.makedirs(save_dir, exist_ok=True)
|
||||||
|
|
||||||
file_extension = os.path.splitext(file_info.file_path)[-1]
|
file_extension = os.path.splitext(file_info.file_path)[-1]
|
||||||
file_name = f"avatar{file_extension}"
|
file_name = f"avatar{file_extension}"
|
||||||
save_path = os.path.join(save_dir, file_name)
|
save_path = os.path.join(save_dir, file_name)
|
||||||
|
|
||||||
# Скачиваем аватар
|
# Асинхронное скачивание
|
||||||
response = requests.get(file_url, stream=True)
|
async with aiohttp.ClientSession() as session:
|
||||||
if response.status_code == 200:
|
async with session.get(file_url) as response:
|
||||||
|
if response.status == 200:
|
||||||
with open(save_path, "wb") as file:
|
with open(save_path, "wb") as file:
|
||||||
for chunk in response.iter_content(chunk_size=8192):
|
while True:
|
||||||
|
chunk = await response.content.read(8192)
|
||||||
|
if not chunk:
|
||||||
|
break
|
||||||
file.write(chunk)
|
file.write(chunk)
|
||||||
return f"Фото аватара чата с ID {chat_id} успешно скачано."
|
return f"Фото аватара чата с ID {chat_id} успешно скачано."
|
||||||
|
|
||||||
else:
|
else:
|
||||||
text_error = f"Не удалось скачать фото аватара чата с ID {chat_id}. Статус: {response.status_code}"
|
text_error = f"Не удалось скачать фото аватара чата с ID {chat_id}. Статус: {response.status}"
|
||||||
logger.bind(log_type=log_type, user=chat_id).error(text_error)
|
logger.bind(log_type=log_type, user=chat.id).error(text_error)
|
||||||
return text_error
|
return text_error
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
chat = message.chat
|
||||||
text_error = f"Ошибка при скачивании фото аватара чата с ID {chat.id}: {e}"
|
text_error = f"Ошибка при скачивании фото аватара чата с ID {chat.id}: {e}"
|
||||||
logger.bind(log_type=log_type, user=chat.id).exception(text_error)
|
logger.bind(log_type=log_type, user=chat.id).error(text_error)
|
||||||
return text_error
|
return text_error
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ log_type = "Media"
|
|||||||
async def handle_media(message: types.Message):
|
async def handle_media(message: types.Message):
|
||||||
try:
|
try:
|
||||||
await download_avatar(message)
|
await download_avatar(message)
|
||||||
name = find_chat_id(message)
|
name = find_imp_id(message.from_user.id)
|
||||||
await logginger(message)
|
await logginger(message)
|
||||||
file_id = None
|
file_id = None
|
||||||
|
|
||||||
@@ -28,8 +28,8 @@ async def handle_media(message: types.Message):
|
|||||||
media = message.video if message.content_type == types.ContentType.VIDEO else message.animation
|
media = message.video if message.content_type == types.ContentType.VIDEO else message.animation
|
||||||
file_extension = media.mime_type.split('/')[-1] # Получаем расширение файла (например, "mp4" или "gif")
|
file_extension = media.mime_type.split('/')[-1] # Получаем расширение файла (например, "mp4" или "gif")
|
||||||
file_name = f"{media.file_id}.{file_extension}" # Используем file_id и расширение для имени
|
file_name = f"{media.file_id}.{file_extension}" # Используем file_id и расширение для имени
|
||||||
save_dir = ImportantPath.video_directory if message.content_type == types.ContentType.VIDEO \
|
save_dir = ProjectPath.received_video if message.content_type == types.ContentType.VIDEO \
|
||||||
else ImportantPath.gif_directory
|
else ProjectPath.received_gif
|
||||||
|
|
||||||
elif message.content_type == types.ContentType.PHOTO:
|
elif message.content_type == types.ContentType.PHOTO:
|
||||||
media = message.photo
|
media = message.photo
|
||||||
@@ -38,22 +38,22 @@ async def handle_media(message: types.Message):
|
|||||||
file_info = await bot.get_file(file_id)
|
file_info = await bot.get_file(file_id)
|
||||||
# Имя файла будет взято из file_path, который содержит оригинальное имя файла
|
# Имя файла будет взято из file_path, который содержит оригинальное имя файла
|
||||||
file_name = file_info.file_path.split('/')[-1] # Используем имя файла из пути
|
file_name = file_info.file_path.split('/')[-1] # Используем имя файла из пути
|
||||||
save_dir = ImportantPath.photo_directory
|
save_dir = ProjectPath.received_photo
|
||||||
|
|
||||||
elif message.content_type == types.ContentType.VOICE:
|
elif message.content_type == types.ContentType.VOICE:
|
||||||
media = message.voice
|
media = message.voice
|
||||||
file_name = f"{media.file_id}.ogg" # Для голосовых сообщений используем file_id и расширение .ogg
|
file_name = f"{media.file_id}.ogg" # Для голосовых сообщений используем file_id и расширение .ogg
|
||||||
save_dir = ImportantPath.voice_directory
|
save_dir = ProjectPath.received_voice
|
||||||
|
|
||||||
elif message.content_type == types.ContentType.VIDEO_NOTE:
|
elif message.content_type == types.ContentType.VIDEO_NOTE:
|
||||||
media = message.video_note
|
media = message.video_note
|
||||||
file_name = f"{media.file_id}.mp4" # Для видеосообщений используем file_id и расширение .mp4
|
file_name = f"{media.file_id}.mp4" # Для видеосообщений используем file_id и расширение .mp4
|
||||||
save_dir = ImportantPath.videonote_directory
|
save_dir = ProjectPath.received_videonote
|
||||||
|
|
||||||
elif message.content_type == types.ContentType.DOCUMENT:
|
elif message.content_type == types.ContentType.DOCUMENT:
|
||||||
media = message.document
|
media = message.document
|
||||||
file_name = media.file_name # Для видеосообщений используем file_id и расширение .mp4
|
file_name = media.file_name # Для видеосообщений используем file_id и расширение .mp4
|
||||||
save_dir = ImportantPath.document_directory
|
save_dir = ProjectPath.received_document
|
||||||
|
|
||||||
else:
|
else:
|
||||||
(logger.bind(log_type=log_type, user=message.from_user.username)
|
(logger.bind(log_type=log_type, user=message.from_user.username)
|
||||||
|
|||||||
@@ -2,35 +2,31 @@
|
|||||||
# Закачка всех аватаров пользователей
|
# Закачка всех аватаров пользователей
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from aiogram import Router, types
|
from aiogram import types
|
||||||
from aiogram.types import UserProfilePhotos
|
from aiogram.types import UserProfilePhotos
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
|
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта модулей
|
# Создание роутера и настройка экспорта модулей
|
||||||
__all__ = ("router", "download_user_photos",)
|
__all__ = ("download_user_photos",)
|
||||||
router = Router(name="avatar_router")
|
|
||||||
log_type = "AvatarUser"
|
log_type = "AvatarUser"
|
||||||
|
|
||||||
|
|
||||||
# Функция закачки аватарок пользователя
|
# Функция закачки аватарок пользователя
|
||||||
async def download_user_photos(message: types.Message):
|
async def download_user_photos(message: types.Message):
|
||||||
try:
|
try:
|
||||||
# Получение ID пользователя
|
# Проверка на наличие в списке "важных" пользователей
|
||||||
user_id = message.from_user.id
|
user_id = find_imp_id(message.from_user.id)
|
||||||
|
|
||||||
# Получение аватарок пользователя
|
# Получение аватарок пользователя
|
||||||
user_profile_photos: UserProfilePhotos = await bot.get_user_profile_photos(user_id)
|
user_profile_photos: UserProfilePhotos = await bot.get_user_profile_photos(message.from_user.id)
|
||||||
|
|
||||||
# Проверка на наличие в списке "важных" пользователей
|
|
||||||
user_id = find_people_id(user_id)
|
|
||||||
|
|
||||||
# Проверка наличия фотографий
|
# Проверка наличия фотографий
|
||||||
if user_profile_photos.total_count == 0:
|
if user_profile_photos.total_count == 0:
|
||||||
return f"У пользователя {user_id} нет аватарок."
|
return f"У пользователя {user_id} нет аватарок."
|
||||||
|
|
||||||
# Объявление пути и создание директории
|
# Объявление пути и создание директории
|
||||||
user_directory = f'{ImportantPath.user_avatar}/{user_id}'
|
user_directory = f'{ProjectPath.user_avatar}/{user_id}'
|
||||||
os.makedirs(user_directory, exist_ok=True)
|
os.makedirs(user_directory, exist_ok=True)
|
||||||
|
|
||||||
# Закачка аватарок пользователя
|
# Закачка аватарок пользователя
|
||||||
|
|||||||
Reference in New Issue
Block a user