Un bot Discord lancé sur votre ordinateur se déconnecte dès que vous l'éteignez, et vos membres voient sa pastille passer au gris. Sur un VPS, il reste connecté jour et nuit, redémarre seul après une erreur et ne dépend plus de votre connexion. Ce guide va de la création du bot à sa mise en service permanente, en Python avec discord.py, avec l'équivalent pour discord.js.
1. Créer le bot dans le portail développeur
- Ouvrez le portail développeur de Discord et créez une application.
- Dans l'onglet Bot, générez le jeton (« Reset Token ») et copiez-le. Il ne sera plus affiché : gardez-le comme un mot de passe.
- Toujours dans Bot, n'activez les intents privilégiés que si vous en avez besoin. Message Content n'est utile que pour lire le texte des messages ; un bot à commandes slash s'en passe.
- Dans OAuth2, générez un lien d'invitation avec les scopes
botetapplications.commands, et seulement les permissions nécessaires. Ouvrez-le pour ajouter le bot à votre serveur.
2. Préparer le VPS
Sur un VPS Debian ou Ubuntu, connecté en root, installez Python et créez un utilisateur dédié : le bot ne doit jamais tourner en root.
apt update && apt install -y python3 python3-venv
adduser --disabled-password --gecos "" bot
su - bot
mkdir monbot && cd monbot
python3 -m venv venv
venv/bin/pip install discord.py
3. Le premier bot
Créez bot.py. Ce bot répond à la commande slash /ping :
import os
import discord
from discord import app_commands
intents = discord.Intents.default()
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)
@tree.command(name="ping", description="Vérifie que le bot répond")
async def ping(interaction: discord.Interaction):
await interaction.response.send_message("pong")
@client.event
async def on_ready():
await tree.sync()
print(f"Connecté en tant que {client.user}")
client.run(os.environ["DISCORD_TOKEN"])
Testez-le une première fois à la main :
DISCORD_TOKEN="VOTRE_JETON" venv/bin/python bot.py
La commande peut mettre quelques minutes à apparaître dans Discord après la première synchronisation. Arrêtez ensuite le bot avec Ctrl+C.
4. Le faire tourner en continu avec systemd
De retour en root, placez le jeton dans un fichier lisible uniquement par root :
install -m 600 /dev/null /etc/monbot.env
echo 'DISCORD_TOKEN=VOTRE_JETON' > /etc/monbot.env
Créez /etc/systemd/system/monbot.service :
[Unit]
Description=Bot Discord
After=network-online.target
Wants=network-online.target
[Service]
User=bot
WorkingDirectory=/home/bot/monbot
EnvironmentFile=/etc/monbot.env
ExecStart=/home/bot/monbot/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now monbot
journalctl -u monbot -f # journal en direct
Le bot redémarre désormais après une erreur et après un redémarrage du VPS. Après une modification du code : systemctl restart monbot.
5. Avec discord.js
La méthode est la même en Node.js : installez une version LTS récente de Node.js, puis npm install discord.js dans le dossier du bot. Dans le service, remplacez la ligne ExecStart par ExecStart=/usr/bin/node index.js. PM2 est une alternative courante à systemd pour les projets Node.js.
6. Ports, intents et erreurs fréquentes
- Aucun port à ouvrir : le bot se connecte lui-même à Discord. Gardez le pare-feu fermé, sauf si vous ajoutez un site ou un tableau de bord.
- Erreur sur les intents privilégiés au démarrage : l'intent demandé dans le code n'est pas activé dans le portail, ou l'inverse.
- Le bot ne voit pas le texte des messages : c'est l'intent Message Content. Préférez les commandes slash, qui n'en ont pas besoin.
- Au-delà de 2 500 serveurs, Discord impose le sharding : discord.py le gère avec
AutoShardedClient.
7. Quel VPS selon votre bot
| Type de bot | RAM |
|---|---|
| Modération, commandes, tickets sur quelques serveurs | 1 à 2 Go |
| Base de données, tableau de bord web, plusieurs bots | 2 à 4 Go |
| Musique avec ffmpeg ou Lavalink | 4 Go et plus |
| Bot relié à un modèle d'IA local (Ollama) | 8 à 16 Go |
Un même VPS peut héberger plusieurs bots, avec un service et un jeton par bot. Voir notre page VPS pour bot Discord. Vous développez aussi pour Telegram ? Lisez Héberger un bot Telegram sur un VPS.
Questions fréquentes
Faut-il un VPS pour héberger un bot Discord ?
Pas pour développer : votre ordinateur suffit. Pour un bot en ligne en permanence, il faut une machine toujours allumée et connectée, ce qu'apporte un VPS.
Combien de RAM pour un bot Discord ?
1 à 2 Go suffisent pour un bot de modération ou de commandes. Comptez 4 Go et plus pour un bot de musique, et davantage pour plusieurs bots sur le même serveur.
Dois-je ouvrir un port sur le VPS ?
Non. Le bot ouvre lui-même la connexion vers Discord. Un port n'est nécessaire que si vous ajoutez un site, une API ou un tableau de bord.
Pourquoi ma commande slash n'apparaît pas ?
Vérifiez que le lien d'invitation incluait le scope applications.commands et que la synchronisation a eu lieu au démarrage. Une commande globale peut mettre quelques minutes à apparaître.










