Ein eigener Discord-Server kann viel Arbeit machen. Deshalb sind Bots, die ad­mi­nis­tra­ti­ve Aufgaben über­neh­men, extrem beliebt. So ein Bot lässt sich mit der Python-Bi­blio­thek discord.py und ein wenig Python-Wissen ganz einfach selbst bauen.

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

Bevor du mit dem Pro­gram­mie­ren loslegst, musst du einen Discord-Bot anlegen. Dazu kannst du direkt bei Discord eine Ap­pli­ca­ti­on erstellen. Danach steht deinem Projekt nichts mehr im Weg. Welchen Code du brauchst, hängt von den ge­wünsch­ten Aufgaben ab. In dieser Anleitung zeigen wir dir einen Bot, der Rollen auf einem Discord-Server vergibt.

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

Für deinen Bot nutzt du haupt­säch­lich die Python-Library discord.py. Diese musst du zuerst auf deinem System in­stal­lie­ren. Wie gewohnt geschieht das in Python über pip. Unter Windows nutzt du dafür diesen Ter­mi­nal­be­fehl:

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

Schritt 2: Python-Dokument erstellen

Erstelle ein neues Python-Dokument für deinen Bot-Code. Du kannst dafür einfache Code-Editoren oder eine in­te­grier­te Ent­wick­lungs­um­ge­bung (IDE) wie Pycharm verwenden.

Schritt 3: Ver­bin­dung zu Discord aufbauen

Im­por­tie­re die Discord-Bi­blio­thek in dein Dokument und hin­ter­le­ge das Bot-Token. Dieses hast du bei der Re­gis­trie­rung deines Bots auf der Discord-De­ve­lo­per­sei­te bekommen. Ersetze den Platz­hal­ter einfach durch dein per­sön­li­ches Token:

import discord
TOKEN = token_placeholder
python

Du brauchst die Bi­blio­thek, um mit der Discord-API zu kom­mu­ni­zie­ren. Damit die Ver­bin­dung klappt, ist zudem eine Instanz des Client-Objekts nötig. Diese erzeugst du so:

client = discord.Client()
python

Schritt 4: Ver­bin­dung prüfen

Als Nächstes baust du eine asyn­chro­ne Methode ein. Sie prüft, ob die Ver­bin­dung zwischen Bot und Server glatt läuft. Dafür nutzt du das on_ready-Event der discord.py-API. Damit deine Funktion als Event-Handler erkannt wird, ver­wen­dest du den Dekorator @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 Discord-Bots wird oft mit asyn­chro­nen Funk­tio­nen ge­ar­bei­tet. Dadurch läuft die Funktion in einem eigenen Bereich ab, ohne das Haupt­pro­gramm zu stoppen. So kann dein Bot mehrere Aufgaben gleich­zei­tig erledigen.

Schritt 5: Funk­tio­nen hin­zu­fü­gen

Die discord.py-API bietet ein Event, mit dem du die Logik deines Bots steuerst: das on_message-Event. Es wird jedes Mal ausgelöst, wenn dein Bot eine Nachricht erhält. Die ent­spre­chen­de Methode prüft zuerst, wer die Nachricht geschickt hat, und führt dann die Aktion aus – hier das Zuweisen einer Rolle.

@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}')
Zum Hauptmenü