Vous n'êtes pas obligé d'écrire un bot Discord uniquement en Node.js — Python et la bibliothèque discord.py sont aussi une option puissante et très lisible. Créer un bot Discord en Python est particulièrement confortable pour les bots orientés traitement de données et automatisation. Dans ce guide, nous construisons un bot de zéro avec discord.py 2.x et écrivons une commande connectée à une base de jeu.
Prérequis
- Python 3.10+.
pip install discord.py aiomysql.- Un bot + token dans le Developer Portal ; invitez-le avec les scopes
botetapplications.commands.
Votre premier bot : une commande /ping
Dans discord.py 2.x, les commandes slash sont gérées via l'arbre de commandes. bot.tree.sync() envoie les commandes à Discord :
import discord
from discord.ext import commands
intents = discord.Intents.default()
bot = commands.Bot(command_prefix="!", intents=intents)
@bot.event
async def on_ready():
await bot.tree.sync() # slash komutlarini Discord'a yukle
print(f"Giris yapildi: {bot.user}")
@bot.tree.command(name="ping", description="Pong ile yanitlar")
async def ping(interaction: discord.Interaction):
await interaction.response.send_message("Pong! 🏓")
bot.run("TOKEN")
Les intents déterminent quels événements le bot reçoit. Les intents privilégiés comme la liste des membres ou le contenu des messages doivent être activés dans le Developer Portal.
Se connecter à une base de données de jeu
Un bot asynchrone doit aussi interroger la base de façon asynchrone, pour ne pas bloquer les autres commandes. Avec aiomysql, une commande qui récupère le niveau d'un joueur :
import aiomysql
pool = await aiomysql.create_pool(
host="localhost", user="bot", password="***", db="player"
)
async with pool.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute(
"SELECT level FROM player WHERE name = %s", (name,)
)
row = await cur.fetchone()
await interaction.response.send_message(f"{name} seviye {row[0]}")
Ici, %s est un paramètre ; n'écrivez jamais l'entrée utilisateur directement dans la requête — cela évite les injections SQL.
La différence avec Node.js
discord.py se lit clairement avec son async/await d'apparence synchrone et donne un accès direct au riche écosystème de données de Python (pandas, requests, bibliothèques ML). Node.js brille dans l'événementiel très concurrent. Le bon choix dépend de ce que fait votre bot.
Maintenir le bot en service
Vous pouvez faire tourner le bot 24/7 sur un VPS avec un service systemd ou le support Python de pm2. Le redémarrage automatique en cas de crash et la conservation des journaux sont essentiels.
Questions fréquentes
discord.py est-il toujours maintenu ?
Oui. Il est activement développé avec la ligne 2.x et prend pleinement en charge les commandes slash (app_commands).
Mes commandes slash n'apparaissent pas, pourquoi ?
Le plus souvent, bot.tree.sync() n'a pas été appelé, ou vous attendez la propagation des commandes globales. Synchroniser sur un seul serveur en développement donne un résultat instantané.
Puis-je utiliser Python et Node.js dans le même bot ?
Un seul bot s'écrit dans un seul langage, mais vous pouvez écrire des bots différents dans des langages différents et leur faire partager la même base.
Vous voulez un bot en Python ? Je crée des bots qui traitent les données de jeu et automatisent les tâches — contactez-moi.