Script Compteur automatique

Streamant régulièrement sur Twitch et passioné de Pokémon et de chasse aux Shinys, je me suis mis à partager mes chasses en direct.
Durant ces chasses, le nombre de rencontres est affiché aux spectateurs. Cette information est stockée dans un fichier texte qui est ensuite affiché sur le stream.
Intialement, ce fichier texte était systématiquement modifié à la main… Énorme perte de temps donc !

Animer un tchat, réaliser la chasse, faire face aux aléas du stream, penser à incrémenter le compteur… tant de choses à penser et à faire que cela en devient difficile et les streams ne sont plus aussi agréables qu’ils devraient l’être.
Ce qui m’a amené à vouloir épurer la liste de choses à gérer du compteur.
Ainsi, j’ai donc réfléchis à une solution de compteur permettant de soulager au maximum la situation initiale

J’avais déjà connaissance de solutions permettant via des macros (ou raccourcis claviers) d’incrémenter directement un fichier texte.
De rapides recherches en ligne amènent à des résultats très satisfaisants
Ces solutions fonctionnent globalement sur le principe suivant:

  • Installation du logiciel/script
  • Liason de la solution à un fichier texte
  • Définition des raccourcis
  • Utilisation de la solution
    • Quand on le souhaite faire +/- sur le compteur avec les raccourcis claviers
    • Affichage sur le stream mis à jour automatiquement à la modification du fichier par le logiciel de streaming

Cela permet déjà d’économiser les actions manuelles de modification puis d’enregistrement de fichier. Un simple raccourci clavier permet d’incrémenter le compteur de la valeur souhaitée. Cependant, des erreurs telles qu’un oubli peuvent subvenir et cette solution n’est donc pas optimale.

Je ne détaillerais pas d’avantage cette solution car beaucoup d’articles/vidéo/tutoriels le font déjà très bien. Elle ne correspond pas suffisament à mon besoin.

AvantagesInconvénients
Soulage lègèrementErreur possible: oubli d’action manuelle
Automatise une partie du processusDemande toujours une action manuelle systématiquement
Si en stream: aide du tchat en cas d’oubliImpossible de se faire aider si usage hors stream
Plusieurs compteurs à la fois possible
(pour la plupart des logiciels/scripts)
Installation de logiciel obligatoire (Python, logiciel executable..)
Synthèse la solution semi-automatique

Une solution serait de s’appuyer sur les modérateurs présents lors des streams.
Le Desktop Chatbot de StreamLabs permet via des commandes dans le tchat de directement agir sur un fichier texte. Le streameur peut toutefois incrémenter le compteur avec des raccourcis clavier églament.

L’installation de StreamLabs Chatbot est laborieuse car requiert la connexion aux différents services avec les tokens de sécurité: Twitch, Streamlabs (optionnel) et prend donc du temps. Il semblerait églament qu’il faille appuyer sur le bouton connexion pour le bot utilisé et la chaine sur laquelle parler à chaque lancement du logiciel. Une installation côté serveur semble plus judicieuse.

Je ne sais pas si le fichier est sauvegardé en ligne. Il serait bon de savoir si le compteur est dans le cloud, permettant ainsi de changer de poste / les réinstaller sans se soucier de sauvegarder la configuration et la valeur du compteur.

Le bot est très complet et permet pas mal de choses que je ne détaillerais pas ici, voyez par vous même:

Page d’accueil du logiciel

Ne vous étonnez pas de voir des « Deaths » à plusieurs reprises. Les éditeurs ont du le prévoir pour une utilisation « compteurs de morts ».
La configuration du compteur est très simple:

  • Command: préfixe de la commande à utiliser dans le tchat
  • Message Template: Résultat de la commande pour afficher le compteur (ici !death)
    # correspond à la valeur.
    Je recommande de le laisser seul, nous verrons pourquoi par la suite
  • Start Amount: Valeur par laquelle le compteur démarre (reste d’une session à l’autre)

N’oublions pas de dès à présent appuyer sur Start pour lancer le compteur. Les changements effecutés après seront bien pris en compte.

  1. Settings (roue crantée)
  2. Hotkeys
  3. Counter
  4. Cliquer sur le champ en en dessous de Increase/Decrease
    Increase = Incrémenter
    Decrease = Décrémenter
  5. Appuyer sur la touche/l’ensemble de touche à associer
  1. Settings (roue crantée)
  2. Localization
  3. Death Counter
  4. Modifier comme souhaité les champs.
    $value lie la valeur du fichier (équivalent à # précédement)

Donc si le fichier contient « Compteur: X », tout le texte sera affiché.
Mais en cas de !compteur seul, sans texte dans le compteur en plus de la valeur, seul le nombre sera affiché.

Exemple d’utilisation du compteur dans le tchat

Le fichier texte associé est situé dans le répetoire d’installation du bot: .\Services\Twitch\Files\Deaths.txt
Soit pour une installation classique:
C:\Users\VotreUser\AppData\Roaming\Streamlabs\Streamlabs Chatbot\Services\Twitch\Files\Deaths.txt

Ne reste plus qu’à le lier pour l’affichage sur le logiciel de streaming !

Avantages Inconvénients
Soulage complètement le streameurDéporte la charge aux modérateurs
Automatise une partie du processusDemande toujours une action manuelle systématiquement
Solution hybride: permet incrémentation via le tchat ou via raccourci clavierUn seul compteur à la fois
Installation de logiciel obligatoire et pénible (plusieurs connexions, authorisation des plateformes twitch et streamlabs)
Logiciel très complet en plus du compteurLogiciel plus lourd que d’autres en raisons de sa plétore de fonctionnalités obligatoires
Synthèse de la solution Compteur via Streamlabs Desktop Chatbot

En réfléchisant au possibilité, j’ai cru me souvenir d’un live de Laink sur Twitch qui réfléchissait à la réalisation d’un script qui comparait l’écran à une capture d’écran.

J’ai ensuite réalisés plusieurs recherches avant de m’intéresser à d’autres sujets.
J’ai un jour installé AutoHotKey, logiciel de scripting sous Windows, pour la réalisation de macros et divers projets informatiques.
En épluchant sa documentation je suis tombé sur la fonction « ImageSearch » et me suis souvenu de mon projet de compteur automatique. La fonction répond parfaitement à mon besoin: Comparer l’écran de l’ordinateur à une image. Un penchant existe sous Python mais ne prend pas pleinement en charge le multi-écrans ou bien avec déboire, je n’avais donc pas poursuivi dans cette direction.

Logo d’AutoHotKey
Logo de Python



Dès le début du projet, j’ai décidé d’utiliser GitHub afin de versionner le code, profiter de l’hébergement en ligne gratuit et faciliter le développement sur différents appareils.
J’ai eu pour vocation dès mes débuts en informatique de contribuer au monde du libre et de partager mes différents projets. J’ai donc rendu le code accessible à tous et sans rémunération.

GitHub Logo

Dès le début du projet, j’ai décidé d’utiliser GitHub afin de versionner le code, profiter de l’hébergement en ligne gratuit et faciliter le développement sur différents appareils.
J’ai eu pour vocation dès mes débuts en informatique de contribuer au monde du libre et de partager mes différents projets. J’ai donc rendu le code accessible à tous et sans rémunération.
J’ai essayé de documenter du mieux possible le projet, notamment via le README rédigé en Markdown.

Lien vers la version 1.0 ici

Récupérer la résolution d’un écran
Récupérer la résolut…
Oui
Oui

Image correspond
à une partie
de l’écran?
Image correspond…
Non
Non
Oui
Oui

Valeur est un nombre?
Valeur est un n…
Récupérer valeur du fichier counter.txt et le stocker dans AncienCompteur
Récupérer valeur du…
Non
Non
Variable NouveauCompteur = AncienCompteur+1
Variable NouveauComp…
Ecrire +1 dans le fichier +1.txt
Ecrire +1 dans le fi…
Attendre 2 secondes
Attendre 2 secondes
Supprimer le fichier +1.txt et counter.txt
Supprimer le fichier…
Ecrire NouveauCompteur dans counter.txt
Ecrire NouveauCompte…
Attendre 4 secondes
Attendre 4 secondes
Text is not SVG – cannot display
  • On paramètre d’abord les limites de l’écran puis l’on compare une image avec l’écran défini.
  • Si rien n’est trouvé on recommence aussitôt (boucle infinie) sinon on essaye de récupérer la variable dans le fichier counter.txt
  • Si elle n’est pas un nombre, alors on retest aussitôt. Permettant ainsi de réparer le fichier counter.txt sans avoir à relancer le script.
  • Ensuite, si c’est un nombre, on définit la nouvelle valeur du compteur en faisant +1 à l’ancienne puis l’ont écrit +1 dans +1.txt. Ce fichier permet l’affichage d’un +1 à l’écran pour dynamiser le compteur.
  • Enfin, l’on supprime les 2 fichiers puis l’on crée le nouveau fichier counter.txt avec la bonne valeur. La fonction permettant d’écrire dans les fichier ne peut pas remplacer du contenu. Il faut donc supprimer le fichier puis le recréer avec la bonne valeur.
  • Ne prend pas bien en compte tous les scénarios de disposition d’écran / résolutions sous Windows
  • Lourd traitement car boucle infini sans délai
  • Compliqué à prendre en main pour des novices

Lien vers la version 2.0 ici

Détail à venir …

Avantages Inconvénients
Soulage complètement le streameur
Automatise complètement le processusDemande un peu de configuration préalable à adapter pour chaque nouveau scénario
Autant de compteurs à la fois que souhaitésUniquement via raccourci clavier / compteur automatique, pas possibilité via le tchat
Logiciel de scripting utilisé pour d’autres usages, pas d’installation supplémentaires
Solution  » Maison « :
Ajout de fonctionnalités illimité dans la limite du réalisable
Demande de la maintenance (MàJ AutoHotKey…)
Synthèse de la solution Script de comparaison image / écran

Désormais, notre script nous permet de comptabiliser automatiquement et ceux sans intervention durant la chasse, simplement du paramétrage préalable.

Mais que pouvons nous imaginer pour aller plus loins?

  • Sauvegarde en ligne
    • Récupérer le fichier en ligne automatiquement au lancement du script
    • Sauvegarder le fichier en ligne automatiquement à la fin du script
  • Le lier au bot twitch multifonction en NodeJS
    • Permettre de modifier et consulter la valeur via le tchat
      • Incrémenter / décrementer de 1 par défaut
      • Incrémenter / décrémenter de X !compteur +X
      • Consulter la valeur qui est stockée sur le cloud ou en local? à voir le plus adéquat car requête sur PC à chaque commande
    • Gérer le script via des commandes du tchat: activer / désactiver
    • Ecrire la donnée dans la BDD du bot ? trop de traffic réseau ? comment gérer les conflits (màj trop rapide en local, etc) ?

Laisser un commentaire