En tant que développeur j'ai conçu une application discord (développé initialement pour mon serveur personnel puis ouvert aux serveurs tiers), combinant un lecteur audio flux YouTube et un système de création/gestion dynamique de salons, ainsi j'ai créé cette application en deux temps majeurs :
-
Étape 1 (Bot Musique): Conception initiale d'un module de streaming audio pour mon propre serveur Discord afin de remplacer les bots publics devenus payants ou instables.
-
Étape 2 (Salons Temporaires) : Ajout quelques semaines plus tard d'un système complet de gestion automatisée de salons vocaux pour résoudre la saturation des canaux.
Face au succès du bot sur mon serveur, j'ai restructuré le projet pour le rendre générique, modulable et prêt à être déployé sur d'autres serveurs Discord tiers.
Besoins :
-
Proposer un lecteur musical interactif capable de streamer des flux audio YouTube via des commandes slash et une interface à boutons.
-
Automatiser la création/suppression de salons vocaux et textuels privés à la demande pour désengorger n'importe quel serveur Discord.
-
Mettre à disposition des utilisateurs un panel de gestion graphique (boutons) pour contrôler leurs salons sans nécessiter de droits d'administration.
-
Assurer la persistance des préférences utilisateurs (presets) via une base de données.
-
Rendre la solution réutilisable et déployable sur un environnement Cloud (PaaS).
Réalisations :
-
Développement du Module Musique (Phase 1) :
-
Extraction et conversion des flux audio YouTube via yt-dlp et encodage avec FFmpeg.
-
Implémentation d'une classe de gestion de file d'attente (MusicPlayer) supportant l'ajout, le shuffle, le boucle (musique/queue) et l'actualisation en temps réel de la barre de progression sur l'embed Discord.
-
-
Développement du Module Salons Temporaires (Phase 2) :
-
Écoute d'événements successifs (on_voice_state_update) pour générer automatiquement un salon vocal et un salon textuel dédié dès qu'un membre rejoint "Créer un vocal".
-
Conception d'un panel de contrôle interactif (VoicePanel) complet ( verrouillage, renommage via fenêtre modale, gestion des permissions, transfert de propriété ).
-
Intégration d'une base de données SQLite (presets.db) pour sauvegarder les configurations personnalisées des utilisateurs.
-
-
Architecture, Généralisation & Sécurisation :
-
Reconstitution du code en Cogs (cogs/music.py, cogs/voice_temp.py) pour séparer proprement la logique métier et permettre l'ajout du bot sur plusieurs serveurs.
-
Isolation stricte des données sensibles (token d'API) via variables d'environnement (.env) et exclusion Git (.gitignore).
-
-
Hébergement Cloud & Résolution d'incidents (Railway) :
- Configuration du déploiement continu sur la plateforme PaaS Railway via un Procfile.
-
Instabilité et hachage du flux audio lors du passage sur serveur Cloud (Railway) :
-
Difficulté : Lors de la migration du bot de mon environnement local vers l'hébergement distant (Railway), la lecture musicale présentait de fortes saccades. Ce dysfonctionnement était causé par la gestion du tampon (buffering) de FFmpeg et les contraintes réseau des conteneurs Linux cloud associés à yt-dlp.
-
Solution : Optimisation des arguments de passage de FFmpeg dans le code Python (ajustement des options -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5 et filtres audio) afin d'assurer un flux fluide en environnement hébergé.
-
-
Transition d'un bot dédié à un bot multi-serveurs modulable :
-
Difficulté : Le code initial du bot musique était codé en dur pour mon serveur, ce qui empêchait son déploiement sur d'autres espaces.
-
Solution : Refactorisation complète de l'application sous une architecture modulaire en Cogs, utilisation d'identifiants dynamiques et externalisation de la configuration pour permettre à n'importe quel administrateur de l'installer facilement.
-
-
Gestion de l'asynchronisme et des accès simultanés :
-
Difficulté : Prévenir les conflits d'accès lors des manipulations simultanées de salons par plusieurs membres.
-
Solution : Utilisation de la programmation asynchrone (asyncio), gestion d'un dictionnaire d'états en mémoire (bot.temp_channels) et vérification systématique des permissions (interaction_check).
-
-
Répondre aux incidents et aux demandes d'assistance et d'évolution : Traiter des demandes concernant les applications (évolution d'un bot dédié vers une version multi-serveurs et résolution du problème de saccades audio FFmpeg/Railway).
-
Mettre à disposition des utilisateurs un service informatique : Déployer un service (déploiement continu sur la plateforme Cloud PaaS Railway).
-
Organiser son développement professionnel : Gérer son identité et son environnement d'apprentissage (auto-formation en Python, programmation asynchrone asyncio et API Discord).