Ein eigener Discord-Server ist mitunter viel Aufwand, weshalb Bots, die sich um ad­mi­nis­tra­ti­ve Funk­tio­nen kümmern, beliebt sind. Ein solcher Bot lässt sich mithilfe der Python-Bi­blio­thek discord.py und grund­le­gen­den Python-Kennt­nis­sen einfach selbst erstellen.

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

Bevor Sie mit der Pro­gram­mie­rung Ihres Bots loslegen können, sollten Sie einen Discord-Bot erstellen. Hierzu können Sie bei Discord eine eigene Ap­pli­ca­ti­on 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 au­to­ma­ti­siert werden sollen. Der in dieser Anleitung vor­ge­stell­te Bot soll Rollen innerhalb eines Discord-Servers hin­zu­fü­gen.

Schritt 1: discord.py in­stal­lie­ren

Bei der Er­stel­lung Ihres Bots bedienen Sie sich vorrangig der Python-Library discord.py, weshalb Sie diese zunächst auf Ihrem System in­stal­lie­ren müssen. Wie in Python üblich erfolgt die In­stal­la­ti­on mithilfe von pip. Unter Windows sieht der benötigte Ter­mi­nal­be­fehl 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 in­te­grier­te Ent­wick­lungs­um­ge­bung (IDE) wie bei­spiels­wei­se Pycharm nutzen.

Schritt 3: Ver­bin­dung zu Discord her­stel­len

Im­por­tie­ren Sie zunächst die Discord-Bi­blio­thek in Ihr Python-Dokument und setzen Sie das Bot-Token, das Sie während der Re­gis­trie­rung Ihres Discord-Bots auf der Discord-De­ve­lo­per­sei­te erhalten haben. Hierzu ersetzen Sie den Platz­hal­ter durch Ihr in­di­vi­du­el­les Bot-Token:

import discord
TOKEN = token_placeholder
python

Sie benötigen die Bi­blio­thek, um mit der Discord-API zu in­ter­agie­ren. Damit Sie sich mit Discord verbinden können, ist außerdem eine Instanz des so­ge­nann­ten Client-Objekts er­for­der­lich. Diese erstellen Sie mit folgendem Code:

client = discord.Client()
python

Schritt 4: Über­prü­fen, ob die Ver­bin­dung er­folg­reich aufgebaut wurde

Als nächstes sollten Sie eine asyn­chro­ne Methode in Ihr Python-Dokument einbinden, die überprüft, ob die Ver­bin­dung Ihres Bots mit dem Discord-Server rei­bungs­los funk­tio­niert 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-Funk­ti­ons­de­ko­ra­tor @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 Pro­gram­mie­rung von Discord-Bots werden häufig asyn­chro­ne Funk­tio­nen ein­ge­setzt. Dies hat zur Folge, dass die Funktion in einem de­di­zier­ten vom Haupt­th­read ent­kop­pel­ten Thread aus­ge­führt wird. Auf diese Weise wird der Haupt­th­read nicht blockiert und Aufgaben des Bots können parallel aus­ge­führt werden.

Schritt 5: Funk­tio­na­li­tät zu Ihrem Bot hin­zu­fü­gen

Die discord.py-API definiert ein Event, das Ihnen dabei hilft, Ihre Bot-Funk­tio­na­li­tät aus­zu­füh­ren – das on_message-Event. Dieses Ereignis wird immer dann ge­trig­gert, wenn Ihr Discord-Bot eine Nachricht empfängt. Eine Methode, die dieses Event behandelt, sollte zunächst über­prü­fen, von welchem Absender bzw. welcher Ab­sen­de­rin die Nachricht stammt, und an­schlie­ßend die ge­wünsch­te Funk­tio­na­li­tät ausführen – in unserem Fall das Hin­zu­fü­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 emp­fan­ge­ne 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 un­ter­sucht. Wenn diese mit der Zei­chen­ket­te !add_role beginnt, in­ter­pre­tiert 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 Zei­chen­ket­te als Befehl nutzen. Es empfiehlt sich jedoch, darauf zu achten, dass es sich um Zei­chen­ket­ten handelt, die im na­tür­li­chen Sprach­ge­brauch nicht vorkommen.

Aus einer Nachricht, die vom Bot als korrekter Befehl in­ter­pre­tiert wird, wird im Folgenden mithilfe der Python-Funktion split() der Name der ge­wünsch­ten Rolle her­aus­ge­fun­den. In einem weiteren Schritt wird die ent­spre­chen­de Rolle auf Ihrem Server gesucht. Hierzu können Sie sich das message-Objekt zunutze machen, das unter dem Punkt message.guild diverse In­for­ma­tio­nen über Ihren Server be­reit­hält.

Falls die Rolle nicht existiert und somit den Wert „None“ hat, wird eine Feh­ler­mel­dung aus­ge­ge­ben und die Funktion mit der return-Anweisung verlassen. Ansonsten wird die Rolle ent­spre­chend zu­ge­wie­sen. Hierbei wird die Funktion add_roles aus der discord.py-Bi­blio­thek genutzt, die ebenfalls auf dem message-Objekt definiert ist.

Hinweis

Ihr Discord-Bot kann selbst­ver­ständ­lich beliebige Aktionen ausführen. So können Sie Bots erstellen, die ähnliche Aufgaben über­neh­men wie der beliebte Chat- und Mo­de­ra­ti­ons­bot MEE6, oder eigene Discord-Music-Bots schreiben. Wir haben uns für ein einfaches Beispiel ent­schie­den, das auch für An­fän­ge­rin­nen und Anfänger nach­voll­zieh­bar ist.

Zum Hauptmenü