Задать вопрос
@onlyholy

Как сделать отправку фото пользователя администратору?

Мне нужен бот-предложка, следующая проблема:

Не пойму как реализовать отправку фотографий? Мне нужно сделать так, чтобы бот мог отправлять как несколько фотографий в одной группе, так и одиночную фото. Я смог реализовать лишь то, чтобы бот мог передавать корректно 1 изображение, но как сделать группировку - не понял

(Я неопытен, вообще неопытен в этом)
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
rc-dm
@rc-dm
Full-Stack Web Developer
Когда пользователь отправляет несколько фотографий одним сообщением (альбомом), 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)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы