mirror of
https://github.com/complexcaresolutions/telegram-media-bot.git
synced 2026-03-17 13:53:41 +00:00
Telegram bot for uploading images to Payload CMS Media library (multi-tenant)
~ is strikethrough in MarkdownV2, so "~5m 46s" breaks parsing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| src | ||
| .env.example | ||
| .gitignore | ||
| ecosystem.config.cjs | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| tsconfig.json | ||
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
# Dependencies installieren
pnpm install
# .env konfigurieren
cp .env.example .env
# → Werte in .env eintragen (Bot-Token, Payload-Credentials, User-IDs)
Telegram Bot erstellen
- @BotFather in Telegram öffnen
/newbotsenden- Token in
.envalsTELEGRAM_BOT_TOKENeintragen - Eigene Telegram User-ID in
ALLOWED_USER_IDSeintragen - Optional:
/setcommandsbeim 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
pnpm dev # tsx watch mode
pnpm lint # TypeScript check
pnpm build # Kompilieren nach dist/
Production
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