mirror of
https://github.com/complexcaresolutions/telegram-media-bot.git
synced 2026-03-17 15:03:42 +00:00
98 lines
2.9 KiB
Markdown
98 lines
2.9 KiB
Markdown
# 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
|
|
```
|