aslain.dev
0%
← Tüm makaleler

Ein Discord-Bot in Python: Einstiegsleitfaden mit discord.py

Du musst einen Discord-Bot nicht nur in Node.js schreiben — Python und die discord.py-Bibliothek sind ebenfalls eine mächtige, sehr lesbare Option. Einen Discord-Bot in Python zu bauen ist besonders angenehm für daten- und automatisierungslastige Bots. In diesem Leitfaden bauen wir einen Bot von Grund auf mit discord.py 2.x und schreiben einen Befehl, der sich mit einer Spieldatenbank verbindet.

Voraussetzungen

  • Python 3.10+.
  • pip install discord.py aiomysql.
  • Ein Bot + Token im Developer Portal; lade ihn mit den Scopes bot und applications.commands ein.

Dein erster Bot: ein /ping-Befehl

In discord.py 2.x werden Slash-Befehle über den Command-Tree verwaltet. bot.tree.sync() lädt die Befehle zu Discord hoch:

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")

Die intents legen fest, welche Ereignisse der Bot empfängt. Privilegierte Intents wie die Mitgliederliste oder Nachrichteninhalte müssen im Developer Portal aktiviert werden.

Mit einer Spieldatenbank verbinden

Ein asynchroner Bot sollte die Datenbank ebenfalls asynchron abfragen, um andere Befehle nicht zu blockieren. Mit aiomysql ein Befehl, der das Level eines Spielers abruft:

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 ist %s ein Parameter-Platzhalter; schreibe Nutzereingaben nie direkt in die Abfrage — das verhindert SQL-Injection.

Der Unterschied zu Node.js

discord.py liest sich klar mit seinem synchron wirkenden async/await und bietet direkten Zugriff auf Pythons reiches Daten-Ökosystem (pandas, requests, ML-Bibliotheken). Node.js glänzt bei ereignisgesteuerter, hochgradig nebenläufiger Arbeit. Die richtige Wahl hängt davon ab, was dein Bot tut.

Den Bot am Laufen halten

Du kannst den Bot rund um die Uhr auf einem VPS mit einem systemd-Service oder pm2s Python-Unterstützung betreiben. Auto-Neustart bei Absturz und Log-Führung sind essenziell.

Häufige Fragen

Wird discord.py noch gepflegt?

Ja. Es wird mit der 2.x-Linie aktiv weiterentwickelt und unterstützt Slash-Befehle (app_commands) vollständig.

Meine Slash-Befehle erscheinen nicht — warum?

Meist wurde bot.tree.sync() nicht aufgerufen, oder du wartest auf die Verbreitung globaler Befehle. Das Synchronisieren auf einen einzelnen Server in der Entwicklung liefert sofortige Ergebnisse.

Kann ich Python und Node.js im selben Bot nutzen?

Ein einzelner Bot wird in einer Sprache geschrieben, aber du kannst verschiedene Bots in verschiedenen Sprachen schreiben, die sich dieselbe Datenbank teilen.

Willst du einen Python-basierten Bot? Ich baue Bots, die Spieldaten verarbeiten und Aufgaben automatisieren — kontaktiere mich.

Devamı için