Comment créer un Bot Discord en Python ?

Article publié le vendredi 14 août 2020 et mis à jour le mercredi 6 mars 2024.

Bot Discord Python

Vous voulez développer votre propre Bot Discord en Python ? Vous ne trouvez pas votre bonheur dans les bots publics mais vous vous débrouillez en Python ?

Python est un des langages les plus populaires pour développer des Bots Discord ce qui en fait un tres bon choix.

Dans cet article nous découvrirons :

  • Comment héberger un bot discord gratuitement ?
  • Qu’est-ce que Discord.py, la libraire de reference pour développer des bots discord en python ?
  • Quel boilerplate utiliser pour votre bot discord ?

Découvrons sans plus tarder comment commencer le développement de votre Bot Discord en Python.

Comment utiliser un bot discord en Python ?

Avant de commencer le développement de notre bot Discord a proprement parler, vous devez :

  • vous inscrire sur Discord
  • vous inscrire sur le Portail des Développeurs Discord
  • Créer une application Discord
  • Preciser que c’est un bot
  • Lui donner des permissions
  • Récupérer vos tokens

Si vous n’avez pas encore tout cela, je vous explique tout sur mon article complet sur les bots discord.

Qu’est-ce que discord.py ?

discord.py

Discord.py est un package Python qui vous fournit un wrapper autour de l’API Discord.

Avec son API moderne, sa facile d’utilisation, sa richesse en features et sa gestion d’asynchrone, Discord.py s’est imposée comme Librairie de reference pour Discord.

Ainsi, vous pouvez voir qu’une bonne partie des bots Discord de top.gg ont été fait avec discord.py.

C’est une API Python moderne utilisant l’async qui couvre à 100 % de l’API Discord.

Discord.py est un projet open-source disponible sur GitHub.

Comment obtenir discord.py ?

Pour obtenir le package python discord.py, il faut installer la librairie Discord.py avec la commande pip.

Avant de commencer, je vous conseille de vous créer un environnement virtuel.

En Python, un environnement virtuel permet d’installer des packages dans un environnement clos. Cela évite d’avoir une quantité importante de packages python sur votre machine. En plus, vous pourrez facilement installer les ressources nécessaires et rien d’autre en créant un fichier requirements.txt pour partager votre projet.

Créons donc notre virtual env avec la commande :

python3 -m venv <nom_de_votre_environnement_virtuel>

Suivi de

source <nom_de_votre_environnement_virtuel>/bin/activate

Finalement, on va installer le la librairie discord.py en fonction de notre système d’exploitation

Pour Mac OSX et Linux :

python -m pip install discord.py

Pour Windows :

py -3 -m pip install -U discord.py

Comment créer un bot discord.py ?

Une fois tout installé et avec votre token, vous pouvez créer votre bot discord.

Il va falloir définir les Intents dans le code aussi, si vous avez coché les 3 dans le Discord Developer Portal, vous pouvez faire intents = discord.Intents.all().

Et puis on va declarer une instance de client auquel on passe nos “Intents”.

Finalement, on va lancer le bot avec client.run en lui passant le token.

Voici à quoi ca ressemble :

import os
import discord

intents = discord.Intents.all()
client = discord.Client(intents=intents)

# On va coder nos fonctions ici

client.run("VOTRE_TOKEN_DISCORD_APP")

L’événement on_ready

Le premier event qu’on va créer est on_ready. Cette fonction est exécutée quand le bot est pret. C’est la qu’on crée la logique d’importation de commandes et cogs et tout ce dont on a besoin une fois que le bot est pret.

Dans cet exemple, on voit comment afficher que le bot est pret dans le terminal depuis lequel le script a été lancé.

@client.event
async def on_ready():
  print(f"Le bot discord est prêt {client.user}")

L’événement on_message

L’event on_message permet de réagir quand un message est écrit dans un channel.

Par mesure de sécurité on évite de réagir quand le bot a envoyé un message pour ne pas partir en boucle infinie.

on_message prend un message en paramètre qui contient toutes les informations du message comme son contenu, son auteur, le channel et le salon dans lequel il a été poste etc.

@client.event
async def on_message(message):
  if message.author == client.user:
    return
  elif message.content.startswith('!bonjour'):
    await message.channel.send('Bonjour !')

L’événement on_member_join

On peut aussi souhaiter la bienvenue à un membre qui rejoint une guilde avec la fonction on_member_join. Ici, on récupère VOTRE_CHANNEL_ID en faisant clique droit sur un salon et puis récupérer l’ID du salon.

client.get_partial_messageable permet de récupérer le channel dans lequel on veut souhaiter la bienvenue à partir de son identifiant.

@client.event
async def on_member_join(member):
  channel = client.get_partial_messageable(VOTRE_CHANNEL_ID)
  await channel.send(f"Bienvenue {member.name}")

Code client bot discord complet

Et quand on met tout ca ensemble, voici une version minimale d’un bot qui réagit à 3 types d’events :

  • on_ready quand le bot est lancé
  • on_message quand un message est écrit dans le channel
  • on_member_join quand un nouveau membre rejoint le channel
import os
import discord

intents = discord.Intents.all()
client = discord.Client(intents=intents)

@client.event
async def on_ready():
  print(f"Le bot discord est prêt {client.user}")


@client.event
async def on_message(message):
  if message.author == client.user:
    return
  elif message.content.startswith('!bonjour'):
    await message.channel.send('Bonjour !')


@client.event
async def on_member_join(member):
  welcome_channel_id = os.getenv("WELCOME_CHANNEL_ID")
  channel = client.get_partial_messageable(welcome_channel_id)
  await channel.send(f"Bienvenue {member.name}")


client.run(token="VOTRE_TOKEN_BOT_DISCORD")

Une fois installé sur votre serveur, le bot répondra quand vous tapez $hello.

Une fonction appelée on_message et une autre appelée on_ready.

on_ready qui se produit au démarrage du bot et on_message, chaque fois qu’un messager est reçu.

La fonction on_ready est plus simple, alors regardons d’abord celle-là. Tout ce qu’elle fait, c’est imprimer les informations sur le client, confirmant que vous êtes connecté comme étant le bon bot et que la connexion a été établie avec succès.

La fonction on_message() commence par une déclaration if qui vérifie si l’auteur du message est le client lui-même. Ces messages sont ignorés, car cela signifie qu’il s’agit d’un message envoyé par le robot lui-même.

Tout en bas du fichier, après les définitions des fonctions, il y a simplement un appel à client.run().

Comment créer des commandes avec discord.py ?

En plus du client, le module discord propose une extension pour créer des commandes.

Pour avoir accès a la creation de commande, il faut importer commands de discord.ext en faisant : from discord.ext import commands.

On doit d’abord créer notre objet Bot et choisir un préfixe de commande en faisant :

intents = discord.Intents.all()

bot = commands.Bot(command_prefix="!", intents=intents)

Le préfixe de commande command_prefix permet de définir quel symbole va précéder la commande, ici !.

Ensuite, on peut créer des commandes en utilisant le décorateur @bot.command() suivi d’une fonction.

⚠️ Cette fois-ci, il faut ajouter des parentheses au décorateur ().

Maintenant, la fonction qu’on crée va servir de commande et on pourra l’appeler dans discord avec son nom.

Par exemple :

@bot.command()
async def ping(context):
  await context.send("Pong")

La fonction ping nous donne un paramètre : context qui permet d’interagir avec la guilde discord, ici on l’utilise pour envoyer un message "Pong" avec la méthode send() de l’object context.

Et voici le code complet pour la commande Ping :

import os
from dotenv import load_dotenv
import discord
from discord.ext import commands

load_dotenv()

intents = discord.Intents.all()
bot = commands.Bot(command_prefix="!", intents=intents)

@bot.command()
async def ping(context):
  await context.send("Pong")


token = os.getenv("BOT_DISCORD")
bot.run(token=token)

Comment créer un embedding avec discord.py ?

Continuons le tutoriel en créant une commande d’aide qui liste toutes nos commandes (meme si on n’en n’a qu’une pour le moment).

On va utiliser un embedding pour rendre l’aide plus jolie.

Pour ca, on va créer une nouvelle commande aide.

Comme pour notre autre commande, on utilise le décorateur @bot.command() et puis on declare notre fonction :

@bot.command()
async def aide(context):
  pass

Pour créer un Embedding, on crée une instance de la classe discord.Embed en lui passant des attributs. Les instances d’embed ont aussi divers setters pour ajouter des attributs dynamiquement.

Continuons avec notre embedding auquel on va passer un titre, une description et une couleur aléatoire :

@bot.command()
async def aide(context):
  embed = discord.Embed(
    title="Commandes",
    description="Une liste des commandes du serveur",
    colour=discord.Colour.random()
  )

Ensuite, on peut ajouter des attributs comme une image thumbnail avec set_thumbnail auquel on peut passer une URL par exemple :

embed.set_thumbnail(url="https://www.commentcoder.com/favicon.ico")

On peut aussi ajouter un field pour notre commande !ping avec :

embed.add_field(name="!ping", value="Répond Pong")
  • name est le nom de la commande
  • value est sa valeur, le texte explicatif de la fonction

Finalement, on doit envoyer notre embedding comme on envoie un message avec context.send(embed=embed).

Le code complet pour l’embedding et la commande aide est :


@bot.command()
async def aide(context):
  embed = discord.Embed(
      title="Commandes",
      description="Une liste des commandes du serveur",
      colour=discord.Colour.random()
  )
  embed.set_thumbnail(url="https://www.commentcoder.com/favicon.ico")
  embed.add_field(name="!ping", value="Répond Pong")
  await context.send(embed=embed)

Ce qui devrait donner un message comme ca, avec une couleur différente a chaque fois.

Embedding Bot Discord Python

Et voici le code complet pour les commandes avec un embedding :

import os
from dotenv import load_dotenv
import discord
from discord.ext import commands

load_dotenv()

client = discord.Client(intents=intents)
bot = commands.Bot(command_prefix="!", intents=intents)

@bot.command()
async def ping(context):
  await context.send("Pong")


@bot.command()
async def aide(context):
  embed = discord.Embed(
      title="Commandes",
      description="Une liste des commandes du serveur",
      colour=discord.Colour.random()
  )
  embed.set_thumbnail(url="https://www.commentcoder.com/favicon.ico")
  embed.add_field(name="!ping", value="Répond Pong")
  await context.send(embed=embed)


token = os.getenv("BOT_DISCORD")
bot.run(token=token)

Comment héberger un Bot Discord développé en Python

Pour héberger votre bot discord, il faut juste que votre fichier tourne en permanence.

Vous pouvez le faire tourner sur votre ordinateur s’il est allume 24/7, sur une raspberry pi ou dans le cloud.

Pour héberger et faire tourner votre bot, il existe des solutions gratuites et payantes comme Railway, Heroku, PythonAnywhere, AWS ou un VPS.

Je vous montre quelques manières de faire ci-dessous, mais avant, voyons quel est l’hébergeur qui convient le mieux à vos besoins.

Quel est le meilleur hébergeur pour un bot discord Python ?

# Nom du service Avantage
1 Railway Gratuit 500h par mois
3 Replit Gratuit si le code est public
2 PythonAnywhere Gratuit avec des limitations
4 Heroku Le plus compliqué et payant

Comment héberger un Bot Discord Python sur Railway ?

Railway est un concurrent plus récent aux autres services d’hébergement. Ils disposent d’un free tier de 5$ par mois, ce qui est plus qu’assez pour votre bot Discord.

Comment héberger un Bot Discord Python sur Railway ?

Vous pouvez essayer gratuitement Railway en cliquant sur ce lien.

😭 Railway ne propose plus son plan gratuit depuis le 1er Août 2023. Je vous tiendrai au courant quand je trouverai un meilleur hébergeur gratuit.

1. Inscrivez-vous sur Railway et validez votre compte

Vous pouvez vous inscrire sur Railway.app et commencer à utiliser leur service gratuitement.

Vous recevrez l’équivalent de 2 dollars ou 200 heures d’exécution de base pour votre bot discord.

Vous pourrez passer à 5 dollars ou 500 heures par mois en validant votre adresse email et en acceptant leurs conditions générales.

🤑 pro tip : Il y environ 730 heures dans un mois (en fonction du mois). Il est donc possible d’avoir 2 comptes Railway (qui vous offriront 500h x 2 = 1000 heures) et de jongler entre les deux si vous voulez rester 100% gratuit.

Vous pourrez lier une carte de crédit et ajouter du crédit sur votre compte pour profiter d’un plan complet “Developer Plan”.

Bref, continuons.

2. Créez un nouveau projet sur GitHub

J’ai créé un boilerplate sur github pour vous aider.

Boilerplate Bot Discord en Python pour Railway.app

Si vous n’avez encore rien, vous pouvez partir de ce boilerplate pour commencer le développement de votre bot discord en Python.

Si vous avez déjà développé un bot discord que vous souhaitez héberger sur Railway, vous pouvez le faire en passant par Github.

Railway a besoin de 3 fichiers si vous passez par GitHub : un fichier Procfile, un fichier runtime.txt et un fichier requirements.txt. Vous aurez besoin ces 3 fichiers de configuration en plus de vos fichiers de scripts python.

Procfile

web: python <le_nom_de_votre_script_principal>.py

Remplacez <le_nom_de_votre_script_principal> par le nom du fichier que vous lancez pour faire tourner votre bot.

runtime.txt

python-3.9.5

La version de Python que vous souhaitez utiliser, préférez la dernière version LTS (long term support).

requirements.txt

discord.py

Toutes les modules Python que vous utilisez. Vous pouvez récupérer la liste de votre projet avec la commande : pip freeze > requirements.txt depuis l’environnement python de votre bot discord.

3. Ajoutez votre token discord

Si vous ne savez pas comment récupérer votre le token discord de votre bot, je vous recommande mon article sur les bots discord.

Créer un nouveau Bot Discord

En bref, vous devez :

  • Vous rendre sur le “Developer Portal” de Discord
  • Créer une nouvelle application avec le bouton “New Application”
  • Vous rendre dans l’onglet “Bot”, appuyer sur “Reset Token” et récupérer votre token

⚠️ Copiez ce token dans un endroit sécurisé, on va en avoir besoin dans l’étape suivante.

Tant que vous êtes dans le Developer Portal, vous devrez configurer les “Intents” de votre bot.

Si vous avez utilisé mon boilerplate, vous devrez activer l’intent “MESSAGE CONTENT INTENT”.

Une fois que c’est fait, vous aurez besoin d’un lien pour rajouter le bot à votre salon discord. Allez dans OAuth 2 puis URL Generator.

Dans Scopes, choisissez Bot.

Dans Bot Permissions, choisissez Read Messages/View Channels et Send Messages.

Copiez enfin le lien généré en bas de page et coller le dans votre navigateur.

Permissions et Scope Application Bot Discord sur le Developer Portal

Choisissez votre serveur et vous aurez fini de lier votre bot à votre guilde discord.

Si tout s’est bien passé vous devriez voir votre bot apparaître hors ligne.

4. Importez votre bot depuis Github vers Railway

Dans votre Dashboard Railway, appuyez sur New Project.

Choisissez Deploy from GitHub repo puis le repo de votre bot discord.

Héberger un bot discord python sur railway

Choisissez l’option Deploy now.

La dernière chose qu’il nous reste à faire est d’ajouter le token de notre bot discord dans les variables d’environnement de Railway.

Il s’agit du token de votre bot discord qu’on a récupéré dans l’étape précédente (et que je vous avais dit de garder dans un endroit sécurisé 😅).

Pas de panique si vous l’avez perdu, vous pouvez un créer un nouveau sur le Developer Portal de Discord.

Cliquez sur la carte de votre projet sur Railway puis rendez-vous dans l’onglet Variables.

Appuyez sur New Variable puis ajoutez le nom de la variable “VARIABLE_NAME” (DISCORD_BOT_TOKEN pour mon boilerplate) et votre token dans “VALUE”.

Ajouter une variable d'environnement sur Railway.app

Et voilà, c’est fini 🎉 Vous devriez voir votre bot passer en ligne sur votre salon discord quand Railway aura fini de déployer votre projet.

Bot discord fonctionnel

Comment héberger un Bot Discord Python sur Replit ?

Replit est une plateforme qui permet de coder directement sur un site web ainsi que de lancer des programmes.

Comment héberger un Bot Discord Python sur Replit ?

Il est donc possible d’utiliser Replit pour coder et lancer des scripts Python, dont des bots Discord développés en Python.

Replit dispose d’un plan gratuit si vous acceptez que vos “Repls” (vos projets) soient publiques, visibles par tous. Vous n’aurez pas non plus d’accès SSH avec le plan gratuit.

Un autre problème est qu’un projet hébergé gratuitement sur Replit se coupera automatiquement après une heure s’il n’y a pas eu d’interaction avec.

Il nous faut donc un service qui va “pinger” notre bot au moins une fois par heure pour que votre bot tourne en permanence.

Heureusement, une solution gratuite existe : UptimeRobot.

UptimeRobot nous permettra d’interagir avec notre bot Discord toutes les 5 minutes pour s’assurer qu’il tourne en permanence.

Host gratuitement un bot python sur PythonAnywhere ?

Host un Bot Discord sur PythonAnywhere

Pour déployer notre bot Discord, nous allons d’abord créer un compte gratuit avec PythonAnywhere.

PythonAnywhere un service qui permet de déployer facilement des applications Python dans le cloud. Sur la page de connexion, saisissez votre adresse email et votre mot de passe puis cliquez sur “Connexion”.

Un fois sur PythonAnywhere, rendez-vous sur la page du dashboard.

Cliquez ensuite sur “Upload a file”, localiser votre script de bot Discord et uploadez-le.

Il vous suffira ensuite de lancer le fichier .py que vous venez d’uploader en cliquant dessus et puis >>> Run this file.

Comment héberger un Bot Discord Python sur Heroku ?

Comment héberger un Bot Discord Python sur Heroku ?

🤑 Heroku a supprimé son plan gratuit en 2023. Il ne vous sera donc pas possible de commencer gratuitement à héberger votre bot discord sur Heroku.

Je vous conseille Railway.app qui est bien plus simple et avec qui vous pouvez commencer gratuitement (500 heures par mois).

Pour déployer votre bot discord en Python vous pouvez utiliser un compte Heroku.

Installer Heroku sur Mac OSX

brew install heroku/brew/heroku

ou avec le lien du client Mac OSX Heroku.

Installer Heroku sur Windows

Pour Windows, vous pouvez passer par les clients desktop aussi bien pour Windows 32 bits que 64 bits.

Si vous ne savez pas quelle version vous avez, vous avez sûrement plutôt le 64bits.

Windows 64-bits

Le client GUI Heroku Windows 64 bit.

Windows 32-bits

Le client GUI Heroku Windows 32 bit.

Installer Heroku sur Ubuntu

sudo snap install heroku --classic

Une fois installe, tapez heroku login dans votre terminal.

Ensuite heroku create.

Avec votre Procfile qui contient :

worker: python nom_de_votre_bot.py

Puis git push heroku master.

Vous savez maintenant utiliser un bot discord en Python !

Dans cet article vous avez appris comment faire fonctionner un bot discord en Python.

Vous pouvez maintenant aller plus loin en améliorant votre script.

Les lecteurs de cet article on aussi aimé :

Comment Coder

Je m'appelle Thomas. J'ai commencé à coder dans mon enfance. Depuis ma sortie de la première promo de l'École 42, j'ai développé des centaines d'applications et sites web. Sur ce blog, je vous donne les meilleurs conseils et astuces pour apprendre comment apprendre à coder efficacement.