Как обойти ограничение в 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 шт):
Что бы отправить файлы большого размера(больше 50 мб):
- Останавливаем бота.
- Сами отправляем боту нужный файл большого размера, через сообщения.
- После загрузки файла вбиваем в браузер https://api.telegram.org/bot<ваш_токен>/getUpdates
- Ищем словарь
"document"
- Нас интересует строка формата
"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)
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 и все, у вас не будет ограничений на размер загружаемого и отправляемого файла