Galactia
Un assistant Discord qui aide une guilde World of Warcraft à transformer des conversations continues en synthèses lisibles, décisions retrouvables et actions plus faciles à suivre.
Galactia est un bot Discord conçu initialement pour la guilde World of Warcraft Les Galactiques. Le projet combine trois modules vérifiés dans le dépôt : synthèses IA de conversations Discord, alertes Twitch et alertes YouTube, avec configuration par guilde et stockage PostgreSQL.
Ce projet est intéressant dans un portfolio produit parce qu'il ne se résume pas à "mettre une IA dans Discord". Le vrai sujet est plus fin : aider une communauté à retrouver les décisions, actions et signaux importants dans un flux continu, tout en respectant les permissions, le contexte social et les limites d'un outil conversationnel.
Problème produit
Une guilde ou une communauté Discord ne manque pas de conversation. Elle manque souvent de lisibilité.
Les décisions de raid, les questions d'organisation, les liens utiles, les tensions, les changements de dernière minute et les actions à suivre peuvent se retrouver noyés dans plusieurs salons. Pour les responsables de communauté, la charge n'est pas seulement de répondre : il faut relire, trier, retrouver ce qui a été décidé et transmettre le bon contexte aux bonnes personnes.
L'enjeu produit n'était donc pas de créer un bot bavard. Il était de construire un assistant discret, capable de transformer un morceau de discussion en information exploitable, dans les limites du salon et des droits de la personne qui demande.
Approche
J'ai traité Galactia comme un workflow IA borné, pas comme un chatbot généraliste.
- La synthèse peut être lancée par mention directe de Galactia ou par la commande slash
/summary. - La demande est interprétée en JSON structuré puis validée avec Pydantic avant de lire l'historique Discord.
- Les périodes temporelles courantes en français sont traitées par un parser déterministe, avec refus des périodes ambiguës, invalides ou trop anciennes.
- Galactia vérifie le salon cible, la guilde, les permissions de lecture de l'utilisateur et celles du bot avant de résumer.
- Les limites de volume, quotas quotidiens, cooldowns par utilisateur et salon, scan élargi et cache de deux minutes encadrent les coûts, les abus et la latence.
- Les réponses utilisent
discord.AllowedMentions.none()pour éviter les pings involontaires. - Les logs IA enregistrent des métadonnées techniques, comme statuts, tokens, latence et volumes scannés, sans stocker le contenu complet des messages, prompts ou résumés.
Ce cadrage permet à l'IA de rester utile sans devenir opaque. Elle ne décide pas seule du périmètre : le code détermine d'abord ce qu'elle a le droit de lire, combien de messages elle peut traiter, et quand elle doit refuser.
Ce que j'ai construit
- Un flux de synthèse commun aux mentions directes et à
/summary, avec retour dans le salon d'appel. - Une option de ciblage de salon pour résumer un autre salon de la même guilde quand les droits et la configuration l'autorisent.
- Une détection d'intention IA structurée avec les champs
summary,authors,time_limit,count_limit,selection_mode,presetetfocus. - Des presets de synthèse comme catch-up, décisions, actions, raid, tensions et ton léger, utilisés pour cadrer le résultat attendu.
- Un parser temporel français couvrant des formulations comme
hier,ce matin,les 3 derniers jours,mardi soir,T1 2025,avant 18hou des abréviations Discord commeajd,dep 30 mnetmar der. - Une sélection de messages qui ignore les messages vides, les bots, les anciens appels à Galactia et les invocations de résumé.
- Des filtres auteur par mention Discord ou résolution prudente de noms, avec refus si le nom est inconnu ou ambigu.
- Un pipeline OpenAI asynchrone avec timeout, retry sur erreurs transitoires, suivi tokens, latence et tentatives.
- Une stratégie de synthèse simple pour les volumes courants et un map-reduce borné pour les gros volumes.
- Une configuration par guilde : salons résumables, rôles autorisés, rôles Galactia Manager, langue, timezone, limites de messages et quotas.
- Un setup admin avec
/galactia setup,/galactia statuset des commandes de configuration pour activer les modules. - Des alertes Twitch et YouTube avec commandes slash, état persisté et configuration par guilde.
- Des migrations Alembic, repositories SQLAlchemy, scripts de vérification locale et tests pytest, dont 42 cas d'intention IA hors ligne.
La stack vérifiée repose sur Python, discord.py, OpenAI, Pydantic, SQLAlchemy, asyncpg, Alembic, PostgreSQL, aiohttp, pytest et pytest-asyncio.
Décisions produit intéressantes
La première décision a été de garder l'IA dans un périmètre explicite. Galactia ne lit pas "tout Discord" et ne traite pas n'importe quelle demande. Elle résume un salon précis, sur une période ou un volume borné, avec des permissions vérifiées.
La deuxième a été de refuser les demandes fragiles. Une période explicite mais incomprise ne tombe pas silencieusement sur les dernières 24 heures. Un auteur ambigu ne provoque pas un résumé général du salon. Un lien vers un autre serveur est bloqué avant l'appel IA.
La troisième a été de penser la confiance jusque dans la sortie Discord. Un résumé utile peut devenir nuisible s'il notifie tout le monde par accident. Neutraliser les mentions n'est pas un détail technique : c'est une décision UX pour protéger la communauté.
La quatrième a été de rendre la configuration visible. Les nouveaux serveurs démarrent avec les modules désactivés et passent par un setup admin. La confiance dépend autant du modèle IA que du choix des salons, rôles, quotas et permissions.
La cinquième a été de ne pas confondre observabilité et conservation du contenu. Les métadonnées techniques sont nécessaires pour comprendre les échecs, les coûts et l'usage ; le texte complet des conversations n'a pas à devenir une donnée stockée par défaut.
Ce que ce projet démontre
Galactia montre ma façon d'aborder un produit IA appliqué : partir d'un usage concret, identifier les risques sociaux et opérationnels, puis construire un système qui contraint l'IA au lieu de lui donner un rôle trop large.
Le projet montre aussi une compétence maker. Il y a du cadrage produit, mais aussi du code, des migrations, des prompts versionnés, des tests, une documentation d'exploitation, des commandes admin et des choix de fiabilité. L'intérêt n'est pas de promettre un SaaS mature ; il est de montrer comment transformer un besoin communautaire récurrent en outil utilisable.
Limites et prochaines étapes
Galactia reste à présenter comme un prototype produit privé et un outil communautaire, pas comme une plateforme SaaS prouvée. Je n'affiche pas de métriques d'adoption, de nombre de serveurs ou de gain de temps, faute de données publiables vérifiées.
Les prochaines améliorations publiques devraient porter sur une capture produit reconstituée avec données fictives, un parcours de démo compréhensible par des lecteurs qui ne connaissent pas Discord, et la poursuite du durcissement sur les permissions, le monitoring, les coûts IA et les tests.