Det kan være ret tids­kræ­ven­de at drive sin egen Discord-server, og derfor er bots, der varetager de ad­mi­ni­stra­ti­ve opgaver, meget populære. Du kan nemt udvikle din egen bot ved hjælp af Python-bi­bli­o­te­ket discord.py og ved at anvende grund­læg­gen­de Python-kund­ska­ber.

Trin for trin til din egen Python-Discord-bot

Inden du går i gang med at pro­gram­me­re din bot, skal du oprette en Discord-bot. Du kan oprette din egen ap­pli­ka­tion på Discord, og når du har gjort det, står intet i vejen for din Discord-bot. Den kode, du har brug for til din Discord-bot, afhænger af de opgaver, du ønsker at au­to­ma­ti­se­re. Den bot, der præ­sen­te­res i denne vej­led­ning, er beregnet til at tilføje roller på en Discord-server.

Trin 1: Installer discord.py

Python-bi­bli­o­te­ket discord.py er et uund­vær­ligt værktøj, når du skal oprette din bot. Inden du går i gang, skal du in­stal­le­re det på din computer ved hjælp af pip, som det er kutyme med Python. I Windows er den relevante ter­mi­nal­kom­man­do til in­stal­la­tion:

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

Trin 2: Opret et Python-dokument

Opret et nyt Python-dokument til at pro­gram­me­re din bot. Du kan bruge for­skel­li­ge ko­de­e­di­to­rer til din Python-fil eller et in­te­gre­ret ud­vik­lings­mil­jø (IDE) som f.eks. PyCharm.

Trin 3: Opret for­bin­del­se til Discord

Start med at importere Discord-bi­bli­o­te­ket til dit Python-program. Indtast det bot-token, du modtog, da du re­gi­stre­re­de din Discord-bot på Discords ud­vik­ler­hjem­mesi­de. For at gøre dette skal du erstatte plads­hol­de­ren med dit eget bot-token:

import discord
TOKEN = token_placeholder
python

Du skal bruge bi­bli­o­te­ket for at kunne kom­mu­ni­ke­re med Discord-API’en. For at oprette for­bin­del­se til Discord skal du have en instans af det såkaldte kli­en­tob­jekt. Brug følgende kode til at oprette denne:

client = discord.Client()
python

Trin 4: Kon­trol­ler, at for­bin­del­sen er oprettet

For at sikre, at din bot er korrekt forbundet til Discord-serveren, skal du inkludere en asynkron metode i din Python-fil. Dette gøres ved at reagere på on_ready, som er defineret i discord.py-API’en. For at din funktion kan fungere som en be­gi­ven­heds­hånd­te­rer, skal du bruge @client.event i 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
Note

Asynkrone funk­tio­ner bruges ofte i pro­gram­me­rin­gen af Discord-bots. Dette sikrer, at funk­tio­nen kører i en dedikeret tråd, der er adskilt fra ho­ved­t­rå­den, hvilket gør det muligt at udføre bot-opgaver parallelt uden at blokere ho­ved­t­rå­den.

Trin 5: Tilføj funk­tio­ner til din bot

For at im­ple­men­te­re bot-funk­tio­na­li­tet i discord.py benyttes be­gi­ven­he­denon_message. Denne be­gi­ven­hed udløses, hver gang din Discord-bot modtager en besked. For at håndtere denne be­gi­ven­hed skal din metode først iden­ti­fi­ce­re af­sen­de­ren af beskeden og derefter udføre den ønskede handling, f.eks. at tildele roller.

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

Først kon­trol­le­rer funk­tio­nen, om den modtagne besked er sendt af Discord-botten selv. Hvis det er tilfældet, afsluttes funk­tio­nen ved hjælp af return.

Det næste trin indebærer en nærmere gen­nem­gang af med­del­el­sens indhold. Hvis med­del­el­sen begynder med strengen !add_role, genkender boten den som en kommando. Dette betyder, at ser­ver­bru­ge­re skal indlede an­mod­nin­ger til Discord-boten med strengen !add_role. Selvom enhver streng kan bruges som kommando, fo­re­træk­kes det at anvende strenge, der ikke er al­min­de­ligt fo­re­kom­men­de i naturligt sprog.

Botten fast­læg­ger det ønskede rollenavn ud fra en korrekt fortolket kommando ved hjælp af Python-funk­tio­nen split(). Derefter finder den den relevante rolle på din server. Dette gøres ved at benytte message, som in­de­hol­der en række op­lys­nin­ger om din server i message.guild.

Hvis rollen ikke findes og derfor har værdien »None«, genereres der en fejl­med­del­el­se, og funk­tio­nen afsluttes ved hjælp af return. Hvis rollen findes, tildeles den efter behov. Til dette bruger vi add_roles fra bi­bli­o­te­ket discord.py, som også er defineret i message objektet.

Gå til ho­ved­me­nu­en