Contexte

Un serveur Discord communautaire, ce sont des gens déjà réunis au même endroit, plusieurs heures par semaine. Axoquest exploite cette audience captive : un RPG complet (classes, donjons procéduraux, butin, artisanat, raids) jouable sans quitter Discord, à la commande /adv.

Le pari tenait en une contrainte : Discord n’est pas un moteur de jeu. Pas de boucle de rendu, pas d’état client, des interactions limitées dans le temps. Tout doit être stateless côté interface et autoritatif côté serveur.

Le système de jeu

Vingt-deux modules couvrent le périmètre : héros et archétypes, combat au tour par tour, donjons procéduraux, butin et raretés, artisanat, professions, familiers, rituels et reliques, marché entre joueurs, échanges pair-à-pair, coopération, raids à boss multi-actions, hauts faits, classements.

Quatre sujets ont demandé le plus de travail :

La diversité des personnages. Douze archétypes, chacun avec ses sorts propres, ses statistiques primaires et ses passifs : le Nécromancien invoque, l’Alchimiste lance des bombes qui montent avec ses stats, le Prêtre est le seul à ressusciter, le Virtuose protège par bouclier. Sept éléments et huit familiers viennent croiser ces choix, de sorte que deux joueurs de la même classe ne jouent pas la même partie.

L’équilibrage. Un RPG mal réglé se voit immédiatement : une classe domine, une autre est injouable. Le rythme réel de livraison le montre. Seuils défensifs, sorts propres à chaque classe, affixes d’équipement, dégâts des boss de raid : chaque version corrige une asymétrie constatée en jeu, pas une hypothèse de tableur.

L’IA d’auto-donjon. Les joueurs peuvent lancer une expédition automatique. Il a fallu écrire une IA qui choisit ses actions par score : privilégier les gros sorts, gérer sa réserve de mana, tenir compte des affinités élémentaires, et surtout garder en vie les classes fragiles sans tomber dans l’excès de défense qui rallonge les combats sans les gagner.

L’économie entre joueurs. Le marché fonctionne au système d’offres avec séquestre : les biens et la monnaie sont bloqués côté serveur le temps de la transaction, les annonces expirent, et les notifications tombent aussi bien sur Discord que dans l’application. Dès qu’une monnaie circule entre des gens qui se connaissent, la moindre faille devient un exploit : c’est le module qui a demandé le plus de rigueur.

Les raids ferment la progression : des boss en plusieurs phases, jouables à quatre ou plus, avec gestion de la menace et bonus de classe, suivis en temps réel depuis l’application web.

L’application web

Discord suffit pour jouer, pas pour consulter. Une application React + Vite installable (PWA) double l’expérience sur 17 écrans : fiche de héros, inventaire, atelier d’artisanat, marché, classements, guide, hauts faits, reliques, raids. L’authentification se fait par OAuth Discord, et un joueur retrouve directement son personnage.

Fondations techniques

Le tout vit dans un monorepo TypeScript en modules ES sur Node 22 : discord.js v14, PostgreSQL via Prisma (85 modèles partagés avec le bot communautaire), validation Zod, journalisation Pino, tests Vitest.

Quelques règles se sont révélées structurantes à l’usage :

  • Aucun fichier au-delà de 400 lignes, vérifié par la CI. Contrainte brutale mais efficace : elle force à découper les systèmes de jeu au lieu de les laisser grossir.
  • Services exportés comme objets, jamais de classes : l’injection se fait par paramètre, les tests n’ont pas besoin de conteneur.
  • upsert systématique sur les profils pour éliminer les compétitions d’écriture quand plusieurs commandes arrivent en parallèle.
  • Toute correction de bug métier livrée avec son test de non-régression.

Axo’s Corp : ouvrir l’écosystème au grand public

Axobot et Axoquest ont été conçus pour un serveur. Axo’s Corp est l’aboutissement de la démarche : la même expérience, rendue installable par n’importe qui, sur n’importe quel serveur Discord.

Page d’accueil d’Axo's Corp présentant les trois bots Axobot, Axoquest et Axojack.

Ce passage du projet communautaire au produit a imposé une réécriture d’architecture :

  • Une API NestJS unifiée qui héberge le REST, la passerelle WebSocket temps réel et les trois bots Discord (via Necord), démarrables séparément en production par un indicateur de mode.
  • Le multi-serveur comme invariant, pas comme option : guildId obligatoire sur tous les modèles exposés aux joueurs, unicité composée (discordId, guildId), économie strictement isolée par serveur, sans aucun porte-monnaie commun.
  • Une facturation Stripe modulaire : chaque serveur active les modules dont il a besoin, gérés depuis un tableau de bord.
  • Trois applications React 19 : Axoquest (RPG), Axojack (casino) et le tableau de bord d’administration, partageant une bibliothèque de composants et un client d’API typé généré automatiquement depuis le schéma Swagger (orval), ce qui supprime la dérive entre le contrat serveur et les appels front.
  • Turborepo + pnpm, cache et publication d’événements via Redis.
Axojack, l’application casino de la plateforme Axo's Corp.

Livrables clés

  • Système de jeu complet : 22 modules, 12 archétypes, équilibrage continu
  • Bot Discord /adv et application web PWA (17 écrans)
  • Schéma PostgreSQL de 85 modèles et migrations écrites à la main
  • IA d’expédition automatique par scoring d’actions
  • Plateforme multi-serveur Axo’s Corp : API NestJS, 3 applications React, facturation Stripe
  • Documentation joueur et technique, notes de version orientées joueur