Как загружать большие файлы в телеграмм бота с помощью aiogram 3.x.x

от автора

В наше время Telegram стал одной из самых популярных платформ для общения и обмена информацией. В связи с этим, разработка ботов для Telegram также стала востребованным направлением. Одним из важных аспектов работы с ботами является возможность загрузки и обработки больших файлов.

В этой статье мы рассмотрим, как организовать работу с большими файлами в Telegram-ботах, используя фреймворк aiogram 3.x.x, и как можно развернуть локальный сервер для тестирования и разработки бота. Так же приведу пример простейшего телеграмм бота.

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

Чтобы обойти данное ограничение можно использовав telegram bot api создав локальный сервер. На нём уже можно будет загружать и отправлять файлы до 2 гб.

Для начала нужно установить telegram-bot-api. Универсальная инструкция по его установке представлена на сайте: ссылка

Для мака удобнее пользоваться следующей инструкцией:

git clone https://github.com/tdlib/telegram-bot-api.git cd telegram-bot-api mkdir build cd build cmake .. cmake --build .

Возможные проблемы на данном этапе:

1)

build git:(master) cmake .. zsh: command not found: cmake

Решение:

Нужно установить cmake, для мака удобнее всего это установить его через brew:

brew install cmake

Для Ubuntu/Debian используем эти команды:

sudo apt-get update sudo apt-get install cmake

2)

build git:(master) cmake .. CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):   Compatibility with CMake < 3.5 will be removed from a future version of   CMake.    Update the VERSION argument <min> value or use a ...<max> suffix to tell   CMake that the project does not need compatibility with older versions.   -- The CXX compiler identification is AppleClang 15.0.0.15000100 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done CMake Error at CMakeLists.txt:16 (add_subdirectory):   The source directory      /Users/aleksandrvolzanin/pet_project/more50/telegram-bot-api/td    does not contain a CMakeLists.txt file.   CMake Error at CMakeLists.txt:40 (include):   include could not find requested file:      PreventInSourceBuild   CMake Error at CMakeLists.txt:41 (prevent_in_source_build):   Unknown CMake command "prevent_in_source_build".   -- Configuring incomplete, errors occurred!

Решение:

Нужно установить подмодуль td.

git submodule init git submodule update

Далее для запуска локального сервера нам нужно зайти в папку build и там мы вводим команду:

./telegram-bot-api --local --api-id=<API-ID> --api-hash=<API-HASH>

Здесь вместо API-ID и API-Hash нужно ввести свои данные, их можно получить на сайте: ссылка

Если ваш терминал не показывает ошибки, то поздравляю, вы запустили свой локальный сервер для телеграмм бота.

Дальше будет код простейшего телеграмм бота, который просто скачивает аудио в папку у вас на компьютер:

import asyncio from aiogram import Bot, Dispatcher, F from aiogram.types import Message from aiogram.client.session.aiohttp import AiohttpSession from aiogram.client.telegram import TelegramAPIServer    API_TOKEN = '7488158267:AAH1KIiUd-OOFi8HakIDKZg8UMzrLzlWPaE' session = AiohttpSession(api=TelegramAPIServer.from_base("http://localhost:8081", is_local=True)) bot = Bot(token=API_TOKEN, session=session) dp = Dispatcher()  @dp.message(F.audio) async def send_audio(message: Message):      audio = message.audio     file_id = audio.file_id     file = await message.bot.get_file(file_id)      file_path = file.file_path     download_path = "/Users/aleksandrvolzanin/pet_project/more50/audio/audio_message.mp3"      await message.bot.download_file(file_path, download_path)      await message.answer("Ваше аудиосообщение принято")   async def main():     await dp.start_polling(bot)  if __name__ == "__main__":     asyncio.run(main()) 

Так же вам нужно будет в директории проекта создать папку audio.

После этого файл, в моём случае это запись лекции, которая весит 100+ мб, будет у вас скачан на компьютере, а вы увидите сообщение в телеграмм боте:

Ответ бота

Ответ бота
Иерархия файлов в проекте

Иерархия файлов в проекте

Если у вас не получается, то можете попробовать разлогиниться на сайте: https://api.telegram.org/bot<TOKEN>/logOut

<TOKEN> вам нужно заменить на токен вашего бота.

Вот и всё! Надеюсь вам понравилась статья, я решил её написать, потому что не увидел простого и понятного объяснения этой возможности телеграмм ботов.

Так же можете посмотреть официальный гит хаб репозиторий проекта: ссылка

Если у вас есть замечания или дополнения — обязательно пишите в комментарии, я постараюсь давать обратную связь и дополнять статью!


ссылка на оригинал статьи https://habr.com/ru/articles/840982/