Как можно загрузить альбом фотографий в pyTelegramBotApi?

Как можно настроить бота, чтобы он мог принимать и отправлять вам фотографии в ответ, если с одним фото он уже правильно работает?
  • 27 мая 2024 г. 10:41
Ответы на вопрос 2
Для загрузки альбома фотографий в pyTelegramBotApi можно воспользоваться методом send_media_group. Вот пример кода:

```python
from telebot import TeleBot, types

bot = TeleBot("your_bot_token")

album = types.MediaGroup()
album.attach_photo(open("photo1.jpg", "rb"), caption="Photo 1")
album.attach_photo(open("photo2.jpg", "rb"), caption="Photo 2")
album.attach_photo(open("photo3.jpg", "rb"), caption="Photo 3")

bot.send_media_group(chat_id, album)
```

Чтобы настроить бота для приема и отправки альбома фотографий, необходимо добавить обработчик для сообщений с типом "photo" и настроить логику отправки альбома в ответ. Вот пример кода:

```python
@bot.message_handler(content_types=['photo'])
def handle_photos(message):
    album = types.MediaGroup()
    for photo in message.photo:
        album.attach_photo(photo.file_id)
    bot.send_media_group(message.chat.id, album)

@bot.message_handler(func=lambda message: True)
def handle_message(message):
    bot.send_message(message.chat.id, "Send me a photo")

bot.polling()
```

Этот код будет обрабатывать сообщения с фотографиями, создавать из них альбом и отправлять в ответ. В случае, если приходит сообщение с другим типом контента, бот просто отправляет запрос на отправку фотографии.
import os
photo_file_id = []
num = 1
@bot.message_handler(content_types=['photo', 'text'])
def handler_file(message):
    user_id = message.from_user.id
    data = 1 #Количество фотографий для загрузки
    global num
    num = 1 #Название фотографии
    media = []
    photos = message.photo[-1]
    photo_file_id.append(photos.file_id) #Добавляем file_id фотографии для скачивания
    bot.send_message(user_id, f"Загружено {len(photo_file_id)}/{data} фото \nОсталось загрузить {int(data) - len(photo_file_id)} фото")

     if len(photo_file_id) == int(data): #Скачивание всех фотографий начнётся когда количество значений в массиве photo_file_id будет равно количеству фотографий
        Path(f'files/{user_id}}').mkdir(parents=True, exist_ok=True)
        for photo in photo_file_id:
            try:
                file_id = photo
                file_name = f"files/{user_id}/{num}.jpg"
                download_photo(file_id, file_name)
                pic = open(file_name, "rb")
                media.append(pic)
                num += 1
            except Exception as e:
                print(e)
            num = 1
            bot.send_message(user_id, "Все фотографии загружены, спасибо!")
            #Здесь можно добавить свою логику для отправки сообщений самому главному например:
            creators = [] #Тут будут условно id самых главных
            for i in creators:
                bot.send_media_group(i, media)
            os.rmdir(f"files/{user_id}") #В конце удаляем папку чтобы при следующем скачивании не было ошибок
Похожие вопросы