GUARDLABS
GuardLabs · Technical note

Автоматическое скачивание и пересылка файлов через Telegram-бота

Для автоматизации процесса скачивания и пересылки файлов в Telegram используются два основных подхода: стандартный Telegram Bot API (с ограничением на размер файлов) и MTProto API (юзерботы для работы с файлами любого размера). Ниже приведены готовые технические решения для обоих вариантов на языке Python.

Вариант 1: Стандартный Telegram-бот (ограничение до 20 МБ)

Этот метод оптимален, если файлы отправляются пользователями напрямую боту или бот добавлен в качестве администратора в исходный чат. Мы используем библиотеку pyTelegramBotAPI (telebot).

Предварительные требования

  • Установленный Python 3.8 или выше.
  • Токен бота, полученный у @BotFather.
  • ID целевого чата (канала или группы), куда будут пересылаться файлы.

Установите библиотеку через терминал:

pip install pyTelegramBotAPI

Код бота на Python

Создайте файл bot.py и добавьте следующий код:

import os
import telebot

BOT_TOKEN = 'ВАШ_ТОКЕН_БОТА'
TARGET_CHAT_ID = 'ID_ЦЕЛЕВОГО_ЧАТА'  # Например, -100123456789
DOWNLOAD_DIR = './downloads'

bot = telebot.TeleBot(BOT_TOKEN)

if not os.path.exists(DOWNLOAD_DIR):
    os.makedirs(DOWNLOAD_DIR)

@bot.message_handler(content_types=['document', 'audio', 'video', 'photo'])
def handle_incoming_files(message):
    try:
        # Определение типа медиафайла и получение file_id
        if message.content_type == 'document':
            file_info = bot.get_file(message.document.file_id)
            file_name = message.document.file_name
        elif message.content_type == 'audio':
            file_info = bot.get_file(message.audio.file_id)
            file_name = message.audio.file_name or f"audio_{message.audio.file_id}.mp3"
        elif message.content_type == 'video':
            file_info = bot.get_file(message.video.file_id)
            file_name = f"video_{message.video.file_id}.mp4"
        elif message.content_type == 'photo':
            file_info = bot.get_file(message.photo[-1].file_id)
            file_name = f"photo_{message.photo[-1].file_id}.jpg"
        else:
            return

        # Скачивание файла во временную директорию
        downloaded_file = bot.download_file(file_info.file_path)
        local_path = os.path.join(DOWNLOAD_DIR, file_name)
        
        with open(local_path, 'wb') as new_file:
            new_file.write(downloaded_file)
        
        print(f"Файл успешно скачан локально: {local_path}")

        # Автоматическая пересылка в целевой чат
        with open(local_path, 'rb') as file_to_send:
            bot.send_document(TARGET_CHAT_ID, file_to_send, caption=f"Авто-пересылка: {file_name}")
        
        print(f"Файл отправлен в чат {TARGET_CHAT_ID}")

    except Exception as e

Need this done fast? order it on Kwork.

Опубликовано 2026-06-23 1 мин чтения Все статьи EN / RU / ES
Need help with this?

I take on freelance fixes and builds in this area.