Att ha en egen Discord-server kan vara mycket arbete, vilket är an­led­ning­en till att bots som sköter ad­mi­nist­ra­ti­va funk­tio­ner är så populära. Du kan enkelt designa din egen bot med hjälp av Python-bib­li­o­te­ket discord.py och grund­läg­gan­de Python-kunskaper.

Steg för steg till din egen Python Discord-bot

Innan du börjar pro­gram­me­ra din bot bör du skapa en Discord-bot. Du kan skapa din egen ap­pli­ka­tion med Discord och när du har gjort det står ingenting i vägen för din Discord-bot. Koden du behöver för din Discord-bot beror på vilka uppgifter du vill au­to­ma­ti­se­ra. Botten som pre­sen­te­ras i denna hand­led­ning är avsedd att lägga till roller inom en Discord-server.

Steg 1: in­stal­le­ra discord.py

För att skapa din bot är Python-bib­li­o­te­ket discord.py ett viktigt verktyg. Innan du börjar måste du in­stal­le­ra det på ditt system med pip, som är brukligt med Python. I Windows är följande ter­mi­nal­kom­man­do lämpligt för in­stal­la­tion:

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

Steg 2: skapa Python-dokument

Skapa ett nytt Python-dokument för att koda din bot. Du kan använda olika kodre­di­ge­ra­re för din Python-fil eller en in­te­gre­rad ut­veck­lings­mil­jö (IDE) som Pycharm.

Steg 3: anslut till Discord

Importera först Discord-bib­li­o­te­ket till ditt Python-dokument. Ange den bottoken du fick när du re­gi­stre­ra­de din Discord-bot på Discords ut­veck­lar­webb­plats. För att göra detta ersätter du plats­hål­la­ren med din anpassade bottoken:

import discord
TOKEN = token_placeholder
python

Du behöver bib­li­o­te­ket för att in­te­ra­ge­ra med Discord API. För att ansluta till Discord behöver du en instans av det så kallade kli­en­t­ob­jek­tet. Använd följande kod för att skapa detta:

client = discord.Client()
python

Steg 4: Kon­trol­le­ra att an­slut­ning­en har upp­rät­tats korrekt.

För att sä­ker­stäl­la att din bot är korrekt ansluten till Discord-servern, inkludera en asynkron metod i din Python-fil. Detta uppnås genom att svara på händelsen on_ready, som de­fi­nie­ras i discord.py API. För att göra det möjligt för din funktion att fungera som en hän­del­se­han­te­ra­re, använd de­ko­ra­torn @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
Notis

Asynkrona funk­tio­ner används ofta i pro­gram­me­ring­en av Discord-bots. Detta sä­ker­stäl­ler att funk­tio­nen körs på en dedikerad tråd separat från hu­vud­trå­den, vilket möjliggör parallell körning av bot-uppgifter utan att blockera hu­vud­trå­den.

Steg 5: Lägg till funk­tio­ner till din bot

För att im­ple­men­te­ra bot-funk­tio­na­li­tet i discord.py används händelsenon_message. Denna händelse utlöses varje gång din Discord-bot tar emot ett med­de­lan­de. För att hantera denna händelse bör din metod först iden­ti­fi­e­ra av­sän­da­ren av med­de­lan­det och sedan utföra önskad funk­tio­na­li­tet, till exempel lägga till 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}')

In­led­nings­vis kon­trol­le­rar funk­tio­nen om det mottagna med­de­lan­det har skickats av Discord-boten själv. Om så är fallet avslutas funk­tio­nen med hjälp av return.

Nästa steg innebär en närmare gransk­ning av med­de­lan­dets innehåll. Om med­de­lan­det börjar med strängen !add_role, känner boten igen det som ett kommando. Detta indikerar att ser­ve­ran­vän­da­re måste initiera för­fråg­ning­ar till Discord-boten med strängen !add_role. Även om vilken sträng som helst kan användas som kommando, är det att föredra att använda strängar som inte är vanliga i naturligt språk.

Boten bestämmer önskat rollnamn från ett korrekt tolkat kommando med hjälp av Python-funk­tio­nen split(). Därefter lo­ka­li­se­rar den relevant roll på din server. Du kan göra detta genom att utnyttja objektet message, som in­ne­hål­ler en mängd in­for­ma­tion om din server i fältet message.guild.

Om rollen inte finns och därför har värdet “None” genereras ett fel­med­de­lan­de och funk­tio­nen avslutas med hjälp av return satsen. Om rollen finns tilldelas den efter behov. För detta använder vi add_roles från discord.py-bib­li­o­te­ket, som också de­fi­nie­ras inom message et.

Gå till huvudmeny