Skip to content

🎮 Système d'overlay Twitch moderne avec EventSub, animations temps réel et WebSocket. Interface élégante avec alertes (follows, subs, raids, bits), Intégration Trucky, statistiques live, pages démarrage/pause/fin animées. Configuration facile, responsive design, intégration complète API Twitch.

License

Notifications You must be signed in to change notification settings

yazouv/ElectrumOverlay

Repository files navigation

🎮 Electrum Overlay - Système d'overlay Twitch avec EventSub

Un système complet d'overlay pour Twitch avec intégration EventSub, animations en temps réel et statistiques de stream.

This readme is also available in English.

📋 Table des matières

🚀 Fonctionnalités

✨ Alertes en temps réel

  • Nouveaux followers avec animations
  • Nouveaux abonnés et renouvellements
  • Cadeaux d'abonnements (sub gifts)
  • Raids entrants avec effet spéciaux
  • Donations de bits avec confettis
  • Queue d'alertes pour éviter les chevauchements

🎭 Overlays animés

  • Page de démarrage : Compte à rebours avant stream
  • Page principale : Statistiques en temps réel + alertes
  • Page de fin : Écran de fin de stream
  • Animations CSS avancées avec particules
  • Responsive design pour tous les écrans

📊 Statistiques en temps réel

  • Nombre de followers
  • Nombre d'abonnés
  • Spectateurs actuels
  • Mise à jour automatique via WebSocket

📦 Installation

Prérequis

  • Node.js 18+ (Télécharger)
  • npm (inclus avec Node.js)
  • Compte Twitch
  • ngrok (intégré) ou installation manuelle optionnelle (Télécharger)
Information : Prendre la version gratuite : https://ngrok.com/pricing
"Run your pre-release versions or internal apps on ngrok. Free forever."

1. Cloner le projet

git clone https://github.com/yazouv/ElectrumOverlay.git
cd electrum-overlay

2. Installer les dépendances

npm install

3. Préparer la configuration

cp src/config/config.example.js src/config/config.js

4. Structure du projet

electrum-overlay/
├── 📁 src/
│   ├── 📁 config/
│   │   └── config.js          # Configuration backend (sensible)
│   ├── 📁 routes/
│   │   └── api.js             # API routes principales
│   └── 📁 services/
│       ├── EventSubManager.js # Gestion EventSub
│       ├── TwitchAuth.js      # Authentification Twitch
│       ├── WebhookHandler.js  # Traitement webhooks
│       └── StreamStatsManager.js # Statistiques stream
├── 📁 public/
│   ├── index.html             # Overlay principal
│   ├── starting.html          # Page de démarrage
│   ├── ending.html            # Page de fin
│   ├── 📁 js/
│   │   ├── config.js          # Configuration frontend (public)
│   │   ├── overlay-common.js  # Fonctions communes
│   │   ├── index.js           # Logique page principale
│   │   ├── starting.js        # Logique démarrage
│   │   └── ending.js          # Logique fin
│   └── 📁 css/
│       ├── overlay-common.css # Styles communs
│       ├── index.css          # Styles page principale
│       ├── starting.css       # Styles démarrage
│       └── ending.css         # Styles fin
├── package.json
├── server.js                  # Serveur principal
├── ConfigOBS.json             # Configuration OBS

⚙️ Configuration

Le système utilise deux fichiers de configuration séparés :

📋 1. Configuration Backend (src/config/config.js)

⚠️ SENSIBLE - Ne pas partager publiquement

🔐 Génération du WEBHOOK_SECRET

Le WEBHOOK_SECRET est un secret cryptographique utilisé pour sécuriser les webhooks Twitch EventSub. Vous devez le générer vous-même :

// Dans Node.js (console ou script)
const crypto = require('crypto');
const webhookSecret = crypto.randomBytes(32).toString('hex');
console.log('WEBHOOK_SECRET:', webhookSecret);

Caractéristiques importantes :

  • 32 caractères minimum (64 caractères en hexadécimal recommandés)
  • Aléatoire et unique pour votre application
  • Ne jamais partager ou committer dans Git
  • Utilisé pour vérifier que les webhooks proviennent bien de Twitch

⚙️ Configuration des événements EventSub

N'oubliez pas de configurer les conditions pour certains événements dans src/config/config.js (ligne 50-51) :

"condition": {
    "broadcaster_user_id": "197983290",     // Votre User ID
    "moderator_user_id": "197983290"        // Même User ID pour être modérateur
}

Important : Remplacez "197983290" par votre propre User ID Twitch obtenu à l'étape suivante.

🌐 2. Configuration Frontend (public/js/config.js)

✅ PUBLIC - Peut être partagé

🔧 Configuration Twitch

1. 🏗️ Créer une application Twitch

  1. Allez sur Twitch Developers Console
  2. Cliquez sur "Enregistrer votre application"
  3. Remplissez les informations :
    • Nom : Mon Overlay Twitch
    • URL de redirection OAuth : http://localhost:8080/auth-callback
    • Catégorie : Application Integration
    • Type de client : Confidentiel
  4. Cliquez sur "Créer"
  5. Notez votre Client ID et Client Secret et mettez le dans le src/config/config.js

2. 🆔 Obtenir votre User ID

  1. Récuperez votre User ID sur : StreamWeasels
  2. Mettez le dans le public/js/config.js > OVERLAY_CONFIG.twitch.broadcasterId
  3. Mettez le aussi dans src/config/config.js > twitch.BROADCASTER_ID

3. 🔑 Obtenir un Access Token

Méthode 1 : Flow OAuth (Recommandé)

  1. Démarrez le serveur : npm start
  2. Allez sur http://localhost:8080/auth-url
  3. Autorisez l'application
  4. Le token sera affiché dans la console
  5. Mettez le dans src/config/config.js > twitch.USER_ACCESS_TOKEN

Méthode 2 : Token Generator

  1. Allez sur Twitch Token Generator
  2. Sélectionnez les scopes nécessaires
  3. Générez le token
  4. Mettez le dans src/config/config.js > twitch.USER_ACCESS_TOKEN

🌐 Tunnel Webhook (ngrok)

Les webhooks EventSub nécessitent une URL HTTPS publique. ngrok est intégré et activé par défaut dans ElectrumOverlay :

🔄 Mode automatique (par défaut)

Le système démarre automatiquement ngrok et configure l'URL webhook. Dans src/config/config.js :

"ngrok": {
    "ENABLED": true,  // ngrok activé par défaut
},

Avantages :

  • ✅ Configuration automatique
  • ✅ Pas besoin de gérer manuellement ngrok
  • ✅ URL webhook mise à jour automatiquement

⚙️ Mode manuel (optionnel)

Si vous préférez gérer ngrok manuellement, désactivez le mode automatique :

1. 🔧 Désactiver ngrok automatique

Dans src/config/config.js :

"ngrok": {
    "ENABLED": false,  // Désactiver ngrok automatique
},

2. 📥 Installer ngrok

  • Téléchargez depuis ngrok.com
  • Ou via npm : npm install -g ngrok

3. 🚀 Démarrer le tunnel

# Dans un terminal séparé
ngrok http 8080

4. 📋 Copier l'URL

Ngrok va afficher quelque chose comme :

Forwarding  https://abcdefgijkl.ngrok-free.app -> http://localhost:8080

5. ⚙️ Configurer l'URL webhook

Dans src/config/config.js :

WEBHOOK_URL: "https://abcdefgijkl.ngrok-free.app/eventsub"

6. ⚠️ Note importante

  • L'URL ngrok change à chaque redémarrage (version gratuite)
  • Pensez à mettre à jour la configuration après chaque redémarrage

🚛 Intégration TruckyApp

ElectrumOverlay inclut une intégration TruckyApp activée par défaut pour les streameurs de simulation de camion :

🔄 Mode activé (par défaut)

L'intégration TruckyApp récupère automatiquement vos statistiques de jeu. Dans src/config/config.js :

"trucky": {
    "enable": true,                    // TruckyApp activé par défaut
    "USER_ID": "90694",               // Remplacez par votre ID utilisateur Trucky
},

Fonctionnalités :

  • ✅ Récupération automatique des données utilisateur
  • ✅ Affichage du dernier job effectué
  • ✅ Statistiques de compagnie (si applicable)
  • ✅ Intégration seamless avec les overlays

⚙️ Configuration TruckyApp

1. 🆔 Obtenir votre User ID TruckyApp

  1. Allez sur TruckyApp
  2. Connectez-vous à votre compte
  3. Allez dans votre profil
  4. L'ID utilisateur se trouve dans l'URL : https://truckyapp.com/user/[VOTRE_ID]

2. 🔧 Configurer l'ID

Dans src/config/config.js, remplacez "90694" par votre ID :

"trucky": {
    "enable": true,
    "USER_ID": "VOTRE_ID_TRUCKY",
},

🚫 Désactiver TruckyApp (optionnel)

Si vous ne jouez pas aux jeux de simulation de camion, vous pouvez désactiver cette fonctionnalité :

Dans src/config/config.js :

"trucky": {
    "enable": false,              // Désactiver TruckyApp
    "USER_ID": "90694",
},

Note : Même désactivée, cette configuration n'affecte pas les autres fonctionnalités du système.

🏃‍♂️ Lancement

🚀 Démarrage complet

Le système démarre automatiquement ngrok par défaut. Si ngrok est activé :

  1. Démarrer le serveur :
npm start
  1. Accéder aux overlays :
    • Principal : http://localhost:8080
    • Démarrage : http://localhost:8080/starting.html
    • Fin : http://localhost:8080/ending.html
    • Pause : http://localhost:8080/pause.html

Si vous avez désactivé ngrok (mode manuel) :

  1. Démarrer ngrok (terminal 1) :
ngrok http 8080
  1. Mettre à jour l'URL webhook dans src/config/config.js

  2. Démarrer le serveur (terminal 2) :

npm start
  1. Accéder aux overlays :
    • Principal : http://localhost:8080
    • Démarrage : http://localhost:8080/starting.html
    • Fin : http://localhost:8080/ending.html
    • Pause : http://localhost:8080/pause.html

📊 Commandes disponibles

npm start          # Démarrer le serveur
npm run dev        # Mode développement (nodemon)
npm run clean      # Nettoyer les abonnements EventSub
npm run setup      # Assistant de configuration
npm run config     # Mettre à jour la configuration

📹 Overlays OBS

Utilisez le fichier ConfigOBS.json pour configurer les overlays dans OBS :

Celui-ci contient les scènes préconfigurées pour les overlays, avec les sources nécessaires.

🧪 Tests

🔧 Avec Twitch CLI

  1. Installer Twitch CLI :

  2. Configurer :

twitch configure
  1. Tester les événements :
# Test follow
twitch event trigger channel.follow --to-user-id=197983290 --from-user-id=123456

# Test subscription
twitch event trigger channel.subscribe --to-user-id=197983290 --user-id=123456

# Test raid
twitch event trigger channel.raid --to-user-id=197983290 --from-user-id=123456

# Test bits
twitch event trigger channel.cheer --to-user-id=197983290 --user-id=123456

🌐 Test via API

# Test webhook directement
curl -X POST http://localhost:8080/eventsub \
  -H "Content-Type: application/json" \
  -d '{
    "subscription": {
      "type": "channel.follow",
      "version": "1"
    },
    "event": {
      "user_name": "TestUser",
      "user_display_name": "TestUser"
    }
  }'

📷 Preview/Gallerie

Ecran de démarrage

Starting

Ecran de pause

Pause

Ecran de fin

Ending

Note : Les overlays sont conçus pour être utilisés avec OBS ou tout autre logiciel de streaming compatible.

🎨 Personnalisation

🎨 Modifier les couleurs

Dans public/js/config.js :

theme: {
    primary: '#3b82f6',      // Couleur principale
    secondary: '#10b981',    // Couleur secondaire
    accent: '#f59e0b',       // Couleur d'accent
    background: '#1f2937',   // Fond
    text: '#f9fafb'         // Texte
}

✨ Personnaliser les alertes

alerts: {
    types: {
        follow: {
            icon: '<i class="fas fa-heart"></i>',          // Icône
            title: 'NOUVEAU FOLLOW',                        // Titre
            gradient: 'linear-gradient(...)',               // Dégradé
            border: '#3b82f6',                             // Couleur bordure
            defaultMessage: 'Merci pour le follow !'       // Message par défaut
        }
    }
}

🎭 Modifier les animations

Dans public/css/overlay-common.css :

/* Animation d'apparition des alertes */
.alert-container.show {
    animation: slideInFromTop 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

/* Animation de particules */
.particle {
    animation: particleFloat 3s infinite ease-in-out;
}

📊 Configurer les panneaux

Dans public/js/config.js :

panels: {
    followers: {
        enabled: true,           // Activer/désactiver
        position: 'top-left',    // Position
        updateInterval: 5000,    // Intervalle de mise à jour (ms)
        animationDuration: 300   // Durée animation (ms)
    }
}

🛠️ Développement

🔧 Mode développement

npm run dev

Le serveur redémarre automatiquement lors des modifications.

📁 Structure du code

Backend (src/)

  • services/ : Services métier

    • EventSubManager.js : Gestion des abonnements EventSub
    • TwitchAuth.js : Authentification Twitch
    • WebhookHandler.js : Traitement des webhooks
    • StreamStatsManager.js : Statistiques en temps réel
  • routes/ : Routes Express

    • api.js : API principale
    • api-fixed.js : API avec données fixes
  • config/ : Configuration

    • config.js : Configuration sensible backend

Frontend (public/)

  • js/ : Scripts JavaScript

    • config.js : Configuration publique
    • overlay-common.js : Fonctions partagées
    • index.js, starting.js, ending.js : Logique par page
  • css/ : Styles CSS

    • overlay-common.css : Styles partagés
    • Page-specific CSS files

🔌 API Endpoints

GET  /                          // Page principale
GET  /starting.html             // Page de démarrage
GET  /ending.html               // Page de fin
GET  /auth                      // Authentification Twitch
GET  /auth-callback             // Callback OAuth
POST /eventsub                  // Webhooks EventSub
GET  /api/stream-stats          // Statistiques de stream en json
GET  /api/stream-stats-html     // Statistiques de stream en html

🔄 WebSocket Events

// Côté client
socket.on('alert', (data) => {
    // Nouvelle alerte reçue
});

socket.on('stats-update', (data) => {
    // Mise à jour des statistiques
});

// Côté serveur
wss.broadcast('alert', alertData);
wss.broadcast('stats-update', statsData);

❗ Dépannage

🚫 Erreurs communes

1. "ECONNREFUSED" lors du démarrage

Cause : Port déjà utilisé
Solution : Changer le port dans config.js ou arrêter le processus

2. Webhooks non reçus

Cause : URL ngrok incorrecte ou expirée
Solution : 
1. Vérifier que ngrok fonctionne
2. Mettre à jour WEBHOOK_URL dans config.js
3. Redémarrer le serveur

3. Alertes non affichées

Cause : Configuration EventSub ou WebSocket
Solution :
1. Vérifier les logs serveur
2. Tester avec Twitch CLI
3. Vérifier les scopes du token

4. "Token expired" ou "401 Unauthorized"

Cause : Access token expiré
Solution : Générer un nouveau token d'accès

📋 Vérifications de santé

1. Vérifier la configuration

# Tester la configuration
npm run config

2. Vérifier les abonnements EventSub

# Lister les abonnements actifs
curl -X GET 'https://api.twitch.tv/helix/eventsub/subscriptions' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID'

3. Nettoyer les abonnements

# Supprimer tous les abonnements
npm run clean

4. Logs détaillés

Activer les logs dans public/js/config.js :

debug: {
    enabled: true,              // Activer les logs debug
    websocket: true,            // Logs WebSocket
    alerts: true,               // Logs alertes
    api: true                   // Logs API
}

🔧 Outils de débogage

1. Console navigateur

  • Ouvrir F12 → Console
  • Vérifier les erreurs JavaScript
  • Voir les messages WebSocket

2. Logs serveur

  • Les logs s'affichent dans le terminal
  • Format : [TIMESTAMP] [LEVEL] Message

3. Test manual des endpoints

# Tester l'API stats
curl http://localhost:8080/api/stats

# Tester le webhook
curl -X POST http://localhost:8080/eventsub \
  -H "Content-Type: application/json" \
  -d '{"test": true}'

📞 Support

  1. Vérifier les logs pour identifier l'erreur
  2. Consulter la documentation Twitch : EventSub Guide
  3. Nettoyer et recommencer : npm run clean puis redémarrer

📄 Licence

MIT License - Voir le fichier LICENSE pour plus de détails.

🤝 Contribution

Les contributions sont les bienvenues ! Veuillez :

  1. Fork le projet
  2. Créer une branche pour votre fonctionnalité
  3. Commiter vos changements
  4. Pousser vers la branche
  5. Ouvrir une Pull Request

🎮 Bon streaming ! 🚀

About

🎮 Système d'overlay Twitch moderne avec EventSub, animations temps réel et WebSocket. Interface élégante avec alertes (follows, subs, raids, bits), Intégration Trucky, statistiques live, pages démarrage/pause/fin animées. Configuration facile, responsive design, intégration complète API Twitch.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project