Пишу бота, который должен получать файлы от пользователя, обрабатывать их некоторым образом и отправлять обратно. Пока делал средствами telebot - все было нормально, но столкнулся с ограничением в 20 Мб на максимальный размер файла, а мне нужно 200-300 Мб. Посоветовали скачивать и отправлять файлы через telethon. Не получается, и не могу понять, что я делаю неправильно. Посоветуйте, как получить присланный пользователем файл и сохранить его на сервере с заданным именем. Упрощенный код бота:
from telethon.sync import TelegramClient
import os
import telebot
import config
from datetime import datetime
import asyncio
def get_or_create_eventloop():
try:
return asyncio.get_event_loop()
except RuntimeError as ex:
if "There is no current event loop in thread" in str(ex):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
return asyncio.get_event_loop()
bot = telebot.TeleBot(config.tg_bot_token)
client = TelegramClient(config.tt_number, config.tt_api_id, config.tt_api_hash)
assert client.start(phone=config.tt_number)
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, text="Привет!")
@bot.message_handler(content_types=["video"])
def handle_video(message):
bot.send_message(message.chat.id, 'неправильно, отправь видео как документ')
@bot.message_handler(content_types=["document"])
def handle_document(message):
bot.send_message(message.chat.id, 'Подожди немного...')
if message.document.file_size > 100 * 1000 * 1000:
bot.reply_to(message, "файл должен быть меньше 100 Мб")
return
file_info = bot.get_file(message.document.file_id)
src = os.path.join(config.videos_dir, str(message.from_user.id) + datetime.now().strftime("%d_%m_%Y_%H_%M_%S"))
ext = ".mp4"
in_name = src + ext
out_name = src + "_u" + ext
get_or_create_eventloop()
res = client.download_file(message.document, in_name)
##Тут будет некоторая обработка файла и сохранение его в out_name
with open(out_name, "rb") as file:
f = file.read()
client.send_file(file_info.file_id, f)
bot.polling(none_stop=True)