Telegram Bot 串接 qBittorrent,自動下載種子並上傳到 Telegram + Cloudflare R2 + Filebin + Stream 直鏈。
- 傳送
.torrent檔案、磁力鏈結或 URL 給 Bot,自動加入 qBittorrent 下載 - 下載進度即時更新(每 15 秒編輯訊息 + 進度條)
- 影片超過 2GB 自動 ffmpeg 切片(-c copy,不重新編碼)
- 非影片超過 2GB 自動 zip 分割
- 上傳到指定群組,原訊息顯示檔案超連結清單
- 可選上傳到 Cloudflare R2(24hr presigned URL)
- 可選上傳到 Filebin(免費空間)
- 可選 Stream 直鏈(MTProto 即時串流,零本地快取)
- 多影片自動產生 m3u8 播放列表
- 平行上傳(6 concurrent)
/status查看下載進度/list互動式任務列表(點按查看詳情/操作)/disk查看磁碟剩餘空間- 每日自動更新 tracker 列表
- 檔案 / qB 任務預設閒置超過 3 天自動清理
- MoviePilot 入庫空間不足時改採逐檔搬入,待上一個檔案被取走後再繼續
- 可選 WireGuard VPN(僅 qB 流量走 VPN tunnel)
User (Telegram)
│
▼
[Telegram Bot API Server] ← 支援 2GB 上傳
│
▼
[Bot Container (TypeScript + ffmpeg)]
├──► [qBittorrent] → 下載
├──► Monitor (輪詢進度)
├──► Pipeline (ffmpeg 切片 / zip 分割)
├──► Upload → Telegram (群組 + 訊息連結)
├──► Upload → R2 / Filebin (背景上傳)
└──► Stream URL → 直接從 TG 雲端串流
[Stream Server (Go + MTProto)]
├──► 收到 HTTP 請求
├──► MTProto → Telegram DC → upload.getFile
└──► Block-by-block 串流到客戶端(支援 Range)
cp .env.example .env
# 編輯 .env 填入設定
docker compose up -dStream server 是獨立的 Go 容器,透過 MTProto 直接從 Telegram 雲端串流檔案。完全無狀態、零本地快取。
URL 格式:/stream/{chat_id}/{message_id}/{filename}?hash=xxx
所有資訊編碼在 URL 裡,HMAC-SHA256 防篡改。stream server 只需要:
- Telegram Bot Token + API credentials(連接 MTProto)
- 與 bot 共用的
STREAM_SECRET
已包含在 docker-compose.yml 中,設定 STREAM_HOST 即啟用。
docker compose -f docker-compose.stream.yml up -dCLOUDFLARED_TOKEN=your-token docker compose -f docker-compose.stream.yml --profile tunnel up -dSTREAM_HOST 設為 tunnel domain(如 https://stream.yourdomain.com)。
只讓 qBittorrent 走 WireGuard VPN tunnel,bot 和 telegram-bot-api 走正常網路。
┌─────────────────────────────────────┐
│ wireguard (VPN tunnel) │
│ └── qbittorrent (network_mode) │ ← 只有 torrent 流量走 VPN
│ port 6891 exposed via wg │
└────────────┬────────────────────────┘
│ Docker internal network
┌────────────┴────────────────────────┐
│ bot ──→ wireguard:8080 (qB WebUI) │ ← 正常網路
│ telegram-bot-api ──→ Telegram API │
│ stream ──→ Telegram DC (MTProto) │
│ qb-proxy ──→ 8080 (外部 WebUI) │
│ stream-proxy ──→ 8082 (外部串流) │
└─────────────────────────────────────┘
# 1. 複製並編輯 WireGuard 設定
cp data/wireguard/wg0.conf.example data/wireguard/wg0.conf
# 2. 啟動
docker compose -f docker-compose.yml -f docker-compose.vpn.yml up -d| 變數 | 說明 |
|---|---|
BOT_TOKEN |
Telegram Bot Token |
TELEGRAM_API_ID |
從 https://my.telegram.org 取得 |
TELEGRAM_API_HASH |
從 https://my.telegram.org 取得 |
ALLOWED_USER_IDS |
允許使用的 Telegram User ID(逗號分隔) |
ALLOWED_CHAT_IDS |
允許使用的群組 Chat ID(逗號分隔) |
UPLOAD_CHAT_ID |
檔案上傳目標群組 ID |
QB_HOST |
qBittorrent 主機(預設 localhost) |
QB_PORT |
qBittorrent Web UI 埠(預設 8080) |
QB_USERNAME |
qBittorrent 帳號(預設 admin) |
QB_PASSWORD |
qBittorrent 密碼 |
R2_ACCOUNT_ID |
Cloudflare Account ID |
R2_ACCESS_KEY_ID |
R2 Access Key |
R2_SECRET_ACCESS_KEY |
R2 Secret Key |
R2_BUCKET_NAME |
R2 Bucket 名稱 |
R2_PUBLIC_URL |
R2 公開 URL(選填) |
LIBRARY_PATH |
MoviePilot 入庫監控目錄(選填) |
STREAM_HOST |
Stream server 公開 URL(如 http://ip:8082) |
STREAM_SECRET |
Stream URL 簽名密鑰(bot 與 stream 共用) |
STREAM_API_KEY |
Stream API key(選填) |
SPLIT_TARGET_SIZE_MB |
分割大小上限(預設 1950 MB) |
CLEANUP_MAX_AGE_HOURS |
檔案閒置後自動清理時間(預設 72 小時/3 天) |
CLEANUP_INTERVAL_MINUTES |
清理檢查間隔(預設 5 分鐘) |
在 Cloudflare Dashboard 的 R2 Bucket 設定 Lifecycle Rule:
- 條件:所有物件
- 動作:1 天後刪除
cd bot
npm install
npm run devMIT