DEV Community

guardlabs_team
guardlabs_team

Posted on Originally published at guardlabs.online

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

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

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

Вариант 1: Стандартный Telegram-бот (ограничение до 20 МБ)
Этот метод оптимален, если файлы отправляются пользователями напрямую боту или бот добавлен в качестве администратора в исходный чат. Мы используем библиотеку pyTelegramBotAPI (telebot).

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

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

Установите библиотеку через терминал:
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
Enter fullscreen mode Exit fullscreen mode

Need this done fast? order it on Kwork.

Top comments (0)