Extension : le côté serveur
Jusqu’ici, nous avons surtout manipulé les deux parties visibles de NodeCG :
- les
Graphics, qui affichent les informations - les
Dashboards, qui permettent de les contrôler.
NodeCG possède également une troisième partie : l’extension.
Une extension correspond au code exécuté côté serveur du bundle. Elle fonctionne en arrière-plan et permet à NodeCG de faire bien plus que simplement afficher des pages web.
C’est très puissant, mais un peu difficile si vous n’êtes pas à l’aise dans le fonctionnement d’un projet Node. Personnellement, je n’ai commencé à m’interesser à la partie serveur qu’après 1 an de NodeCG.
À quoi sert l’extension ?
Section titled “À quoi sert l’extension ?”L’extension permet notamment de faire le lien entre NodeCG et d’autres services ou outils.
Elle peut par exemple :
- récupérer des données depuis une API ou un fichier
- communiquer avec des logiciels externes
- automatiser certaines tâches
- effectuer des traitements ou des calculs
- surveiller certains événements
- transmettre des informations aux Graphics et aux Dashboards
L’extension permet ainsi de centraliser certaines opérations et de faire de NodeCG un véritable outil sur mesure, capable de s’intégrer à votre environnement de production.
Comment ça fonctionne ?
Section titled “Comment ça fonctionne ?”Dans un bundle NodeCG, le point d’entrée de l’extension est généralement le fichier index.js situé dans le dossier extension.
Ce fichier est automatiquement chargé par NodeCG au démarrage, pas besoin de le déclarer dans le package.json.
Pour commencer, une extension peut être aussi simple que ceci :
module.exports = function (nodecg) { // Un simple coucou dans le terminal console.log('Bonjour depuis le côté extension')
// Puis tout ce que votre imagination et la technique peuvent permettre}La fonction reçoit l’objet nodecg, qui permet ensuite d’accéder aux différentes fonctionnalités de NodeCG depuis le côté serveur.
Pour le moment, retenez simplement que ce code est exécuté par NodeCG et non dans le navigateur.
C’est cette différence fondamentale qui permet à l’extension d’effectuer des opérations côté serveur et de communiquer avec des services ou des logiciels externes.
Quelques exemples concrets
Section titled “Quelques exemples concrets”Les possibilités sont nombreuses, voici quelques usages concret de la partie extension sur mes projets :
-
Contrôler OBS : changer de scène, récupérer son état, démarrer ou arrêter un enregistrement, modifier certaines sources, etc.
-
Récupérer des données depuis Google Sheets : charger un programme, une liste de joueurs ou d’autres informations utilisées par des Graphics.
-
Communiquer avec un autre logiciel, comme FoundryVTT (pour faire du jeu de rôle à distance), afin de récupérer ou synchroniser certaines informations, par exemple des points de vie ou des jets de dés.
-
Surveiller un chat Twitch : récupérer les messages, détecter certains mots-clés ou déclencher une action lorsqu’un événement particulier se produit.
-
Communiquer avec des services externes : récupérer des informations depuis une API, envoyer des données vers un autre service ou synchroniser plusieurs outils.
-
Contrôler du matériel ou des équipements connectés : par exemple, créer une interface NodeCG permettant de contrôler des lumières, de modifier une ambiance lumineuse ou de déclencher certains effets.
-
Automatiser des tâches qui devraient autrement être réalisées manuellement pendant un live : modifier les informations d’un bandeau, afficher un programme, changer de scène après un compte à rebours, mettre à jour plusieurs éléments simultanément, etc.
Pour réaliser ce type d’intégration, une extension peut notamment s’appuyer sur des bibliothèques JavaScript existantes. Parmi celles que vous pourrez rencontrer :
- obs-websocket-js pour communiquer avec OBS
- tmi.js pour interagir avec le chat Twitch
- des bibliothèques permettant de communiquer avec des API HTTP, ou des appareils connectés (caméras, lumières…)
Les extensions constituent une partie plus avancée de NodeCG et nécessitent généralement quelques connaissances supplémentaires en JavaScript (voire en TypeScript) et en développement côté serveur.