Je eigen Discord-server kan veel werk zijn, daarom zijn bots die ad­mi­ni­stra­tie­ve taken uitvoeren zo populair. Je kunt eenvoudig je eigen bot ontwerpen met behulp van de Python-bi­bli­o­theek discord.py en ba­sis­ken­nis van Python.

Stap voor stap naar je eigen Python Discord-bot

Voordat je begint met het pro­gram­me­ren van je bot, moet je een Discord-bot aanmaken. Je kunt je eigen ap­pli­ca­tie aanmaken met Discord en zodra je dat hebt gedaan, staat niets je Discord-bot nog in de weg. De code die je nodig hebt voor je Discord-bot hangt af van de taken die je wilt au­to­ma­ti­se­ren. De bot die in deze tutorial wordt ge­pre­sen­teerd, is bedoeld om rollen toe te voegen binnen een Discord-server.

Stap 1: in­stal­leer discord.py

Om je bot te maken, is de Python-bi­bli­o­theek discord.py een es­sen­ti­eel hulp­mid­del. Voordat je aan de slag gaat, moet je deze op je systeem in­stal­le­ren met pip, zoals ge­brui­ke­lijk is bij Python. Op Windows is de juiste ter­mi­na­l­op­dracht voor in­stal­la­tie:

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

Stap 2: Python-document aanmaken

Maak een nieuw Python-document aan om je bot te pro­gram­me­ren. Je kunt ver­schil­len­de code-editors gebruiken voor je Python-bestand of een ge­ïn­te­greer­de ont­wik­kelom­ge­ving (IDE) zoals Pycharm.

Stap 3: maak ver­bin­ding met Discord

Importeer eerst de Discord-bi­bli­o­theek in uw Python-document. Stel het bot-token in dat u hebt ontvangen bij het re­gi­stre­ren van uw Discord-bot op de Discord-ont­wik­ke­laars­si­te. Vervang hiervoor de tij­de­lij­ke aan­dui­ding door uw aan­ge­pas­te bot-token:

import discord
TOKEN = token_placeholder
python

Je hebt de bi­bli­o­theek nodig om te com­mu­ni­ce­ren met de Discord API. Om ver­bin­ding te maken met Discord, heb je een instantie van het zo­ge­naam­de clien­t­ob­ject nodig. Gebruik de volgende code om dit te maken:

client = discord.Client()
python

Stap 4: Con­tro­leer of de ver­bin­ding succesvol tot stand is gebracht.

Om ervoor te zorgen dat je bot goed is verbonden met de Discord-server, moet je een asyn­chro­ne methode toevoegen aan je Python-bestand. Dit doe je door te reageren op de on_ready -ge­beur­te­nis, die is ge­de­fi­ni­eerd in de discord.py API. Om je functie te laten werken als een ge­beur­te­nis­ver­wer­ker, gebruik je de @client.event in Python.

@client.event
async def on_ready():
    print(f'{client.user} is connected to the following server:\n')
    for server in client.guilds:
        print(f'{server.name}(id: {server.id})')
python
Opmerking

Asyn­chro­ne functies worden vaak gebruikt bij het pro­gram­me­ren van Discord-bots. Dit zorgt ervoor dat de functie op een speciale thread draait, los van de hoofd­th­read, waardoor bot-taken parallel kunnen worden uit­ge­voerd zonder de hoofd­th­read te blokkeren.

Stap 5: voeg func­ti­o­na­li­tei­ten toe aan je bot

Om bot­func­ti­o­na­li­teit in discord.py te im­ple­men­te­ren, wordt de on_message ge­beur­te­nis gebruikt. Deze ge­beur­te­nis wordt ge­ac­ti­veerd wanneer je Discord-bot een bericht ontvangt. Om deze ge­beur­te­nis af te handelen, moet je methode eerst de afzender van het bericht bepalen en ver­vol­gens de gewenste func­ti­o­na­li­teit uitvoeren, zoals het toevoegen van rollen.

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.startswith('!add_role'):
        # Find role name
        role_name = message.content.split(' ')[1]
        # search corresponding Discord role
        role = discord.utils.get(message.guild.roles, name=role_name)
        # Check if the role exists
        if role is None:
            await message.channel.send(f'Role "{role_name}" does not exist)
            return
        # Role assignment
        await message.author.add_roles(role)
        await message.channel.send(f'Role "{role_name}" was added to {message.author}')

In eerste instantie con­tro­leert de functie of het ontvangen bericht door de Discord-bot zelf is verzonden. Als dat het geval is, wordt de functie af­ge­slo­ten met behulp van de return -in­struc­tie.

De volgende stap bestaat uit een nadere be­stu­de­ring van de inhoud van het bericht. Als het bericht begint met de te­ken­reeks !add_role, herkent de bot dit als een commando. Dit geeft aan dat ser­ver­ge­brui­kers verzoeken aan de Discord-bot moeten initiëren met de te­ken­reeks !add_role. Hoewel elke te­ken­reeks als commando kan worden gebruikt, verdient het de voorkeur om te­ken­reek­sen te gebruiken die niet vaak in na­tuur­lij­ke taal worden gebruikt.

De bot bepaalt de gewenste rolnamen op basis van een correct ge­ïn­ter­pre­teerd commando met behulp van de Python-functie split(). Ver­vol­gens lo­ka­li­seert hij de relevante rol op uw server. U kunt dit doen door gebruik te maken van het message object, dat ver­schil­len­de in­for­ma­tie over uw server bevat in het message.guild.

Als de rol niet bestaat en dus de waarde ‘None’ heeft, wordt er een fout­mel­ding ge­ge­ne­reerd en wordt de functie beëindigd met behulp van de return. Als de rol wel bestaat, wordt deze toe­ge­we­zen zoals nodig is. Hiervoor gebruiken we de add_roles uit de discord.py-bi­bli­o­theek, die ook is ge­de­fi­ni­eerd in het message.

Ga naar hoofdmenu