aslain.dev
0%
← Tüm makaleler

Een Discord-bot in Python: startgids met discord.py

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 bot en applications.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.

Devamı için