Elke Discord-bot heeft een applicatie in het Discord Developer Portal nodig en een token waarmee hij inlogt. We laten zien hoe je de applicatie aanmaakt, welke intents je inschakelt, hoe je de bot uitnodigt op een server en hoe je het token opslaat, zodat het nooit uitlekt.
Wat je nodig hebt
- Een Discord-account met een geverifieerd e-mailadres
- Een Discord-server waarop je het recht Server beheren hebt (maak er zelf een aan om te testen)
- Ongeveer 10 minuten
De applicatie aanmaken#
Open het Discord Developer Portal (opent in een nieuw venster) en log in.
Klik op New Application.
Typ een naam (bijvoorbeeld
MujBot), ga akkoord met de voorwaarden en klik op Create.De pagina General Information wordt geopend. Hier kun je een icoon en een beschrijving instellen.
Kopieer het Application ID. Het wordt ook Client ID genoemd en je hebt het nodig om slash-commando's te registreren. Het is niet geheim.
Het token van de bot#
Het token is het wachtwoord van de bot. Wie het heeft, kan de bot besturen: berichten sturen, kanalen verwijderen, mensen bannen op alle servers waar de bot op zit.
- Klik in het linkermenu van de applicatie op Bot.
- Klik in het gedeelte Token op Reset Token en bevestig. Discord kan om je wachtwoord of een code van de tweestapsverificatie vragen.
- Kopieer het token (Copy) en sla het meteen op (gedeelte “Het token opslaan”).
Het token wordt maar één keer getoond. Raak je het kwijt, genereer dan een nieuw token met de knop Reset Token. Daarmee wordt het oude token ongeldig.
Het token nooit in de code of op GitHub
Schrijf het token niet rechtstreeks in een bestand met code en stuur het niet via Discord, in een screenshot of naar support. Lekt het uit, klik dan meteen op Reset Token en zet het nieuwe token in .env op de server. De bot met het oude token verliest de verbinding.
Pas op voor verwarring: de korte tekenreeks Client Secret op de pagina OAuth2 is niet het token van de bot. Het token is langer en bestaat uit drie delen, gescheiden door een punt.
Privileged Gateway Intents#
Intents vertellen Discord welke events het naar de bot moet sturen. De meeste zijn vrij beschikbaar, drie zijn geprivilegieerd en moet je inschakelen op de pagina Bot in het gedeelte Privileged Gateway Intents:
| Intent | Wat de bot krijgt | Wanneer je hem inschakelt |
|---|---|---|
| Presence Intent | De status van leden (online, speelt een game, aangepaste status). | Alleen als de bot de status van leden echt gebruikt (activiteitsstatistieken). |
| Server Members Intent | De ledenlijst van de server en de events bij het binnenkomen en vertrekken van leden. | Welkomstberichten, automatische rollen na het joinen, werken met de ledenlijst. |
| Message Content Intent | De tekst, bijlagen en embeds van gewone berichten. | Alleen als de bot gewone berichten leest (commando's met een prefix zoals !help, tekstmoderatie). Slash-commando's hebben hem niet nodig. |
- Schakel alleen in wat de bot nodig heeft. Een intent moet in het Developer Portal zijn ingeschakeld en in de code worden aangevraagd (
GatewayIntentBitsin discord.js). - Vraagt de code een intent aan die in het Developer Portal niet is ingeschakeld, dan verbreekt Discord de verbinding en meldt de bot
Used disallowed intents. - Een bot op 100 of meer servers moet de verificatie van de applicatie doorlopen en Discord moet zijn geprivilegieerde intents goedkeuren. Als meer dan 10.000 gebruikers de applicatie zien, vereist Discord voor het verdere gebruik van geprivilegieerde intents een aanvraag en een beoordeling, die daarna elk jaar wordt vernieuwd.
Zonder Message Content Intent ziet de bot alleen de tekst van berichten waarin hij wordt genoemd, van privéberichten met hem en van berichten die hij zelf heeft gestuurd.
De bot uitnodigen op een server#
Klik in het linkermenu van de applicatie op Installation.
Laat in het gedeelte Installation Contexts de optie Guild Install (installatie op een server) aangevinkt. User Install heb je alleen nodig voor commando's die gebruikers aan hun eigen account toevoegen.
Kies in het gedeelte Install Link voor Discord Provided Link.
Voeg in het gedeelte Default Install Settings bij Guild Install de items
applications.commandsenbottoe aan Scopes.bot– voegt de botgebruiker toe aan de server.applications.commands– staat de bot toe om slash-commando's op de server aan te maken.
Na het toevoegen van
botverschijnt Permissions. Selecteer alleen de rechten die de bot nodig heeft (tabel hieronder) en sla de wijzigingen op.Kopieer de link uit Install Link en open die in je browser.
Kies Add to server, selecteer de server en bevestig met Authorize.
De bot verschijnt in de ledenlijst van de server (voorlopig offline, totdat je hem start).
| Recht | Waar de bot het voor nodig heeft |
|---|---|
| View Channels | De kanalen zien waarin hij moet werken. |
| Send Messages | Berichten sturen. |
| Embed Links | Embeds sturen (berichten met een kader en een titel). |
| Read Message History | Oudere berichten lezen (antwoorden, opruimen). |
| Manage Roles | Alleen als de bot rollen toekent. Hij beheert alleen rollen onder zijn eigen hoogste rol. |
| Administrator | Niet geven. Een bot met dit recht kan alles op de server. Als het token uitlekt, is dat een ramp. |
Je kunt de link ook handmatig maken op de pagina OAuth2 in het gedeelte OAuth2 URL Generator: vink bot en applications.commands aan, selecteer de rechten en kopieer het gegenereerde adres.
Het token opslaan#
Het token hoort in het bestand .env, niet in de code. Maak het bestand .env direct op de server aan, zodat je het token nergens heen hoeft over te zetten:
Open de bot in je klantaccount en ga naar het tabblad Bestanden, naar de hoofdmap
/.Klik op Nieuw bestand en noem het
.env(met een punt aan het begin, zonder extensie).Typ in de editor:
.envini DISCORD_TOKEN=<BOT_TOKEN> CLIENT_ID=<APPLICATION_ID> GUILD_ID=<SERVER_ID>DISCORD_TOKEN– het token van de bot. Vervang<BOT_TOKEN>door het token uit het Developer Portal, zonder aanhalingstekens en zonder spaties rond=.CLIENT_ID– het Application ID van de pagina General Information.GUILD_ID– het ID van je Discord-server (schakel in Discord Gebruikersinstellingen › Geavanceerd › Ontwikkelaarsmodus in, klik daarna met de rechtermuisknop op de naam van de server › Server-ID kopiëren).
Sla op met Ctrl+S.
.env laden in de code#
Node.js laadt het bestand .env niet vanzelf, je moet het daar opdracht voor geven. Omdat je het opstartcommando van de bot bij ons niet kunt aanpassen, laad je .env rechtstreeks in de code. Het betrouwbaarst is het pakket dotenv (je installeert het op je computer met het commando npm install dotenv):
const path = require('node:path');
require('dotenv').config({ path: path.join(__dirname, '.env'), quiet: true });
const token = process.env.DISCORD_TOKEN;require(– laadt de variabelen uit het bestand in'dotenv'). config({ … }) process.env. Het moet helemaal bovenaan staan, vóór de code die het token gebruikt.path: path.join(__dirname, '.env')– zoekt.envin dezelfde map alsindex.js, ongeacht van waaruit de bot wordt gestart.quiet: true– toont bij het starten geen melding over het laden.process.– de waarde uitenv. DISCORD_ TOKEN .env. Dat is altijd tekst (string).
Gebruik voor ES-modules ("type": "module" in package.json) import 'dotenv/config'; op de eerste regel.
Zonder pakket kan het sinds Node.js 20.12 met de ingebouwde functie process.loadEnvFile():
process.loadEnvFile(require('node:path').join(__dirname, '.env'));Bestaat het bestand .env niet, dan eindigt deze functie met een fout. De Node.js-versie vind je met de handleiding Node.js-versie. Op je computer kun je de bot ook starten met het commando node --env-file=.env index.js.
Het bestand .gitignore#
Bewaar je de code in Git (GitHub, GitLab), maak dan in het project een bestand .gitignore aan:
node_modules
.envGit uploadt .env en node_modules dan nooit. Heb je .env al per ongeluk geüpload, dan is verwijderen niet genoeg (het blijft in de geschiedenis staan). Reset het token meteen.
Overige geheime gegevens#
In .env horen ook andere wachtwoorden en sleutels: het wachtwoord van de database, API-sleutels van andere diensten, webhooks. Hiervoor gelden dezelfde regels:
- in de code alleen
process.env.NAAM, nooit de waarde zelf, - schrijf ze nooit naar de console (ook een lid van een gedeelde dienst kan de console zien),
- maak ze bij een lek meteen ongeldig bij de dienst die ze heeft uitgegeven.
Controle#
- Na het starten gaat de bot op Discord online en in de Console staat geen
An invalid token was provided. - Om te controleren of het token is geladen, toon je alleen de lengte ervan, nooit het token zelf:
console.log('Lengte van het token:', process.. De uitvoerenv. DISCORD_ TOKEN?. length); undefinedbetekent dat.envniet is geladen.
Als iets niet werkt#
An invalid token was provided.#
Het token is onjuist, is na Reset Token niet meer geldig of is helemaal niet geladen. Controleer de lengte van het token (zie Controle), de naam van de variabele in .env en in de code (DISCORD_TOKEN) en of er in .env geen aanhalingstekens of extra spaties staan. Twijfel je, genereer dan een nieuw token en voeg het opnieuw in.
Used disallowed intents#
De code vraagt een geprivilegieerde intent aan die niet is ingeschakeld in het Developer Portal. Schakel op de pagina Bot onder Privileged Gateway Intents de gevraagde intent in of verwijder hem uit de code.
process.env.DISCORD_TOKEN is undefined#
dotenvwordt pas geladen na de code die het token gebruikt. Zetrequire(op de eerste regels.'dotenv'). config( …) - Het bestand heet in werkelijkheid
.env.txt(Windows verbergt extensies). Hernoem het op de server naar.env. .envstaat in een andere map dan het hoofdbestand. Gebruikpath.join(__dirname, '.env').
Private application cannot have a default authorization link#
Je hebt op de pagina Bot de optie Public Bot uitgeschakeld, maar op de pagina Installation is Discord Provided Link ingesteld. Een privébot mag geen standaardlink hebben. Laat Public Bot ingeschakeld, of kies bij Install Link voor None en maak de link in de OAuth2 URL Generator.
Bot requires a code grant#
Op de pagina Bot staat Requires OAuth2 Code Grant aan. Schakel het uit als je het niet uitdrukkelijk nodig hebt.
Ik zie mijn server niet in de lijst bij het uitnodigen#
Je hebt op de server niet het recht Server beheren. Vraag het aan de eigenaar van de server of nodig de bot uit op je eigen server.
Samenvatting
- De applicatie maak je aan in het Developer Portal (New Application), het token krijg je op de pagina Bot met de knop Reset Token. Het wordt maar één keer getoond.
- Schakel geprivilegieerde intents (Presence, Server Members, Message Content) alleen in als de bot ze nodig heeft, in het Developer Portal en in de code.
- De bot nodig je uit met de link van de pagina Installation, met de scopes
botenapplications.commandsen met zo min mogelijk rechten, nooit Administrator. - Het token hoort in
.envop de server, in de code laad je het viadotenven.envvoeg je toe aan.gitignore.