Как скачать аватарку пользователя telegram с помощью бота?
Пишу с помощью библиотеки 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()