add mediaGroup func
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from aiogram import types
|
||||
from aiogram.types import InputMediaPhoto
|
||||
from aiogram.types import InputMediaPhoto, FSInputFile
|
||||
|
||||
from helper_bot.utils.base_dependency_factory import BaseDependencyFactory
|
||||
from logs.custom_logger import logger
|
||||
|
||||
bdf = BaseDependencyFactory()
|
||||
|
||||
@@ -39,7 +40,29 @@ def get_text_message(post_text: str, first_name: str, username: str):
|
||||
return f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {first_name} @{username}', is_anonymous
|
||||
|
||||
|
||||
def process_photo_album(album, post_caption: str = ''):
|
||||
async def download_photo(message: types.Message, file_id: str):
|
||||
"""
|
||||
Скачивает фото по file_id из Telegram.
|
||||
|
||||
Args:
|
||||
message: сообщение
|
||||
file_id: File ID фотографии.
|
||||
filename: Имя файла, под которым будет сохранено фото.
|
||||
|
||||
Returns:
|
||||
Путь к сохраненному файлу, если файл был скачан успешно, иначе None.
|
||||
"""
|
||||
try:
|
||||
file = await message.bot.get_file(file_id)
|
||||
file_path = file.file_path
|
||||
await message.bot.download_file(file_path=file_path, destination=file_path)
|
||||
return file_path
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка скачивания фотографии: {e}")
|
||||
return None
|
||||
|
||||
|
||||
async def process_photo_album(album, post_caption: str = ''):
|
||||
"""
|
||||
Создает список InputMediaPhoto для альбома.
|
||||
|
||||
@@ -51,13 +74,41 @@ def process_photo_album(album, post_caption: str = ''):
|
||||
Список InputMediaPhoto.
|
||||
"""
|
||||
photo_media = []
|
||||
#Циклом проходимся по собранному миддлварью объекту album
|
||||
for i, message in enumerate(album):
|
||||
print(f'message_id в функции process_photo_album: {message.message_id}\n\n')
|
||||
if i == 0:
|
||||
file_id = message.photo[-1].file_id
|
||||
file_path = await download_photo(message, file_id=file_id)
|
||||
# Если это последняя фото в массиве, то добавляем подпись. Остальные фото просто преобразуем в InputMediaPhoto
|
||||
# и формируем объект MediaGroup
|
||||
if i == len(album) - 1:
|
||||
photo_media.append(InputMediaPhoto(media=message.photo[-1].file_id, caption=post_caption))
|
||||
else:
|
||||
photo_media.append(InputMediaPhoto(media=message.photo[-1].file_id))
|
||||
return photo_media
|
||||
return photo_media # Возвращаем идентификатор медиа-группы
|
||||
|
||||
|
||||
async def add_in_db_media(sent_message, post_caption: str = ''):
|
||||
"""
|
||||
Идентификатор медиа-группы
|
||||
|
||||
Args:
|
||||
sent_message: sent_message объект из Telegram API.
|
||||
post_caption: Текст подписи к первому фото.
|
||||
|
||||
Returns:
|
||||
Список InputMediaPhoto.
|
||||
"""
|
||||
media_group_message_id = sent_message[0].message_id # Получаем идентификатор медиа-группы
|
||||
for i, message in enumerate(sent_message):
|
||||
file_id = message.photo[-1].file_id
|
||||
file_path = await download_photo(message, file_id=file_id)
|
||||
if i == 0:
|
||||
BotDB.add_post_from_telegram_in_db(media_group_message_id, message.message_id, 0, file_path, post_caption)
|
||||
elif i == len(sent_message) - 1:
|
||||
BotDB.add_post_from_telegram_in_db(media_group_message_id, message.message_id, 1, file_path, post_caption)
|
||||
else:
|
||||
BotDB.add_post_from_telegram_in_db(media_group_message_id, message.message_id, 0, file_path, post_caption)
|
||||
return media_group_message_id
|
||||
|
||||
|
||||
async def send_media_group_message(chat_id: int, message: types.Message, media_group: list[InputMediaPhoto]):
|
||||
@@ -65,12 +116,37 @@ async def send_media_group_message(chat_id: int, message: types.Message, media_g
|
||||
chat_id=chat_id,
|
||||
media=media_group,
|
||||
)
|
||||
print(f'ПОЛНЫЙ ОБЪЕКТ ОТПРАВЛЕННЫХ СООБЩЕНИЙ : {sent_message}\n\n')
|
||||
await add_in_db_media(sent_message, post_caption=sent_message[-1].caption)
|
||||
message_id = sent_message[-1].message_id
|
||||
print(f'ИДЕНТИФИКАТОР ПОСЛЕДНГО СООБЩЕНИЯ: {message_id}')
|
||||
return message_id
|
||||
|
||||
|
||||
async def send_media_group_with_caption(bot, chat_id: int, post_content: list[tuple[str]], post_text: str):
|
||||
"""
|
||||
Отправляет медиа-группу с подписью к последнему файлу.
|
||||
|
||||
Args:
|
||||
bot: Экземпляр бота aiogram.
|
||||
chat_id: ID чата для отправки.
|
||||
post_content: Список кортежей с путями к файлам.
|
||||
post_text: Текст подписи.
|
||||
"""
|
||||
media = []
|
||||
for file_path in post_content:
|
||||
try:
|
||||
file = FSInputFile(path=file_path[0])
|
||||
media.append(types.InputMediaPhoto(media=file))
|
||||
except FileNotFoundError:
|
||||
logger.error(f"Файл не найден: {file_path[0]}")
|
||||
return
|
||||
|
||||
# Добавляем подпись к последнему файлу
|
||||
if media:
|
||||
media[-1].caption = post_text
|
||||
|
||||
await bot.send_media_group(chat_id=chat_id, media=media)
|
||||
|
||||
|
||||
async def send_text_message(chat_id, message: types.Message, post_text: str, markup: types.ReplyKeyboardMarkup = None):
|
||||
if markup is None:
|
||||
sent_message = await message.bot.send_message(
|
||||
@@ -160,7 +236,7 @@ def get_banned_users_buttons():
|
||||
|
||||
def get_help_message_id(media_group_message_id: int, data: dict) -> int:
|
||||
"""
|
||||
Получает идентификатор сообщения помощи по идентификатору сообщения группы.
|
||||
Получает идентификатор текстового сообщения по идентификатору сообщения группы.
|
||||
|
||||
Args:
|
||||
media_group_message_id: Идентификатор сообщения группы
|
||||
@@ -169,9 +245,8 @@ def get_help_message_id(media_group_message_id: int, data: dict) -> int:
|
||||
Returns:
|
||||
Идентификатор сообщения помощи.
|
||||
"""
|
||||
|
||||
if 'help_message_id' in data and 'media_group_message_id' in data:
|
||||
return data['media_group_message_id']
|
||||
if 'help_message_id' in data:
|
||||
return data['help_message_id'] # Возвращаем help_message_id
|
||||
else:
|
||||
return 0
|
||||
|
||||
@@ -188,7 +263,6 @@ def check_username_and_full_name(user_id: int, username: str, full_name: str):
|
||||
def unban_notifier(self):
|
||||
# Получение сегодняшней даты в формате DD-MM-YYYY
|
||||
current_date = datetime.now()
|
||||
print('Мы в функции unban_notifier')
|
||||
today = current_date.strftime("%d-%m-%Y")
|
||||
# Получение списка разблокированных пользователей
|
||||
unblocked_users = self.BotDB.get_users_for_unblock_today(today)
|
||||
|
||||
Reference in New Issue
Block a user