Hoe maak je een Python Discord-bot
Je eigen Discord-server kan veel werk zijn, daarom zijn bots die administratieve taken uitvoeren zo populair. Je kunt eenvoudig je eigen bot ontwerpen met behulp van de Python-bibliotheek discord.py en basiskennis van Python.
Stap voor stap naar je eigen Python Discord-bot
Voordat je begint met het programmeren van je bot, moet je een Discord-bot aanmaken. Je kunt je eigen applicatie 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 automatiseren. De bot die in deze tutorial wordt gepresenteerd, is bedoeld om rollen toe te voegen binnen een Discord-server.
Stap 1: installeer discord.py
Om je bot te maken, is de Python-bibliotheek discord.py een essentieel hulpmiddel. Voordat je aan de slag gaat, moet je deze op je systeem installeren met pip, zoals gebruikelijk is bij Python. Op Windows is de juiste terminalopdracht voor installatie:
py -3 -m pip install -U discord.pypythonStap 2: Python-document aanmaken
Maak een nieuw Python-document aan om je bot te programmeren. Je kunt verschillende code-editors gebruiken voor je Python-bestand of een geïntegreerde ontwikkelomgeving (IDE) zoals Pycharm.
Stap 3: maak verbinding met Discord
Importeer eerst de Discord-bibliotheek in uw Python-document. Stel het bot-token in dat u hebt ontvangen bij het registreren van uw Discord-bot op de Discord-ontwikkelaarssite. Vervang hiervoor de tijdelijke aanduiding door uw aangepaste bot-token:
import discord
TOKEN = token_placeholderpythonJe hebt de bibliotheek nodig om te communiceren met de Discord API. Om verbinding te maken met Discord, heb je een instantie van het zogenaamde clientobject nodig. Gebruik de volgende code om dit te maken:
client = discord.Client()pythonStap 4: Controleer of de verbinding succesvol tot stand is gebracht.
Om ervoor te zorgen dat je bot goed is verbonden met de Discord-server, moet je een asynchrone methode toevoegen aan je Python-bestand. Dit doe je door te reageren op de on_ready -gebeurtenis, die is gedefinieerd in de discord.py API. Om je functie te laten werken als een gebeurtenisverwerker, 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})')pythonAsynchrone functies worden vaak gebruikt bij het programmeren van Discord-bots. Dit zorgt ervoor dat de functie op een speciale thread draait, los van de hoofdthread, waardoor bot-taken parallel kunnen worden uitgevoerd zonder de hoofdthread te blokkeren.
Stap 5: voeg functionaliteiten toe aan je bot
Om botfunctionaliteit in discord.py te implementeren, wordt de on_message gebeurtenis gebruikt. Deze gebeurtenis wordt geactiveerd wanneer je Discord-bot een bericht ontvangt. Om deze gebeurtenis af te handelen, moet je methode eerst de afzender van het bericht bepalen en vervolgens de gewenste functionaliteit 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 controleert de functie of het ontvangen bericht door de Discord-bot zelf is verzonden. Als dat het geval is, wordt de functie afgesloten met behulp van de return -instructie.
De volgende stap bestaat uit een nadere bestudering van de inhoud van het bericht. Als het bericht begint met de tekenreeks !add_role, herkent de bot dit als een commando. Dit geeft aan dat servergebruikers verzoeken aan de Discord-bot moeten initiëren met de tekenreeks !add_role. Hoewel elke tekenreeks als commando kan worden gebruikt, verdient het de voorkeur om tekenreeksen te gebruiken die niet vaak in natuurlijke taal worden gebruikt.
De bot bepaalt de gewenste rolnamen op basis van een correct geïnterpreteerd commando met behulp van de Python-functie split(). Vervolgens lokaliseert hij de relevante rol op uw server. U kunt dit doen door gebruik te maken van het message object, dat verschillende informatie over uw server bevat in het message.guild.
Als de rol niet bestaat en dus de waarde ‘None’ heeft, wordt er een foutmelding gegenereerd en wordt de functie beëindigd met behulp van de return. Als de rol wel bestaat, wordt deze toegewezen zoals nodig is. Hiervoor gebruiken we de add_roles uit de discord.py-bibliotheek, die ook is gedefinieerd in het message.