Backend Discord/API pour l'architecture LiveChat EXE-only.
Documentation projet: ../README.md
PRD: ../PRD.md
- Bot (ce dépôt): https://github.com/WardenPro/LiveChat-Bot
- Overlay desktop (Electron): https://github.com/SuperKn4cky/LiveChat-Overlay
- Extension navigateur (MV3): https://github.com/SuperKn4cky/LiveChat-Extension
- Reçoit les commandes Discord.
- Télécharge et normalise les médias (yt-dlp + ffmpeg).
- Met en cache les assets (TTL 12h).
- Expose les routes
/overlay/*. - Expose la route
/ingest(API simple pour raccourcis iOS). - Diffuse les événements socket vers les overlays appairés.
cp .env.example .env
pnpm install
pnpm devOption TikTok restreint (login requis):
TIKTOK_COOKIEpeut contenir un header cookie TikTok (name=value; name2=value2) pour tenter l'extraction avec un compte autorisé.
MEDIA_CACHE_MAX_TOTAL_MB=5120(5 Go): limite totale du cache non persistant.MEDIA_BOARD_MAX_TOTAL_MB=15360(15 Go): limite par serveur Discord pour la meme board persistante.
Créer d'abord un ingest client token dans /admin (section Create Ingest Client), puis appeler:
curl -X POST "$API_URL/ingest" \
-H "Authorization: Bearer $INGEST_CLIENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://vm.tiktok.com/ZNRfPWMaF/",
"text": "hello depuis iOS",
"forceRefresh": true
}'Payload minimal:
- au moins un de
url,media,text forceRefreshoptionnel (truepour ignorer le cache média et forcer re-download/re-transcode)guildId,authorName,authorImagesont liés au token ingest client et ne doivent pas être envoyés.
La normalisation loudness est activée par défaut pendant la transcode:
MEDIA_AUDIO_NORMALIZE_ENABLED=trueMEDIA_AUDIO_LOUDNORM_I=-18MEDIA_AUDIO_LOUDNORM_LRA=11MEDIA_AUDIO_LOUDNORM_TP=-1.5
GET /-> statut service minimalGET /health-> healthcheckGET /admin?token=<ADMIN_UI_TOKEN>-> panel admin local (token requis)
- Activer avec
ADMIN_UI_TOKENdans.env. ADMIN_UI_LOCAL_ONLY=true(défaut): accès limité loopback (127.0.0.1/::1).ADMIN_UI_LOCAL_ONLY=false: accès LAN autorisé (token toujours requis).- Le panel expose:
- guilds connues + nom Discord (si disponible)
- overlays connectés/hors ligne
- usage cache global et meme board par guild
- actions admin: réglages guild, stop playback, création/révocation clients ingest, révocation clients overlay, gestion pairing codes
Les erreurs HTTP sont volontairement normalisées (not_found, request_error, internal_error) sans stack trace exposée.
Le workflow /.github/workflows/docker.yml build et pousse l'image sur Docker Hub:
- sur push vers
main - sur tag
v* - en exécution manuelle (
workflow_dispatch)
Secrets GitHub requis:
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN(token d'accès Docker Hub)
Image publiée:
${DOCKERHUB_USERNAME}/livechat-bot:latest${DOCKERHUB_USERNAME}/livechat-bot:sha-<commit>