Как обойти ограничение в 50 МБ на отправку видео через Telegram бота в telebot

Бот должен загружать видео на сервер, после действия пользователя и отправить его пользователю, но столкнулся с ошибкой из-за превышения лимита. Я видел руководство, где говорится о том, как обойти это ограничение с использованием file_id для больших файлов. Как можно реализовать это на практике?

try:
    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        ydl.download([link])

        if os.path.exists(video_path):
            video_file = open(video_path, 'rb')
            bot.delete_message(callback_query.message.chat.id, callback_query.message.id)
            bot.send_video(callback_query.message.chat.id, video_file)
            video_file.close()
except yt_dlp.utils.DownloadError as e:
    print(f"DownloadError: {e}")
    bot.answer_callback_query(callback_query.id, text='Доступ к видео ограничен')
except Exception as e:
    print(f"Exception: {e}")
    bot.answer_callback_query(callback_query.id, text='Не удалось скачать видео')
finally:
    if os.path.exists(video_path):
        os.remove(video_path)

Ответы (2 шт):

Автор решения: Amgarak

Что бы отправить файлы большого размера(больше 50 мб):

  1. Останавливаем бота.
  2. Сами отправляем боту нужный файл большого размера, через сообщения.
  3. После загрузки файла вбиваем в браузер https://api.telegram.org/bot<ваш_токен>/getUpdates
  4. Ищем словарь "document"
  5. Нас интересует строка формата "file_id":"BQACAgIAAxkBAAOnZa_KdOYkK6AvlXhetbUnXG-AiWcAAuc4AAIjWYFJUokbePqOh840BA" - копируем id файла.
max_size_description = "big file" 
file ='BQACAgIAAxkBAAOnZa_KdOYkK6AvlXhetbUnXG-AiWcAAuc4AAIjWYFJUokbePqOh840BA'
bot.send_document(chat_id=chat_id, document=file, caption=max_size_description)

Через Telebot:

import telebot

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

@bot.message_handler(content_types=['document', 'video', 'audio', 'photo'])
def handle_files(message):
    # Получаем ID файла
    file_id = None

    if message.document:
        file_id = message.document.file_id
    elif message.video:
        file_id = message.video.file_id
    elif message.audio:
        file_id = message.audio.file_id
    elif message.photo:
        file_id = message.photo[0].file_id

    if file_id:
        print(f"File ID: {file_id}")
        # Отправляем ответом полученный file_id
        bot.send_message(message.chat.id, f"File ID: {file_id}")
    else:
        bot.send_message(message.chat.id, "Error file_id")

bot.polling(none_stop=True)
→ Ссылка
Автор решения: CausonQ

file_id присваивается файлу со стороны Telegram, который был загружен к ним на сервера. Когда пользователь отправляет файл боту, ему присваивается file_id. В этом случае, это файл бот может пересылать неограниченные количество раз и без лимитов по размеру файла.

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

Телеграм же предлагает решение снятия этих лимитов - Using a Local Bot API Server

If you switch to a local Bot API server, your bot will be able to:

Download files without a size limit. Upload files up to 2000 MB. Upload files using their local path and the file URI scheme. Use an HTTP URL for the webhook. Use any local IP address for the webhook. Use any port for the webhook. Set max_webhook_connections up to 100000. Receive the absolute local path as a value of the file_path field without the need to download the file after a getFile request.

Устанавливаете local Bot API и все, у вас не будет ограничений на размер загружаемого и отправляемого файла

→ Ссылка