LiveChat
Des overlays de stream pilotés depuis Discord, textes, images, vidéos et dessin en direct, servis par un seul Worker Cloudflare.
Le principe
Pendant un live, les viewers envoient des textes, des images ou des vidéos avec des commandes Discord (/text, /image, /video), et le contenu apparaît à l’écran dans une source navigateur OBS. Chaque streamer a sa propre file d’attente : un salon correspond à son login Twitch, et son serveur Discord y est lié.
LiveDoodle
Le même service propose le dessin en direct par-dessus le stream. Le streamer ne dessine pas : il se connecte avec Twitch, récupère ses URL OBS et choisit qui a le droit de dessiner, entre une liste blanche, ses abonnés Twitch ou tout le monde. La liste noire l’emporte toujours.
Architecture
Tout tient dans un seul Worker Cloudflare.
- Assets statiques servis sans réveiller le Worker : la page d’accueil et le tableau de bord du streamer en React, l’overlay en Vue.
- API écrite avec Elysia : REST, authentification et interactions Discord, dont la signature Ed25519 est vérifiée à chaque appel.
- Durable Objects avec WebSockets en hibernation : une instance par streamer pour la file LiveChat, une autre pour le dessin, dont les traits sont stockés en SQLite.
- KV pour les streamers autorisés et les liaisons entre serveurs Discord et salons.
Une réécriture
Cette version remplace l’ancienne, qui était répartie sur quatre dépôts : un back-end, un front-end, un bot Discord et LiveDoodle. Tout a été regroupé dans un seul dépôt en conservant l’historique git, et l’hébergement est passé sur Cloudflare Workers.
Les droits d’accès se règlent directement depuis Discord avec /livechat, et la permission « Gérer le serveur » est revérifiée côté serveur à chaque commande.