Aller au contenu

Choisir la bonne compatibilité pour ton bot Discord

Quand tu crées une commande pour un bot Discord, l'assistant de configuration te demande maintenant une compatibilité en plus du runtime (Node.js, Python, Bun, Deno, Java ou Autre). Cette page explique ce que ce choix fait, quand il compte et comment le changer sur un bot que tu as déjà en marche.

Les deux options

Légère est l'option par défaut. Elle utilise une petite image de base (Alpine Linux sous le capot) qui démarre plus vite, prend moins d'espace disque et se télécharge rapidement. Elle convient à la plupart des bots : tout ce qui utilise des bibliothèques entièrement en JavaScript ou en Python, les SDK Discord classiques, les clients HTTP simples, etc.

Standard (Meilleure Compatibilité) utilise une image de base plus grosse (basée sur Debian) qui embarque l'outillage système attendu par certaines bibliothèques. Tu cèdes un peu de temps de démarrage à froid et d'espace disque, en échange d'un support de paquets bien plus large.

Si ton bot s'installe sans problème aujourd'hui, laisse-le sur Légère. Sinon, Standard est presque toujours la bonne réponse.

Quand Légère ne suffit pas

Certains paquets téléchargent un binaire pré-compilé lors de l'installation (le scénario idéal), d'autres doivent compiler un binaire à partir de code source C/C++ pendant npm install ou pip install. La base Légère n'embarque ni chaîne de compilation C/C++, ni les bibliothèques système contre lesquelles ces paquets se lient, donc tout paquet qui doit compiler échouera.

Les fautifs les plus fréquents :

  • Node.js / npm : canvas, sharp, bcrypt, better-sqlite3, node-canvas, puppeteer, les helpers vocaux de discord.js (@discordjs/opus, sodium-native), node-sass.
  • Python / pip : Pillow, cryptography, lxml, numpy (parfois), et tout ce qui enveloppe libffi, libxml2, libpng ou cairo.

Tu t'en aperçois en général à la dure : l'installation crashe avec des erreurs qui mentionnent node-gyp, prebuild-install, gcc, python: not found ou Cannot find module. Le bot enchaîne alors les redémarrages en boucle.

Un repère rapide

Ouvre le package.json ou le requirements.txt de ton bot. Si tu y vois un des paquets ci-dessus, démarre directement sur Standard.

Ce que tu perds avec Standard

En pratique, pas grand-chose :

  • L'image pèse environ 80 à 150 Mo compressée au lieu d'environ 50 Mo. Tu ne le verras pas, sauf si tu reconstruis en permanence.
  • Le premier téléchargement sur un nœud froid prend quelques secondes de plus. Les redémarrages suivants sur le même nœud sont identiques.
  • Une surface un peu plus large pour les mises à jour de sécurité. Les deux bases sont maintenues par leurs projets amont, et nous les gardons à jour.

Pour un bot Discord qui tourne pendant des jours ou des semaines d'affilée, ces coûts sont invisibles. Si nous mettons Légère par défaut, c'est juste parce que la plupart des bots n'ont vraiment besoin de rien de plus.

Faire passer un bot existant en Standard

Si tu as déjà créé le bot et qu'il échoue avec des erreurs de compilation, pas besoin d'annuler et de recommander. Ouvre le bot depuis le tableau de bord, va dans Configuration et change la compatibilité à cet endroit. Le changement s'applique au prochain redémarrage, qui déclenchera une installation des dépendances depuis zéro sur la nouvelle image de base.

Les anciennes dépendances peuvent demander un coup de balai

Si ton bot rate l'installation depuis un moment, le dossier node_modules/ (ou __pycache__/, venv/, etc.) sur le volume du serveur peut être à moitié cassé. Après le passage en Standard, si l'installation ne passe toujours pas, supprime ce dossier depuis le gestionnaire de fichiers et redémarre une fois. Le runtime le reconstruira de zéro.

Foire aux questions

Je peux revenir de Standard à Légère ?

Oui, au même endroit. Pas d'étape de migration. Si tes dépendances s'installent bien en Légère, le bot se comporte exactement comme un bot qui était sur Légère dès le départ.

Ça change la version de Node / Python / Java que mon bot exécute ?

Non. La version majeure de ton runtime (Node 22, Python 3.13, Java 21, etc.) est la même dans les deux options. Ce qui change, c'est la base système en dessous, pas le runtime du langage.

Standard est-elle plus lente ?

Une fois le conteneur en route, non. Les runtimes eux-mêmes sont identiques. La seule différence mesurable est le temps de téléchargement de l'image sur un nœud qui ne l'a jamais lancée, ce qui reste un coût unique.

Pourquoi Légère par défaut si Standard est plus compatible ?

La plupart des bots Discord sont de petits projets dans un seul langage et n'ont aucun besoin d'une base plus lourde. Mettre tout le monde sur Standard impliquerait des images plus grosses et des démarrages à froid plus lents pour une majorité de bots qui n'en profiteraient jamais. On montre le choix pour que les bots qui en ont vraiment besoin puissent l'activer proprement.

Et si mon bot utilise le runtime « Autre » avec un start.sh personnalisé ?

Le même choix s'applique. Légère te donne un shell Alpine, Standard un shell Debian. Si ton script appelle apt-get, il te faut Standard ; s'il appelle apk, il te faut Légère. Les scripts POSIX purs marchent sur les deux.