Je hoeft een Discord-bot niet alleen in Node.js te schrijven — Python en de discord.py-bibliotheek zijn ook een krachtige, zeer leesbare optie. Een Discord-bot bouwen in Python is vooral prettig voor bots gericht op dataverwerking en automatisering. In deze gids bouwen we een bot vanaf nul met discord.py 2.x en schrijven we een commando dat met een game-database verbindt.
Vereisten
- Python 3.10+.
pip install discord.py aiomysql.- Een bot + token in het Developer Portal; nodig hem uit met de scopes
botenapplications.commands.
Je eerste bot: een /ping-commando
In discord.py 2.x worden slash-commando's beheerd via de command tree. bot.tree.sync() uploadt de commando's naar 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")
De intents bepalen welke gebeurtenissen de bot ontvangt. Geprivilegieerde intents zoals de ledenlijst of berichtinhoud moeten in het Developer Portal worden ingeschakeld.
Verbinden met een game-database
Een asynchrone bot moet de database ook asynchroon bevragen, zodat andere commando's niet blokkeren. Met aiomysql, een commando dat het level van een speler ophaalt:
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]}")
Hier is %s een parameter-placeholder; schrijf gebruikersinvoer nooit rechtstreeks in de query — dit voorkomt SQL-injectie.
Verschil met Node.js
discord.py leest helder met zijn synchroon ogende async/await en geeft directe toegang tot Python's rijke data-ecosysteem (pandas, requests, ML-bibliotheken). Node.js blinkt uit in event-gedreven, zeer gelijktijdig werk. De juiste keuze hangt af van wat je bot doet.
De bot draaiende houden
Je kunt de bot 24/7 op een VPS draaien met een systemd-service of pm2's Python-ondersteuning. Automatisch herstarten bij een crash en logs bewaren zijn essentieel.
Veelgestelde vragen
Wordt discord.py nog onderhouden?
Ja. Het wordt actief ontwikkeld met de 2.x-lijn en ondersteunt slash-commando's (app_commands) volledig.
Mijn slash-commando's verschijnen niet — waarom?
Meestal is bot.tree.sync() niet aangeroepen, of wacht je op de verspreiding van globale commando's. Synchroniseren naar één server tijdens ontwikkeling geeft direct resultaat.
Kan ik Python en Node.js in dezelfde bot gebruiken?
Eén bot wordt in één taal geschreven, maar je kunt verschillende bots in verschillende talen schrijven die dezelfde database delen.
Wil je een bot op basis van Python? Ik bouw bots die game-data verwerken en automatiseren — neem contact op.