docs: add README with setup and deployment instructions

This commit is contained in:
Martin Porwoll 2026-03-01 09:27:13 +00:00
parent 412175030a
commit 22e9a59e2e

98
README.md Normal file
View file

@ -0,0 +1,98 @@
# 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
```