Как можно отправить несколько фотографий с помощью телеграм-бота?

Всем привет! <br/> Помогите, пожалуйста, разобраться в проблеме. У меня есть бот, в котором менеджер должен отправлять фото админу для проверки, но вместо этого отправляется только одно фото, и оно повторяется 4 раза. Не могу понять, в чем ошибка и что я упустил. <br/> Буду благодарен за помощь! <br/> <br/> <pre><code class="python">def process_photo(message, task_id, manager_chat_id):
    """
    Обрабатывает полученную медиагруппу (фото) и пересылает их администраторам.
    """
    try:
        # Логируем объект message
        logger.debug(f"Полученное сообщение: {message}")

        # Получаем список администраторов
        admins = CustomUser.objects.filter(status='admin')

        # Если это медиагруппа
        if hasattr(message, 'media_group') and message.media_group:
            media = []

            # Собираем фото из медиагруппы
            for idx, media_item in enumerate(message.media_group):
                if media_item.media_type == 'photo':
                    media_item_data = {
                        'type': 'photo',
                        'media': media_item.file_id,
                    }
                    # Если это первое фото, добавляем caption
                    if idx == 0:
                        media_item_data['caption'] = 'Ваш текст здесь'
                    media.append(media_item_data)

            # Логируем медиагруппу
            logger.debug(f"Медиагруппа для отправки: {media}")

            # Отправляем медиагруппу администраторам
            for admin in admins:
                if media:
                    bot.send_media_group(admin.telegram_id, media)
                    sleep(1)

            bot.send_message(manager_chat_id, "Медиагруппа отправлена админам.")
  • 8 ноября 2024 г. 21:43
Ответы на вопрос 2
Судя по вашему коду, проблема может заключаться в том, как вы обрабатываете медиагруппу. В зависимости от используемой библиотеки для работы с Telegram API (например, `python-telegram-bot` или `telebot`), способ получения и отправки медиагрупп может отличаться.

Ваш код пытается собрать медиагруппу из `message.media_group`, но обработка медиагрупп в Telegram может потребовать несколько иного подхода. Вместо того чтобы собирать `file_id` из медиагруппы, следует работать с объектами сообщения правильно.

Вот корректированный пример, который может помочь вам исправить ситуацию:

```python
def process_photo(message, task_id, manager_chat_id):
    """
    Обрабатывает полученную медиагруппу (фото) и пересылает их администраторам.
    """
    try:
        # Логируем объект message
        logger.debug(f"Полученное сообщение: {message}")

        # Получаем список администраторов
        admins = CustomUser.objects.filter(status='admin')

        # Если это медиагруппа
        if hasattr(message, 'media_group') and message.media_group:
            media = []

            # Собираем фото из медиагруппы
            for idx, media_item in enumerate(message.media_group):
                if media_item.media_type == 'photo':
                    media_item_data = media_item.media # Используем сам объект медиапредставления
                    # Если это первое фото, добавляем caption
                    if idx == 0:
                        media.append((media_item_data.file_id, 'Ваш текст здесь'))
                    else:
                        media.append(media_item_data.file_id)

            # Логируем медиагруппу
            logger.debug(f"Медиагруппа для отправки: {media}")

            # Отправляем медиагруппу администраторам
            for admin in admins:
                if media:
                    bot.send_media_group(admin.telegram_id, media)
                    sleep(1)

            bot.send_message(manager_chat_id, "Медиагруппа отправлена админам.")

    except Exception as e:
        logger.error(f"Ошибка при обработке фото: {e}")
```

Как вы можете заметить, здесь мы изменили подход к формированию списка `media`. Мы используем `media_item.media`, чтобы получить нужное относительное представление медиаконтента. Кроме того, мы добавляем caption только к первому элементу и добавляем только `file_id` для остальных, когда это необходимо.

Пожалуйста, протестируйте этот код и проверьте, решит ли он вашу проблему. Убедитесь также, что вы используете правильные параметры для отправки группы медиафайлов в зависимости от используемой библиотеки Telegram.
Накосячил в том, что не читал документацию API телеграма, не разбирался, а притащил сюда бред от чатжпт и хочешь, чтобы за тебя разбирались.
Похожие вопросы