# Telegram Media Upload Bot Telegram Bot zum Hochladen von Bildern in die Payload CMS Media-Bibliothek mit Multi-Tenant-Unterstützung. ## Features - Bilder als Foto oder Dokument (Originalqualität) hochladen - Album/Bulk-Upload (bis zu 10 Bilder) - Multi-Tenant: Ziel-Tenant per Inline-Keyboard wählen - Automatische Bildverarbeitung (responsive Größen) durch Payload CMS - User-Whitelist (nur autorisierte Telegram-User) - Rate-Limiting (10 Uploads/Minute pro User) - Token-Caching mit Auto-Refresh ## Setup ```bash # Dependencies installieren pnpm install # .env konfigurieren cp .env.example .env # → Werte in .env eintragen (Bot-Token, Payload-Credentials, User-IDs) ``` ### Telegram Bot erstellen 1. @BotFather in Telegram öffnen 2. `/newbot` senden 3. Token in `.env` als `TELEGRAM_BOT_TOKEN` eintragen 4. Eigene Telegram User-ID in `ALLOWED_USER_IDS` eintragen 5. Optional: `/setcommands` beim BotFather: ``` start - Bot starten und Hilfe anzeigen tenant - Ziel-Tenant wechseln list - Letzte Uploads anzeigen status - Bot- und API-Status prüfen help - Ausführliche Hilfe ``` ## Entwicklung ```bash pnpm dev # tsx watch mode pnpm lint # TypeScript check pnpm build # Kompilieren nach dist/ ``` ## Production ```bash pnpm build pm2 start ecosystem.config.cjs pm2 save pm2 logs telegram-media-bot ``` ## Bot-Befehle | Befehl | Beschreibung | |--------|-------------| | `/start` | Begrüßung und Kurzanleitung | | `/tenant` | Ziel-Tenant wechseln | | `/list` | Letzte 5 Uploads anzeigen | | `/status` | Bot- und API-Status | | `/help` | Ausführliche Hilfe | ## Umgebungsvariablen | Variable | Pflicht | Beschreibung | |----------|---------|-------------| | `TELEGRAM_BOT_TOKEN` | Ja | Bot-Token von @BotFather | | `ALLOWED_USER_IDS` | Ja | Kommaseparierte Telegram User-IDs | | `PAYLOAD_API_URL` | Ja | Payload API URL (z.B. `https://cms.c2sgmbh.de/api`) | | `PAYLOAD_ADMIN_EMAIL` | Ja | Payload Admin E-Mail | | `PAYLOAD_ADMIN_PASSWORD` | Ja | Payload Admin Passwort | | `DEFAULT_TENANT_ID` | Nein | Standard-Tenant (Default: 4) | | `LOG_LEVEL` | Nein | Log-Level: debug, info, warn, error (Default: info) | | `NODE_ENV` | Nein | Environment (Default: development) | ## Architektur ``` src/ ├── index.ts # Entry Point ├── bot.ts # Grammy Bot + Session + Rate-Limiting ├── config.ts # Typisierte Konfiguration ├── payload/ │ └── client.ts # Payload API Client (Login, Upload, Token-Caching) ├── telegram/ │ ├── handlers.ts # Alle Message- und Command-Handler │ └── keyboards.ts # Inline Keyboards (Tenant-Auswahl) ├── middleware/ │ └── auth.ts # User-Whitelist Middleware └── utils/ ├── logger.ts # Console Logger mit Levels └── download.ts # File Download Helper ```