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

У меня есть два файла: bot.py и database.py. В целом, программа работает корректно, и я могу отправить по одной фотографии или видео. Однако при попытке отправить сразу две фотографии программа выдает ошибку и останавливается. Что можно сделать в этой ситуации? 

Вот код для обработки сообщений: 
<pre><code class="python">@bot.message_handler(content_types=['sticker', 'voice', 'photo', 'video', 'video_note'])
def handle_media(message):
    if message.chat.type == 'private':
        chat_info = db.get_active_chat(message.chat.id)

        if chat_info is not False:
            if message.content_type == 'sticker':
                bot.send_sticker(chat_info[1], message.sticker.file_id)

            elif message.content_type == 'voice':
                bot.send_voice(chat_info[1], message.voice.file_id)

            elif message.content_type == 'photo':
                photo_id = message.photo[-1].file_id  # Берем файл с максимальным качеством
                bot.send_photo(chat_info[1], photo_id, caption=message.caption or message.text)

            elif message.content_type == 'video':
                file_id = message.video.file_id
                bot.send_video(chat_info[1], file_id, caption=message.caption or message.text)

            elif message.content_type == 'video_note':
                file_id = message.video_note.file_id
                bot.send_video_note(chat_info[1], file_id)
        else:
            bot.send_message(message.chat.id, sms.no_sms)</code></pre>

Здесь также имеется код из database.py: 
<pre><code class="python">def get_active_chat(self, chat_id):
        with self.connection:
            # Пытаемся найти чат по chat_one
            chat = self.cursor.execute("SELECT * FROM `chats` WHERE `chat_one` = ?", (chat_id,)).fetchone()</code></pre>
  • 15 октября 2024 г. 11:23
Ответы на вопрос 1
Для отправки нескольких фотографий и видео с помощью библиотеки Telebot (pyTelegramBotAPI), вам нужно использовать метод `send_media_group`, который позволяет отправлять группу медиа (фото или видео) в одном сообщении. Ответ на вашу проблему заключается в том, чтобы заменить отправку одной фотографии или видео на отправку через этот метод.

Я приведу пример того, как вы можете изменить ваш код для обработки фотографий и видео, чтобы отправлять несколько файлов одновременно. Для этого вам нужно будет обрабатывать список медиафайлов и передавать его методу `send_media_group`.

Вот пример того, как вы можете изменить ваш обработчик:

```python
from telebot import types

@bot.message_handler(content_types=['sticker', 'voice', 'photo', 'video', 'video_note'])
def handle_media(message):
    if message.chat.type == 'private':
        chat_info = db.get_active_chat(message.chat.id)

        if chat_info is not False:
            if message.content_type == 'sticker':
                bot.send_sticker(chat_info[1], message.sticker.file_id)

            elif message.content_type == 'voice':
                bot.send_voice(chat_info[1], message.voice.file_id)

            elif message.content_type == 'photo':
                media = []
                # Получаем только фотографии, чтобы отправить их в группе
                for photo in message.photo:
                    media.append(types.InputMediaPhoto(photo.file_id, caption=message.caption or message.text))

                if media:
                    bot.send_media_group(chat_info[1], media)

            elif message.content_type == 'video':
                media = []
                # Если есть видео, отправляем его как часть группы
                media.append(types.InputMediaVideo(message.video.file_id, caption=message.caption or message.text))
                
                if media:
                    bot.send_media_group(chat_info[1], media)

            elif message.content_type == 'video_note':
                media = []
                media.append(types.InputMediaVideoNote(message.video_note.file_id))
                
                if media:
                    bot.send_media_group(chat_info[1], media)

        else:
            bot.send_message(message.chat.id, sms.no_sms)
```

Обратите внимание на следующие изменения:
1. Для обработки фотографий и видео теперь создается список `media`, который будет содержать все медиафайлы.
2. Вместо простого вызова `bot.send_photo` или `bot.send_video` в случае нескольких файлов используется `bot.send_media_group`, с передачей списка файлов в качестве аргумента.

Таким образом, теперь вы сможете отправлять несколько фотографий и видео одновременно. Если у вас возникнут какие-то исключения или ошибки в процессе, то стоит их отлавливать и обрабатывать, чтобы программа не останавливалась.
Похожие вопросы