Auto-hébergement
Cette page s’adresse à qui veut installer sa propre copie de StreamHub. Le site et le bot y forment un seul programme à lancer.
Option A — Sur ton PC de stream
- Installe Node.js (version 22 ou plus récente, « LTS »).
- Crée l’application Twitch (étape ci-dessous) avec l’URL de redirection
http://localhost:3010/auth/callback. - Double-clique sur « Lancer StreamHub.bat » dans le dossier
web-twitch. La première fois, il installe tout et te pose trois questions (adresse, Client ID, Client Secret). - Le tableau de bord s’ouvre : clique sur « Connecter ma chaîne Twitch ». Le bot rejoint ton chat dans les 30 secondes.
- Laisse la fenêtre noire ouverte pendant le live : c’est elle qui fait tourner le bot et les overlays.
http://localhost:3010/overlay/… puisque OBS tourne sur le même PC.Option B — En ligne (24 h/24)
Héberge le dossier sur un serveur Node.js avec disque persistant et HTTPS (VPS, Railway, Fly.io, Render…). Utilise l’adresse publique dans APP_URL et dans l’URL de redirection Twitch. Le fichier README.md détaille Docker et les variables.
Créer l’application Twitch
- Ouvre la console développeur Twitch et clique sur « Register Your Application ».
- Nom : celui de ton bot. Catégorie : « Chat Bot ». Type de client : Confidentiel.
- URL de redirection OAuth : l’adresse de ton installation suivie de
/auth/callback, exactement, sans barre finale (http://localhost:3010/auth/callbacksur ton PC,https://ton-domaine/auth/callbacken ligne). - Copie le Client ID puis génère un Client Secret.
Configuration manuelle (sans l’assistant)
npm run setup crée le fichier .env pour toi. Tu peux aussi copier .env.example en .env et remplir :
APP_URL=http://localhost:3010 # ou l’adresse publique de ton serveur
TWITCH_CLIENT_ID=…
TWITCH_CLIENT_SECRET=…
TOKEN_ENCRYPTION_KEY=… # 64 caractères hexadécimaux
BOT_API_KEY=… # clé secrète interne
PREMIUM_OFFERT=… # tes pseudos Twitch, sinon tes chaînes restent en Gratuit
Sans abonnement, chaque chaîne de ta copie est en offre Gratuite, avec ses limites. Liste tes pseudos Twitch (séparés par des virgules) dans PREMIUM_OFFERT pour leur donner l’offre Premium, puis redémarre.
Intelligence artificielle (facultatif)
Pour le ChatBot, l’assistant avancé et les protections IA, ajoute une clé ANTHROPIC_API_KEY (créée sur console.anthropic.com) dans le fichier .env ou via npm run setup, puis redémarre. Sans clé, ces modules affichent « Clé requise ».
Ces modules font partie de l’offre Premium : la chaîne doit être listée dans PREMIUM_OFFERT (ou avoir un abonnement), sinon ils ne peuvent pas être activés.
- Le modèle par défaut est
claude-opus-5-5;ANTHROPIC_MODELpermet d’en choisir un autre (par exemple un modèle moins coûteux pour les protections IA, qui analysent chaque message). - Chaque réponse ou analyse est facturée sur le compte Anthropic de la clé : surveille la consommation dans la console.
Le bot sur une autre machine
Pour séparer le site et le bot, mets BOT_ENABLED=0 côté site et lance npm run bot sur l’autre machine avec APP_URL, BOT_API_KEY et TWITCH_CLIENT_ID.
API du bot (pour développeurs)
Un autre programme peut remplacer le bot intégré en utilisant l’API privée protégée par BOT_API_KEY.
Authentification
Authorization: Bearer <BOT_API_KEY>
Content-Type: application/json
Points d’API
| Méthode & chemin | Rôle |
|---|---|
POST /api/bot/heartbeat | Signal de vie, à envoyer toutes les 30 s : {"version":"1.0","channels":[{"id":"123","joined":true}]}. Répond avec la liste des chaînes et leur configVersion. |
GET /api/bot/channels/:id/config | Configuration complète (modules + collections, secrets déchiffrés). À recharger quand configVersion change. |
GET /api/bot/channels/:id/tokens | Jetons d’accès Twitch du diffuseur et du compte de bot personnalisé (rafraîchis automatiquement). |
POST /api/bot/channels/:id/events | Événements (500 max) : {"events":[{"type":"follow","data":{"user":"pseudo"}}]}. Alimente statistiques, overlays et zone de notification. |
POST /api/bot/channels/:id/viewers | Variations des viewers : {"updates":[{"userId":"1","login":"pseudo","points":10,"xp":5,"messages":1,"watchMinutes":1}]} ou valeurs absolues via "set". |
POST|PATCH|DELETE /api/bot/channels/:id/collections/:col | Écriture dans les collections ouvertes au bot : avert-liste, regulars, boutique, citations, songrequest, compteurs, file-attente, achats. |
GET /api/bot/channels/:id/commands | Commandes en attente envoyées depuis le tableau de bord (tirage, bingo, skip TTS…). |
POST /api/bot/channels/:id/commands/:cmdId | Accusé de traitement : {"status":"done"} ou {"status":"failed","result":"raison"}. |
Types d’événements reconnus
follow, sub, resub, subgift (count), cheer (amount), raid (viewers), chat (user, text, color, emotes:[{id,name}]), redemption, hypetrain, ping, stream.online, stream.offline, stream.session (started_at, ended_at, peak_viewers, title, game, messages, follows, subs), moderation.auto (user, rule, action), moderation.action, giveaway.winner, steam.achievement, mediashare, screen, clip.created. Le champ user (pseudo affiché) est utilisé partout.
Tester la connexion
Le dépôt contient tools/bot-connector-example.js, un client minimal qui envoie le signal de vie et récupère la configuration :
BOT_API_KEY=… APP_URL=http://localhost:3010 node tools/bot-connector-example.js