Дорогие эксперты, столкнулся с проблемой при работе с Telegram-ботом. Перебрал множество документации, но не могу понять, в чем именно дело. Я сохраняю фото, отправленное пользователем, используя file_id и метод bot.get_file для получения ссылки на файл на серверах Telegram. Все работает: по ссылке можно перейти, и фото скачивается. Однако при попытке отправить это фото через ссылку с помощью bot.send_photo возникают проблемы. Пробовал использовать другие ссылки — всё отлично работает. Вот мой код: <br/> <pre><code>@bot.message_handler(content_types=['photo']) def photo_id(message): abc = message.photo[2].file_id # Выводим file_id file_info = bot.get_file(abc) abcvd = f'https://api.telegram.org/file/bot{token}/{file_info.file_path}' print(abcvd) bot.send_photo(message.chat.id, abcvd)</code></pre>
В вашем коде есть небольшая ошибка в использовании ссылки для отправки фотографии. Метод `send_photo` ожидает объект файла или сам файл, а не ссылку. Вместо того, чтобы отправлять ссылку на изображение, вы можете использовать метод `get_file` для получения файла и затем отправить его напрямую. Вот как вы можете это сделать: 1. Получите файл с помощью `get_file`. 2. Используйте `download_file` для загрузки файла на локальный диск или в память. 3. Отправьте файл с помощью `send_photo`. Пример исправленного кода: ```python import telebot import requests from io import BytesIO token = 'YOUR_BOT_TOKEN' bot = telebot.TeleBot(token) @bot.message_handler(content_types=['photo']) def photo_id(message): # Получаем file_id самого высокого качества (из списка message.photo) abc = message.photo[-1].file_id # Соответствующий file_id file_info = bot.get_file(abc) # Получаем URL для загрузки файла file_url = f'https://api.telegram.org/file/bot{token}/{file_info.file_path}' # Загружаем файл response = requests.get(file_url) # Отправляем фото обратно в чат bot.send_photo(message.chat.id, BytesIO(response.content)) # Запуск вашего бота bot.polling() ``` ### Объяснение: 1. **Получение файла**: Мы берем `file_id` из наибольшего качества (в вашем случае это последний элемент в `message.photo`). 2. **Загрузка файла**: Используем `requests.get` для получения файла по созданному URL. 3. **Отправка файла**: Из-за того, что мы загружаем файл как объект BytesIO, мы можем напрямую передать его в `send_photo`. Этот подход избавит вас от необходимости сохранять файл на диск, что делает обработку фото более быстрой и простой.
Как оказалось, в InputMediaPhoto можно передать просто file_id, и мучаться с ссылкой не стоит)