Cara Kerja yang Akan Dibuat

File di S3 kamu

Bot Telegram upload langsung dari URL (wget)

Tersimpan di Server Telegram

Kapanpun butuh, tinggal cari di chat bot

Langkah 1 – Buat Bot Telegram

1. Buka Telegram -> cari @BotFather
2. Ketik /newbot
3. Isi nama bot
4. Isi username bot (harus diakhiri 'bot')
5. Dapat TOKEN -> simpan!

Contoh token:
1234567890:ABCdefGHIjklMNOpqrsTUVwxyz

Langkah 2 – Dapat Chat ID Kamu

1. Cari @userinfobot di Telegram
2. Start -> langsung dapat ID kamu
3. Simpan ID tersebut

Contoh: 987654321
  

Langkah 3 – Script Bot (Python)

pip install python-telegram-bot requests

Buat file storage_bot.py:

import os
import requests
import subprocess
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

TOKEN = "ISI_TOKEN_BOT_KAMU"
OWNER_ID = 987654321  # Ganti dengan chat ID kamu
DOWNLOAD_DIR = "./temp_downloads"

os.makedirs(DOWNLOAD_DIR, exist_ok=True)

# Cek apakah yang akses adalah owner
def is_owner(update: Update) -> bool:
    return update.effective_user.id == OWNER_ID

# Command /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not is_owner(update):
        return
    await update.message.reply_text(
        "🤖 Bot Storage Pribadi\n\n"
        "Perintah:\n"
        "/upload [URL] - Upload file dari URL\n"
        "/help - Bantuan"
    )

# Command /upload dari URL
async def upload_from_url(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not is_owner(update):
        return
    
    if not context.args:
        await update.message.reply_text("❌ Format: /upload [URL]")
        return
    
    url = context.args[0]
    
    # Ambil nama file dari URL
    filename = url.split("/")[-1].split("?")[0]
    filepath = os.path.join(DOWNLOAD_DIR, filename)
    
    msg = await update.message.reply_text(f"⏳ Downloading: {filename}")
    
    try:
        # Download file dari URL (S3 kamu)
        subprocess.run(["wget", "-O", filepath, url], check=True)
        
        await msg.edit_text(f"📤 Uploading ke Telegram: {filename}")
        
        # Kirim ke Telegram berdasarkan tipe file
        ext = filename.lower().split(".")[-1]
        
        with open(filepath, "rb") as f:
            if ext in ["mp4", "mkv", "avi", "mov", "ts"]:
                await update.message.reply_video(
                    video=f,
                    filename=filename,
                    caption=f"✅ {filename}"
                )
            elif ext in ["mp3", "m4a", "aac", "flac"]:
                await update.message.reply_audio(
                    audio=f,
                    filename=filename,
                    caption=f"✅ {filename}"
                )
            elif ext in ["jpg", "jpeg", "png", "gif"]:
                await update.message.reply_photo(
                    photo=f,
                    caption=f"✅ {filename}"
                )
            else:
                await update.message.reply_document(
                    document=f,
                    filename=filename,
                    caption=f"✅ {filename}"
                )
        
        # Hapus file temp setelah upload
        os.remove(filepath)
        await msg.edit_text(f"✅ Selesai: {filename}")
        
    except Exception as e:
        await msg.edit_text(f"❌ Error: {str(e)}")
        if os.path.exists(filepath):
            os.remove(filepath)

# Upload multiple URL sekaligus
async def upload_batch(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not is_owner(update):
        return
    
    if not context.args:
        await update.message.reply_text(
            "❌ Format:\n/batch url1 url2 url3"
        )
        return
    
    urls = context.args
    await update.message.reply_text(f"⏳ Memproses {len(urls)} file...")
    
    for url in urls:
        context.args = [url]
        await upload_from_url(update, context)

async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not is_owner(update):
        return
    await update.message.reply_text(
        "📖 Cara Pakai:\n\n"
        "Upload 1 file:\n"
        "/upload https://s3.amazonaws.com/bucket/file.mp4\n\n"
        "Upload banyak file:\n"
        "/batch url1 url2 url3\n\n"
        "💡 File tersimpan di chat ini\n"
        "🔍 Gunakan search Telegram untuk cari file"
    )

def main():
    app = Application.builder().token(TOKEN).build()
    
    app.add_handler(CommandHandler("start", start))
    app.add_handler(CommandHandler("upload", upload_from_url))
    app.add_handler(CommandHandler("batch", upload_batch))
    app.add_handler(CommandHandler("help", help_command))
    
    print("Bot berjalan...")
    app.run_polling()

if __name__ == "__main__":
    main()

Langkah 4 – Jalankan Bot

python storage_bot.py

Cara Pakai

# Upload 1 file dari S3
/upload https://s3.amazonaws.com/bucketmu/video1.mp4

# Upload banyak sekaligus
/batch https://s3.amazonaws.com/bucketmu/video1.mp4 \
       https://s3.amazonaws.com/bucketmu/video2.mp4

# Cari file yang sudah diupload
Gunakan fitur Search di Telegram
Ketik nama file -> langsung ketemu

Tips Penting

📌 Simpan semua file di "Saved Messages"
   supaya mudah dicari

🔍 Search Telegram sangat powerful
   bisa cari berdasarkan nama file

⚠️  Batas 2GB per file (free)
    Lebih dari itu perlu Premium (4GB)

🚀 Jalankan bot di VPS supaya
   tidak perlu PC selalu nyala

Mau Lebih Praktis?

Jika bot dijalankan di VPS yang sama dengan S3/storage, proses download->upload lebih cepat karena tidak perlu lewat internet lokal kamu

Kamu pakai S3 provider mana? AWS, Cloudflare R2, atau lainnya? Bisa saya sesuaikan script untuk akses langsung tanpa URL publik 😊