Node.js

musicbot-js — un bot Discord music auto-hébergé

Rythm, Groovy, et la quasi-totalité des bots Discord music publics ont fini par fermer, étranglés par YouTube. La réaction logique pour un développeur n’était pas d’aller chercher le prochain bot qui mourra dans six mois, mais de reconstruire le sien. musicbot-js est un bot Node.js tout simple : il rejoue de l’audio dans un salon vocal. Léger, auto-hébergé, et à moi.

Le besoin est trivial : lancer une playlist sur un serveur entre amis sans payer un abonnement premium. Sauf que derrière cette banalité se cache tout l’écosystème de la voix sur Discord — codecs, gateways, chiffrement, reconnexions. Et c’est précisément là que le projet devient intéressant.

Le bot fait ce qu’on attend de lui : lecture depuis une URL, file d’attente persistante par serveur avec shuffle et boucle, les commandes habituelles en slash command (/play, /skip, /pause, /queue) et une reconnexion automatique au vocal quand le réseau lâche. Sous le capot : Node 20, discord.js v14, @discordjs/voice et ffmpeg-static, le tout relancé par systemd.

L’histoire du bug 4017

La vraie histoire de ce projet, c’est un crash. Pendant des semaines, le bot tombait avec un code 4017 obscur à chaque tentative de connexion vocale, sans le moindre changement de mon côté. En creusant, j’ai compris : Discord avait basculé sans prévenir sa voice gateway en version 8 et imposé le protocole DAVE, qui chiffre les appels de bout en bout. Du jour au lendemain, mon ancienne couche de connexion ne parlait plus la bonne langue. Il a fallu attendre le correctif côté @discordjs/voice, puis refondre toute ma logique de connexion pour repartir.

C’est exactement la leçon que ce genre de projet enseigne : posséder ses outils, c’est aussi accepter de les réparer quand l’écosystème bouge sous tes pieds. Les API se durcissent, les protocoles changent, les bots publics ferment. Quand tu héberges le tien, tu as la liberté — et la corvée — de suivre. Pour la suite, j’aimerais lui ajouter la résolution des liens Spotify et un petit dashboard web pour gérer la file depuis le navigateur.