Discord-Bot in Python: So erstellen Sie Ihren eigenen Bot!

Ein eigener Discord-Server ist mitunter viel Aufwand, weshalb Bots, die sich um administrative Funktionen kümmern, beliebt sind. Ein solcher Bot lässt sich mithilfe der Python-Bibliothek discord.py und grundlegenden Python-Kenntnissen einfach selbst erstellen.

Schritt für Schritt zum eigenen Discord-Bot in Python

Bevor Sie mit der Programmierung Ihres Bots loslegen können, sollten Sie einen Discord-Bot erstellen. Hierzu können Sie bei Discord eine eigene Application anlegen. Im Anschluss steht Ihrem Discord-Bot nichts mehr im Wege. Welchen Code Sie für Ihren Discord-Bot benötigen, hängt davon ab, welche Aufgaben automatisiert werden sollen. Der in dieser Anleitung vorgestellte Bot soll Rollen innerhalb eines Discord-Servers hinzufügen.

Schritt 1: discord.py installieren

Bei der Erstellung Ihres Bots bedienen Sie sich vorrangig der Python-Library discord.py, weshalb Sie diese zunächst auf Ihrem System installieren müssen. Wie in Python üblich erfolgt die Installation mithilfe von pip. Unter Windows sieht der benötigte Terminalbefehl wie folgt aus:

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

Schritt 2: Python-Dokument anlegen

Legen Sie ein neues Python-Dokument an, in dem Sie Ihren Bot coden. Sie können für Ihre Python-Datei diverse Code-Editoren oder eine integrierte Entwicklungsumgebung (IDE) wie beispielsweise Pycharm nutzen.

Schritt 3: Verbindung zu Discord herstellen

Importieren Sie zunächst die Discord-Bibliothek in Ihr Python-Dokument und setzen Sie das Bot-Token, das Sie während der Registrierung Ihres Discord-Bots auf der Discord-Developerseite erhalten haben. Hierzu ersetzen Sie den Platzhalter durch Ihr individuelles Bot-Token:

import discord
TOKEN = token_placeholder
python

Sie benötigen die Bibliothek, um mit der Discord-API zu interagieren. Damit Sie sich mit Discord verbinden können, ist außerdem eine Instanz des sogenannten Client-Objekts erforderlich. Diese erstellen Sie mit folgendem Code:

client = discord.Client()
python

Schritt 4: Überprüfen, ob die Verbindung erfolgreich aufgebaut wurde

Als nächstes sollten Sie eine asynchrone Methode in Ihr Python-Dokument einbinden, die überprüft, ob die Verbindung Ihres Bots mit dem Discord-Server reibungslos funktioniert hat. Hierfür reagieren Sie auf das on_ready-Event, das in der discord.py-API definiert ist. Damit Ihre Funktion als Event-Handler fungiert, nutzen Sie den Python-Funktionsdekorator @client.event.

@client.event
async def on_ready():
    print(f'{client.user} ist mit folgenden Servern verbunden:\n')
    for server in client.guilds:
        print(f'{server.name}(id: {server.id})')
python
Hinweis

Bei der Programmierung von Discord-Bots werden häufig asynchrone Funktionen eingesetzt. Dies hat zur Folge, dass die Funktion in einem dedizierten vom Hauptthread entkoppelten Thread ausgeführt wird. Auf diese Weise wird der Hauptthread nicht blockiert und Aufgaben des Bots können parallel ausgeführt werden.

Schritt 5: Funktionalität zu Ihrem Bot hinzufügen

Die discord.py-API definiert ein Event, das Ihnen dabei hilft, Ihre Bot-Funktionalität auszuführen – das on_message-Event. Dieses Ereignis wird immer dann getriggert, wenn Ihr Discord-Bot eine Nachricht empfängt. Eine Methode, die dieses Event behandelt, sollte zunächst überprüfen, von welchem Absender bzw. welcher Absenderin die Nachricht stammt, und anschließend die gewünschte Funktionalität ausführen – in unserem Fall das Hinzufügen von Rollen.

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('!add_role'):
        # Rollenname herausfinden
        role_name = message.content.split(' ')[1]

        # entsprechende Discord-Rolle suchen
        role = discord.utils.get(message.guild.roles, name=role_name)

        # Überprüfung, ob die Rolle existiert
        if role is None:
            await message.channel.send(f'Role "{role_name}" existiert nicht)
            return

        # Zuweisung der Rolle
        await message.author.add_roles(role)
        await message.channel.send(f'Rolle "{role_name}" wurde hinzugefuegt zu {message.author}')

Zunächst wird in der Funktion überprüft, ob die empfangene Nachricht vom Discord-Bot selbst stammt. Ist dies der Fall, wird die Funktion mit dem return-Statement verlassen.

In einem zweiten Schritt wird der Inhalt der Nachricht genauer untersucht. Wenn diese mit der Zeichenkette !add_role beginnt, interpretiert der Bot sie als einen Befehl. Das heißt, dass die Userinnen und User des Servers Anfragen an den Discord-Bot mit dem String !add_role beginnen müssen. Natürlich können Sie jede beliebige Zeichenkette als Befehl nutzen. Es empfiehlt sich jedoch, darauf zu achten, dass es sich um Zeichenketten handelt, die im natürlichen Sprachgebrauch nicht vorkommen.

Aus einer Nachricht, die vom Bot als korrekter Befehl interpretiert wird, wird im Folgenden mithilfe der Python-Funktion split() der Name der gewünschten Rolle herausgefunden. In einem weiteren Schritt wird die entsprechende Rolle auf Ihrem Server gesucht. Hierzu können Sie sich das message-Objekt zunutze machen, das unter dem Punkt message.guild diverse Informationen über Ihren Server bereithält.

Falls die Rolle nicht existiert und somit den Wert „None“ hat, wird eine Fehlermeldung ausgegeben und die Funktion mit der return-Anweisung verlassen. Ansonsten wird die Rolle entsprechend zugewiesen. Hierbei wird die Funktion add_roles aus der discord.py-Bibliothek genutzt, die ebenfalls auf dem message-Objekt definiert ist.

Hinweis

Ihr Discord-Bot kann selbstverständlich beliebige Aktionen ausführen. So können Sie Bots erstellen, die ähnliche Aufgaben übernehmen wie der beliebte Chat- und Moderationsbot MEE6, oder eigene Discord-Music-Bots schreiben. Wir haben uns für ein einfaches Beispiel entschieden, das auch für Anfängerinnen und Anfänger nachvollziehbar ist.