Как скачать аватарку пользователя telegram с помощью бота?

Рейтинг: 0Ответов: 1Опубликовано: 28.04.2023

Пишу с помощью библиотеки telebot

Моя задача получить аватарку пользователя через телеграмм-бота и скачать её для дальнейшей обработки в библиотеке Pillow (я это уточняю на случай, если есть возможность как-то интегрировать эти библиотеки)

У меня есть тестовый код, который работает для скачивания отправленной пользователем фотографии, только я попытался адаптировать её для скачивания его аватарки.

Я вывел данные фотографии профиля пользователя и получил это:

{'file_id': 'какой-то id', 'file_unique_id': 'AQAD68oxG4vJoEkB', 'width': 640, 'height': 640, 'file_size': 66835}.

Как видно, здесь нету нужного мне параметра file_path, необходимого для скачивания.

Если кто знает, подскажите, возможно ли вообще сделать то, что я задумал? Если есть возможность сделать это, используя другую библиотеку для telegramm бота, то я готов её сменить.

Вот мой код:

import telebot
from random import randint as r
from telebot import types
from PIL import Image, ImageDraw, ImageFont
import os

token='TOKEN'
bot=telebot.TeleBot(token)


@bot.message_handler(content_types=['text', 'photo'])
def handle_docs_document(message):

    file_photo = bot.get_user_profile_photos(message.from_user.id)
    print(file_photo.photos[0][2])
    file_name, file_extension = os.path.splitext(file_photo.file_path)

    downloaded_file = bot.download_file(file_photo.file_path)

    src = 'photos/' + message.photo[-1].file_id + '.jpg'
    with open(src, 'wb') as new_file:
        new_file.write(downloaded_file)

bot.infinity_polling()

Ответы

▲ 1Принят

чтобы сохранить аватарку из get_user_profile_photos к себе на комп, можно так поступить. После того как получили объект аватарок, заберем из него id самой актуальной фотографии, а затем через get_file и download_file сохраним фотографию себе в систему.

import telebot

# токен
bot = telebot.TeleBot("ТВОЙТОКЕН")

# дефайним /start
@bot.message_handler(commands=['start'])
def send_avatar(message):
    # Получаем ID чата пользователя
    chat_id = message.chat.id

    # Получаем фотографии профиля
    photos = bot.get_user_profile_photos(chat_id)

    # Получаем ID фотографии профиля
    photo_id = photos.photos[0][-1].file_id

    # Скачиваем фото на локальную систему
    file_info = bot.get_file(photo_id)
    file = bot.download_file(file_info.file_path)

    # Сохраняем файл на хосте
    with open('avatar.jpg', 'wb') as f:
        f.write(file)

    # фидбэчим пользователю.
    bot.reply_to(message, "твоя ватарка сохранена")
    
bot.polling()