Когда пользователь отправляет несколько фотографий одним сообщением (альбомом), Telegram отправляет их как группу с одинаковым media_group_id. Нужно собрать все части группы в media_groups по media_group_id.
Либо, если пользователь отправляет одно фото, обрабатывать сразу и отправлять администратору.
from aiogram import Bot, Dispatcher, types
from aiogram.types import MediaGroup
from aiogram.utils import executor
import asyncio
API_TOKEN = 'YOUR_BOT_API_TOKEN'
ADMIN_CHAT_ID = 'ADMIN_CHAT_ID' # Замените на ID чата администратора
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
# Хранение временных данных для групп фотографий
media_groups = {}
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
await message.reply("Привет! Отправь мне фотографии для предложки.")
@dp.message_handler(content_types=types.ContentType.PHOTO)
async def handle_photo(message: types.Message):
user_id = message.from_user.id
media_group_id = message.media_group_id
if media_group_id:
# Если это группа медиафайлов
if media_group_id not in media_groups:
media_groups[media_group_id] = {
'user_id': user_id,
'photos': []
}
# Добавляем фото в группу
media_groups[media_group_id]['photos'].append(message.photo[-1].file_id)
# Ждем завершения группы (Telegram отправляет группу частями)
await asyncio.sleep(1) # Небольшая задержка для сбора всех частей группы
else:
# Если это одиночное фото
await bot.send_photo(ADMIN_CHAT_ID, message.photo[-1].file_id)
@dp.message_handler(content_types=types.ContentType.ANY)
async def handle_media_group(message: types.Message):
"""Обработчик для завершения группы медиафайлов."""
media_group_id = message.media_group_id
if media_group_id and media_group_id in media_groups:
# Отправляем группу фотографий администратору
group_data = media_groups[media_group_id]
album = MediaGroup()
for photo in group_data['photos']:
album.attach_photo(photo)
await bot.send_media_group(ADMIN_CHAT_ID, media=album)
# Удаляем группу из временного хранилища
del media_groups[media_group_id]
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)