Contexte
Un bot Discord ne répond que tant que son programme tourne. Lancé depuis votre ordinateur, il se déconnecte dès que vous l'éteignez ou que votre connexion tombe. L'hébergement de bot Discord Winheberg fait tourner votre bot sur un serveur prévu pour cet usage. Vous le pilotez depuis le panel, avec la console en direct, le gestionnaire de fichiers et le choix de la version de Python.
Ce guide prend l'exemple d'un bot écrit en Python avec la bibliothèque discord.py. Vous allez d'abord créer le bot sur le portail des développeurs de Discord et l'inviter sur votre serveur Discord. Sur le panel, vous allez ensuite passer le service en environnement Python si besoin, envoyer le code du bot avec son token rangé dans un fichier .env et choisir la version de Python, puis démarrer le bot et vérifier dans la console qu'il est bien connecté.
Votre bot est écrit en JavaScript ? Consultez plutôt notre guide « Comment héberger son bot Discord Node.js (discord.js) ? ».
Prérequis
- Un service Bot Discord actif chez Winheberg, accessible depuis le panel
https://panel.winheberg.com/ - Un compte Discord et un serveur Discord sur lequel vous avez la permission Gérer le serveur
- Le code de votre bot avec son fichier
requirements.txt, ou l'exemple fourni dans ce guide
1. Créer l'application et récupérer le token
Rendez-vous sur le portail des développeurs de Discord, https://discord.com/developers/applications, et connectez-vous avec votre compte Discord. Cliquez sur New Application, donnez un nom à votre bot puis validez avec Create.
Ouvrez ensuite la page Bot de l'application. Dans la partie Token, cliquez sur Reset Token et confirmez. Discord affiche alors le token de votre bot. Copiez-le tout de suite, car il n'est plus visible une fois la page quittée, et vous devrez alors en générer un nouveau.
Le token donne le contrôle complet de votre bot. Toute personne qui le possède peut contrôler votre bot comme si c'était le sien. Ne le publiez jamais, ni dans une capture, ni dans un message, ni dans un dépôt Git. S'il a fuité, cliquez sur Reset Token pour l'invalider et reportez le nouveau dans votre fichier .env.
Activer les intents privilégiés si votre bot en a besoin
Toujours sur la page Bot, la section Privileged Gateway Intents regroupe trois accès que Discord ne donne pas par défaut. Le bot d'exemple de ce guide utilise discord.Intents.default(), qui n'en active aucun. Si vous le reprenez tel quel, passez directement à l'étape 2.
| Intent dans discord.py | Ce qu'il permet |
|---|---|
intents.message_content |
Lire le contenu des messages, par exemple pour des commandes à préfixe comme !ping |
intents.members |
Recevoir la liste et les mouvements des membres du serveur |
intents.presences |
Voir le statut et l'activité des membres |
Activez dans le portail uniquement ceux que votre code passe à True. Tant que votre application compte moins de 10 000 utilisateurs, l'interrupteur du portail suffit.
2. Inviter le bot sur votre serveur Discord
Dans le portail, ouvrez la page Installation de votre application. Cochez Guild Install sous Installation Contexts, puis choisissez Discord Provided Link sous Install Link.
Dans Default Install Settings, ajoutez à Guild Install les scopes applications.commands et bot. Le menu Permissions apparaît alors. Sélectionnez-y les permissions dont votre bot a besoin, par exemple Send Messages et View Channels.
Copiez le lien d'installation affiché sur la page, ouvrez-le dans votre navigateur, choisissez votre serveur Discord et validez. Le bot apparaît dans la liste des membres, hors ligne tant que son programme ne tourne pas.
Le générateur de lien de la page OAuth2, section OAuth2 URL Generator, fonctionne aussi. Cochez les mêmes scopes bot et applications.commands, puis copiez l'URL générée en bas de page.
3. Passer le service en environnement Python
Connectez-vous au panel Winheberg et sélectionnez votre service Bot Discord. Dans le menu latéral, cliquez sur Software Changer. La page liste les environnements disponibles. L'environnement actif affiche un bouton REINSTALL au lieu de INSTALL.
Faites une sauvegarde avant de changer d'environnement, surtout si le serveur contient déjà des fichiers auxquels vous tenez.
Si python generic n'est pas l'environnement actif, cliquez sur son bouton INSTALL puis confirmez avec Yes.
4. Préparer les fichiers du bot
Un bot discord.py minimal tient en trois fichiers, tous placés à la racine du serveur.
| Fichier | Rôle |
|---|---|
requirements.txt |
Liste les bibliothèques dont le bot a besoin |
app.py |
Le code du bot, lancé au démarrage |
.env |
Le token, gardé à part du code |
Le fichier requirements.txt déclare discord.py et python-dotenv, la bibliothèque qui lit le fichier .env.
discord.py>=2.7
python-dotenv>=1.2
Le fichier app.py charge le token, connecte le bot et écrit une ligne dans la console une fois la connexion établie.
import os
import discord
from dotenv import load_dotenv
load_dotenv()
intents = discord.Intents.default()
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f"Ready! Logged in as {client.user}")
client.run(os.getenv("DISCORD_TOKEN"))
Le fichier .env contient une seule ligne, avec le token copié à l'étape 1 à la place du texte d'exemple.
DISCORD_TOKEN=COLLEZ_ICI_LE_TOKEN_DE_VOTRE_BOT
N'envoyez pas d'environnement virtuel ni de dossier de bibliothèques. À chaque démarrage, le serveur lance pip install -U sur le fichier requirements.txt et installe lui-même les bibliothèques listées, ou les met à jour.
5. Envoyer les fichiers sur le serveur
Dans le menu latéral, cliquez sur Files. Le bouton Upload permet d'envoyer vos fichiers depuis votre ordinateur. Déposez-les à la racine, c'est-à-dire directement dans le dossier affiché par Files, pas dans un sous-dossier.
Vous pouvez aussi créer chaque fichier sur le serveur. Cliquez sur New file, collez le contenu dans l'éditeur, cliquez sur Create File puis nommez le fichier, requirements.txt dans l'exemple ci-dessous. Procédez de la même façon pour app.py et .env.
Les trois fichiers apparaissent ensuite dans le gestionnaire de fichiers.
Pour un projet volumineux ou de nombreux fichiers, passez par le SFTP. Notre guide « Comment se connecter en SFTP à son serveur gaming ? » détaille la connexion avec FileZilla ou WinSCP, elle fonctionne de la même manière pour un service Bot Discord.
6. Choisir la version de Python et le fichier principal
Dans le menu latéral, cliquez sur Startup. Le menu Docker Image fixe la version de Python utilisée par le bot. Il propose Python 2.7 ainsi que les versions 3.7 à 3.13.
La bibliothèque discord.py 2.7 demande Python 3.8 ou une version plus récente, et python-dotenv 1.2 exige Python 3.10 ou une version plus récente. Pour le bot d'exemple, choisissez donc une image à partir de Python 3.10.
Plus bas, la section Variables contient les réglages du démarrage.
| Variable | Rôle |
|---|---|
| APP PY FILE | Le fichier lancé au démarrage, app.py par défaut |
| REQUIREMENTS FILE | Le fichier qui liste les bibliothèques installées à chaque démarrage, requirements.txt par défaut |
| ADDITIONAL PYTHON PACKAGES | Bibliothèques supplémentaires installées à chaque démarrage, séparées par des espaces |
Si le point d'entrée de votre bot porte un autre nom, bot.py ou main.py par exemple, indiquez-le dans APP PY FILE. Le panel enregistre la valeur dès que vous la saisissez.
Juste après un passage par Software Changer, les champs APP PY FILE et REQUIREMENTS FILE peuvent n'afficher qu'un texte d'exemple grisé. Saisissez les valeurs vous-même, app.py et requirements.txt pour le bot d'exemple.
7. Démarrer le bot et vérifier la console
Dans le menu latéral, cliquez sur Console puis sur Start. Le serveur affiche la version de Python, installe les bibliothèques du requirements.txt puis lance app.py.
Python 3.13.18
Collecting discord.py>=2.7 (from -r requirements.txt (line 1))
Collecting python-dotenv>=1.2 (from -r requirements.txt (line 2))
Successfully installed aiohappyeyeballs-2.7.1 aiohttp-3.14.5 aiosignal-1.4.0 attrs-26.1.0 audioop-lts-0.2.2 discord.py-2.7.1 frozenlist-1.8.0 idna-3.20 multidict-7.2.1 propcache-0.5.4 python-dotenv-1.2.4 yarl-1.25.1
2026-11-02 19:29:33 INFO discord.client logging in using static token
Une fois la connexion à Discord établie, le bot d'exemple écrit la ligne suivante, avec le nom de votre bot. Il passe alors en ligne dans la liste des membres de votre serveur Discord.
Ready! Logged in as MonBot#1234
Aux démarrages suivants, pip répond Requirement already satisfied pour chaque bibliothèque déjà à jour, ce qui accélère le lancement.
En cas de problème
❌ discord.errors.LoginFailure: Improper token has been passed.
- Vérifiez que le fichier s'appelle exactement
.envet qu'il se trouve à la racine, à côté deapp.py - Vérifiez que le nom de la variable est identique dans
.envet dans le code,DISCORD_TOKENdans l'exemple - Recopiez le token en entier, sans espace avant ou après
- Si vous avez cliqué sur Reset Token entre-temps, reportez le nouveau token dans
.env, l'ancien ne fonctionne plus
❌ can't open file '/home/container/bot.py': [Errno 2] No such file or directory
- La valeur de APP PY FILE ne correspond à aucun fichier présent à la racine du serveur
- Ouvrez Files et vérifiez le nom exact de votre fichier principal, majuscules comprises
- Reportez ce nom dans APP PY FILE sur la page Startup, puis redémarrez
❌ ModuleNotFoundError: No module named 'discord'
- Vérifiez que
requirements.txtse trouve à la racine et que son nom correspond à la variable REQUIREMENTS FILE - Vérifiez qu'il contient bien la ligne
discord.py, car le code importe le modulediscordalors que la bibliothèque à installer s'appellediscord.py - Remontez dans la console jusqu'aux lignes de pip pour repérer une éventuelle erreur d'installation, puis redémarrez
❌ discord.errors.PrivilegedIntentsRequired
Le message complet commence par Shard ID None is requesting privileged intents that have not been explicitly enabled in the developer portal.
- Votre code demande un intent privilégié,
message_content,membersoupresences, qui n'est pas activé sur la page Bot du portail des développeurs - Activez l'intent correspondant dans Privileged Gateway Intents
- Ou retirez de votre code l'intent dont le bot n'a pas besoin, puis redémarrez
❌ Les commandes à préfixe ne répondent pas
Si votre bot utilise commands.Bot, la console affiche l'avertissement suivant.
Privileged message content intent is missing, commands may not work as expected.
- Ajoutez la ligne
intents.message_content = Truedans votre code avant de créer le bot - Activez l'intent de contenu des messages dans la section Privileged Gateway Intents du portail, puis redémarrez
Bonnes pratiques
- Gardez le token dans
.env, jamais dansapp.py, et ajoutez.envà votre.gitignoresi votre code est sur Git - Encadrez les versions dans
requirements.txt, par exemplediscord.py>=2.7,<3, car le serveur passe à chaque démarrage à la dernière version qui respecte ces bornes - Faites une sauvegarde avant une mise à jour importante du bot ou de discord.py, notre guide « Comment créer et restaurer une sauvegarde de son serveur gaming ? » explique la marche à suivre
- Utilisez une base MySQL si votre bot doit conserver des données, notre guide « Comment créer une base de données MySQL depuis le panel gaming ? » s'applique aussi au service Bot Discord
- Donnez un accès sous-utilisateur aux personnes qui vous aident plutôt que de partager votre mot de passe, comme l'explique notre guide « Comment ajouter un sous-utilisateur à son panel gaming ? »
Besoin d'aide ?
Si votre bot refuse de démarrer ou ne se connecte pas à Discord malgré ces vérifications, notre équipe est là pour vous aider. Ouvrez un ticket dans le département Technique depuis votre espace client, renseignez le champ Produit lié avec votre service Bot Discord et indiquez le message d'erreur affiché dans la console, sans jamais y joindre le token.
Votre bot Discord tourne désormais sur Winheberg 🤖
