Sådan opretter du en Discord-bot i Python
Det kan være ret tidskrævende at drive sin egen Discord-server, og derfor er bots, der varetager de administrative opgaver, meget populære. Du kan nemt udvikle din egen bot ved hjælp af Python-biblioteket discord.py og ved at anvende grundlæggende Python-kundskaber.
Trin for trin til din egen Python-Discord-bot
Inden du går i gang med at programmere din bot, skal du oprette en Discord-bot. Du kan oprette din egen applikation 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 automatisere. Den bot, der præsenteres i denne vejledning, er beregnet til at tilføje roller på en Discord-server.
Trin 1: Installer discord.py
Python-biblioteket discord.py er et uundværligt værktøj, når du skal oprette din bot. Inden du går i gang, skal du installere det på din computer ved hjælp af pip, som det er kutyme med Python. I Windows er den relevante terminalkommando til installation:
py -3 -m pip install -U discord.pypythonTrin 2: Opret et Python-dokument
Opret et nyt Python-dokument til at programmere din bot. Du kan bruge forskellige kodeeditorer til din Python-fil eller et integreret udviklingsmiljø (IDE) som f.eks. PyCharm.
Trin 3: Opret forbindelse til Discord
Start med at importere Discord-biblioteket til dit Python-program. Indtast det bot-token, du modtog, da du registrerede din Discord-bot på Discords udviklerhjemmeside. For at gøre dette skal du erstatte pladsholderen med dit eget bot-token:
import discord
TOKEN = token_placeholderpythonDu skal bruge biblioteket for at kunne kommunikere med Discord-API’en. For at oprette forbindelse til Discord skal du have en instans af det såkaldte klientobjekt. Brug følgende kode til at oprette denne:
client = discord.Client()pythonTrin 4: Kontroller, at forbindelsen 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 begivenhedshåndterer, 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})')pythonAsynkrone funktioner bruges ofte i programmeringen af Discord-bots. Dette sikrer, at funktionen kører i en dedikeret tråd, der er adskilt fra hovedtråden, hvilket gør det muligt at udføre bot-opgaver parallelt uden at blokere hovedtråden.
Trin 5: Tilføj funktioner til din bot
For at implementere bot-funktionalitet i discord.py benyttes begivenhedenon_message. Denne begivenhed udløses, hver gang din Discord-bot modtager en besked. For at håndtere denne begivenhed skal din metode først identificere afsenderen 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 kontrollerer funktionen, om den modtagne besked er sendt af Discord-botten selv. Hvis det er tilfældet, afsluttes funktionen ved hjælp af return.
Det næste trin indebærer en nærmere gennemgang af meddelelsens indhold. Hvis meddelelsen begynder med strengen !add_role, genkender boten den som en kommando. Dette betyder, at serverbrugere skal indlede anmodninger til Discord-boten med strengen !add_role. Selvom enhver streng kan bruges som kommando, foretrækkes det at anvende strenge, der ikke er almindeligt forekommende i naturligt sprog.
Botten fastlægger det ønskede rollenavn ud fra en korrekt fortolket kommando ved hjælp af Python-funktionen split(). Derefter finder den den relevante rolle på din server. Dette gøres ved at benytte message, som indeholder en række oplysninger om din server i message.guild.
Hvis rollen ikke findes og derfor har værdien »None«, genereres der en fejlmeddelelse, og funktionen afsluttes ved hjælp af return. Hvis rollen findes, tildeles den efter behov. Til dette bruger vi add_roles fra biblioteket discord.py, som også er defineret i message objektet.