Автоматическое скачивание и пересылка файлов через 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.
Need help with this?
I take on freelance fixes and builds in this area.