Slik lager du en Discord-bot i Python
Å drive din egen Discord-server kan være ganske arbeidskrevende, og det er derfor boter som tar seg av administrative oppgaver er så populære. Du kan enkelt lage din egen bot ved å bruke Python-biblioteket discord.py og ved å bruke grunnleggende Python-kunnskaper.
Trinn for trinn til din egen Python-bot på Discord
Før du begynner å programmere boten din, bør du opprette en Discord-bot. Du kan opprette din egen applikasjon i Discord, og når du har gjort det, står ingenting i veien for Discord-boten din. Koden du trenger til Discord-boten din, avhenger av oppgavene du ønsker å automatisere. Boten som presenteres i denne veiledningen, er ment å tildele roller på en Discord-server.
Trinn 1: Installer discord.py
For å lage boten din er Python-biblioteket discord.py et uunnværlig verktøy. Før du setter i gang, må du installere det på systemet ditt ved hjelp av pip, slik man vanligvis gjør med Python. I Windows er følgende terminalkommando riktig for installasjon:
py -3 -m pip install -U discord.pypythonTrinn 2: Opprett et Python-dokument
Opprett et nytt Python-dokument for å programmere boten din. Du kan bruke ulike kodeditorer til Python-filen din eller et integrert utviklingsmiljø (IDE) som Pycharm.
Trinn 3: Koble til Discord
Først må du importere Discord-biblioteket til Python-filen din. Angi bot-tokenet du mottok da du registrerte Discord-boten din på Discord-utviklersiden. For å gjøre dette må du erstatte plassholderen med ditt eget bot-token:
import discord
TOKEN = token_placeholderpythonDu trenger biblioteket for å kommunisere med Discord-API-et. For å koble deg til Discord trenger du en instans av det såkalte klientobjektet. Bruk følgende kode for å opprette dette:
client = discord.Client()pythonTrinn 4: Kontroller at tilkoblingen ble opprettet
For å sikre at boten din er riktig koblet til Discord-serveren, må du inkludere en asynkron metode i Python-filen din. Dette gjøres ved å reagere på on_ready, som er definert i discord.py-API-et. For at funksjonen din skal fungere som en hendelseshåndterer, må du bruke @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 funksjoner brukes ofte i programmering av Discord-boter. Dette sikrer at funksjonen kjører i en egen tråd, atskilt fra hovedtråden, slik at botens oppgaver kan utføres parallelt uten å blokkere hovedtråden.
Trinn 5: Legg til funksjoner i boten din
For å implementere botfunksjonalitet i discord.py benyttes hendelsenon_message ». Denne hendelsen utløses hver gang Discord-boten din mottar en melding. For å håndtere denne hendelsen bør metoden din først identifisere avsenderen av meldingen og deretter utføre den ønskede funksjonaliteten, for eksempel å 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 sjekker funksjonen om den mottatte meldingen er sendt av Discord-boten selv. Hvis det er tilfelle, avsluttes funksjonen ved hjelp av return.
Det neste trinnet innebærer en nærmere gjennomgang av meldingens innhold. Hvis meldingen begynner med strengen !add_role, gjenkjenner boten den som en kommando. Dette betyr at serverbrukere må starte forespørsler til Discord-boten med strengen !add_role ». Selv om hvilken som helst streng kan brukes som kommando, er det å foretrekke å bruke strenger som ikke er vanlige i naturlig språk.
Boten fastslår det ønskede rollenavnet ut fra en korrekt tolket kommando ved hjelp av Python-funksjonen split(). Deretter finner den den aktuelle rollen på serveren din. Du kan gjøre dette ved å benytte objektet message, som inneholder en rekke opplysninger om serveren din i feltet message.guild.
Hvis rollen ikke finnes og derfor har verdien «None», genereres det en feilmelding, og funksjonen avsluttes ved hjelp av setningen return. Hvis rollen finnes, tildeles den etter behov. Til dette bruker vi funksjonen add_roles fra biblioteket discord.py, som også er definert i objektet message.