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.

Pour utiliser StreamHub sur twitch.streamerhub.fr, il n’y a rien à installer : suis simplement Bien démarrer.

Option A — Sur ton PC de stream

  1. Installe Node.js (version 22 ou plus récente, « LTS »).
  2. Crée l’application Twitch (étape ci-dessous) avec l’URL de redirection http://localhost:3010/auth/callback.
  3. 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).
  4. Le tableau de bord s’ouvre : clique sur « Connecter ma chaîne Twitch ». Le bot rejoint ton chat dans les 30 secondes.
  5. Laisse la fenêtre noire ouverte pendant le live : c’est elle qui fait tourner le bot et les overlays.
Les overlays OBS fonctionnent directement avec les liens 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

  1. Ouvre la console développeur Twitch et clique sur « Register Your Application ».
  2. Nom : celui de ton bot. Catégorie : « Chat Bot ». Type de client : Confidentiel.
  3. URL de redirection OAuth : l’adresse de ton installation suivie de /auth/callback, exactement, sans barre finale (http://localhost:3010/auth/callback sur ton PC, https://ton-domaine/auth/callback en ligne).
  4. 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_MODEL permet 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 & cheminRôle
POST /api/bot/heartbeatSignal 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/configConfiguration complète (modules + collections, secrets déchiffrés). À recharger quand configVersion change.
GET /api/bot/channels/:id/tokensJetons 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/viewersVariations 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/commandsCommandes en attente envoyées depuis le tableau de bord (tirage, bingo, skip TTS…).
POST /api/bot/channels/:id/commands/:cmdIdAccusé 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