Kort sagt: I Discord Developer Portal opretter du en app med New Application og Create, og nye apps har allerede en botbruger. På siden Bot laver du tokenet med Reset Token. Det bliver kun vist én gang, så gem det med det samme i en .env-fil. Slå kun de Privileged Gateway Intents til, som din bot faktisk bruger. Invitationslinket laver du under OAuth2 > URL Generator eller under Installation som Install Link. Portalen kører ikke din kode, så botten er kun online, mens dens program kører på en maskine.
Discord bot hosting? Hos HostValues fra €1,40 om måneden, online på få minutter. Se pakker →
Her får du hele vejen fra en tom app til en bot, der sidder på din Discord-server og svarer på kommandoer: hvilke sider i portalen du skal bruge, hvad indstillingerne betyder, hvordan du undgår de klassiske fejl, og hvordan botten bliver ved med at køre, når din pc er slukket. Gennemgået 27. oktober 2026 med Discord API v10.
Hvad Discord Developer Portal bruges til
Discord Developer Portal på discord.com/developers/applications er stedet, hvor du registrerer dine apps. Du logger ind med din almindelige Discord-konto. Her får appen sit id, sine installationsindstillinger og tilladelser, og hvis den er en bot, også et token og intents. Selve botten skriver du et andet sted, for eksempel med discord.js til Node.js, discord.py til Python eller JDA til Java. Portalen hoster ikke noget, den holder kun styr på appen.
Når du åbner en app, finder du blandt andet disse sider i menuen til venstre:
| Side | Det bruger du den til |
|---|---|
| General Information | navn, beskrivelse, ikon, Application ID og Public Key |
| Installation | hvor appen kan installeres, og det faste installationslink |
| OAuth2 | blandt andet URL Generator, hvor du bygger et invitationslink |
| Bot | token, Public Bot og Privileged Gateway Intents |
Tre ting har ændret sig i 2026, og mange ældre guides har dem ikke med:
- Sproget i portalen. Siden opdateringen den 9. marts 2026 bruger portalen det sprog, du har valgt i Discord-klienten. Vi bruger de engelske navne fra Discords dokumentation. Kører din Discord på dansk, kan knapperne have danske navne, men de sidder samme sted.
- Grænsen for intents. Siden den 10. juni 2026 afhænger fri adgang til de privilegerede intents af antallet af brugere (10.000) og ikke af antallet af servere.
- Ny adresse til dokumentationen. Discords udviklerdokumentation ligger nu på docs.discord.com/developers.
Før du går i gang, skal du have en testserver, hvor du har tilladelsen Manage Server (administrer server). Uden den kan du ikke tilføje botten. Discord anbefaler at teste nye apps på en server, som andre ikke bruger aktivt.
Opret applikation og bot trin for trin
- Log ind i portalen, og klik på New Application øverst til højre.
- Giv appen et navn, og klik på Create.
- Du lander på General Information. Her står Application ID og Public Key.
- Åbn siden Bot i menuen. Ifølge Discord har nye apps en botbruger slået til fra start, så du skal ikke tilføje den separat.
Application ID er offentligt. Det er det tal, der står som client_id i invitationslinket. Public Key bruger din app til at kontrollere, at HTTP-forespørgsler virkelig kommer fra Discord. Den skal du kun bruge, hvis appen modtager interaktioner på sin egen adresse (Interactions Endpoint URL). En almindelig bot med discord.js eller discord.py forbinder sig via Gateway og har ikke brug for den.
På siden Bot er der to indstillinger, du bør tage stilling til med det samme:
- Public Bot: Er den slået fra, kan kun du som ejer tilføje botten til servere. Er den slået til, kan alle med linket tilføje den til servere, hvor de har de nødvendige tilladelser. En bot til din egen server kan sagtens være privat.
- Requires OAuth2 Code Grant: Lad den være slået fra, medmindre du bygger dit eget OAuth2-login. Er den slået til, skal alle, der tilføjer botten, igennem et fuldt OAuth2-forløb, og et simpelt invitationslink er ikke nok.
Bot-token: kopier, gem og nulstil
Tokenet er bottens adgangskode. Den, der har det, kan logge ind som din bot og gøre alt det, botten har lov til på alle dens servere. Derfor viser portalen det ikke to gange.
- Gå til siden Bot, og klik på Reset Token under Token. Bekræft beskeden.
- Kopier det nye token med det samme med Copy. Discords dokumentation advarer om, at du ikke kan se tokenet igen, medmindre du laver et nyt.
- Gem det i en adgangskodeadministrator eller direkte i projektets
.env-fil.
DISCORD_TOKEN=indsæt_dit_token_her
Skriv .env i din .gitignore, så filen aldrig havner i et Git-repository. Tokenet hører heller ikke hjemme i koden, i en chat, i en supportsag eller på et skærmbillede. Bemærk også, at tokenet hverken er dit Application ID eller din Client Secret. Botten logger kun ind med tokenet.
Nulstil, hvis det er sluppet ud. Har tokenet været offentligt, eller har du mistet det, klikker du bare på Reset Token igen. Det gamle token holder op med at virke. Skriv det nye ind i .env alle steder, hvor botten kører, og genstart den. Et forkert eller gammelt token giver typisk fejlen „An invalid token was provided.“ i discord.js, „Improper token has been passed.“ i discord.py eller lukkekoden 4004 fra Gateway. Tjek i så fald også, at tokenet er kopieret helt og uden mellemrum.
Privileged Gateway Intents: hvornår du slår dem til
Med intents fortæller din bot Discord, hvilke hændelser den vil modtage via Gateway. Tre af dem er privilegerede, fordi de giver adgang til følsomme data. Du slår dem til på siden Bot under Privileged Gateway Intents og gemmer ændringen.
| Kontakt | Navn i API'et | Giver adgang til | Typisk brug |
|---|---|---|---|
| Presence Intent | GUILD_PRESENCES (1 << 8) | medlemmernes status og aktiviteter (PRESENCE_UPDATE) | aktivitetsstatistik, roller efter status |
| Server Members Intent | GUILD_MEMBERS (1 << 1) | når medlemmer kommer til, ændres eller forlader serveren | velkomstbeskeder, automatiske roller |
| Message Content Intent | MESSAGE_CONTENT (1 << 15) | tekst, embeds, vedhæftede filer, komponenter og afstemninger i beskeder | præfikskommandoer som !hjælp, moderation af tekst |
Uden Message Content Intent får botten tomme felter i stedet for beskedernes indhold. Undtagelserne ifølge dokumentationen er beskeder, som botten selv sender, direkte beskeder til botten, beskeder, hvor botten bliver nævnt, og den besked, som nogen bruger en af bottens kontekstmenukommandoer på. Slash-kommandoer kræver ingen af de tre intents, så en ny bot bygges bedst på dem fra starten.
Grænsen på 10.000 brugere. Er din app tilgængelig for færre end 10.000 brugere, slår du bare kontakterne til i portalen. Discord tæller de unikke brugere, der har adgang til appen på tværs af alle de servere, den er installeret på. Når appen når grænsen, får du besked i portalen og har 90 dage til at ansøge. Imens kører appen videre med de intents, du søger om. En godkendt adgang skal fornyes hvert år. Verificering af appen er en separat proces, som ifølge dokumentationen er et krav fra 100 servere.
Et intent skal være slået til to steder: i portalen og i din kode. Beder koden om et privilegeret intent, som er slået fra i portalen, lukker Discord forbindelsen med kode 4014 (Disallowed intent(s)). discord.js melder så „Used disallowed intents“, og discord.py giver fejlen PrivilegedIntentsRequired. Ændringer i portalen gælder først ved en ny Gateway-forbindelse, så genstart botten bagefter. Sådan beder du om Message Content Intent i discord.js 14:
require('dotenv').config();
const { Client, Events, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent],
});
client.once(Events.ClientReady, (c) => console.log(`Logget ind som ${c.user.tag}`));
client.login(process.env.DISCORD_TOKEN);
I discord.py 2.7 slår discord.Intents.default() alt til undtagen presences, members og message_content. En velkomstbot tilføjer selv members:
import os
import discord
from dotenv import load_dotenv
load_dotenv()
intents = discord.Intents.default()
intents.members = True # kun hvis Server Members Intent er slået til i portalen
client = discord.Client(intents=intents)
@client.event
async def on_member_join(member):
print(f"Ny på serveren: {member}")
client.run(os.getenv("DISCORD_TOKEN"))
Pakken dotenv (Node.js) eller python-dotenv (Python) læser tokenet fra .env. Husk at skrive den i package.json eller requirements.txt.
Inviter botten: Install Link eller OAuth2 URL Generator
En bot kommer ind på en server via en OAuth2-godkendelse og ikke via et almindeligt invitationslink til serveren. Du har to muligheder.
Mulighed 1: OAuth2 > URL Generator
- Åbn OAuth2 i menuen, og vælg URL Generator.
- Sæt flueben ved bot og applications.commands under Scopes. Ifølge dokumentationen følger applications.commands automatisk med bot, men Discords egne vejledninger vælger begge.
- Under Bot Permissions vælger du kun de tilladelser, botten skal bruge.
- Kopier Generated URL nederst, åbn den i browseren, vælg serveren, og godkend med Authorize.
| Tilladelse | Navn i API'et | Værdi |
|---|---|---|
| View Channels | VIEW_CHANNEL | 1024 |
| Send Messages | SEND_MESSAGES | 2048 |
| Embed Links | EMBED_LINKS | 16384 |
| Attach Files | ATTACH_FILES | 32768 |
| Read Message History | READ_MESSAGE_HISTORY | 65536 |
| Administrator | ADMINISTRATOR | 8 |
Tallet efter permissions i linket er summen af de valgte værdier. En bot, der læser og skriver i tekstkanaler og må sende filer, får 1024 + 2048 + 16384 + 32768 + 65536 = 117760:
https://discord.com/oauth2/authorize?client_id=DIT_APPLICATION_ID&scope=bot+applications.commands&permissions=117760
Undgå Administrator. Ifølge dokumentationen giver den alle tilladelser og tilsidesætter kanalernes egne indstillinger, så en kompromitteret bot ville kunne gøre alt på serveren.
Mulighed 2: Installation > Install Link. Det er den vej, Discords aktuelle begynderguide bruger. På siden Installation under Installation Contexts kan nye apps som standard kun installeres på servere (Guild Install). User Install skal du kun slå til, hvis brugerne skal kunne bruge kommandoerne på deres egen konto. Under Install Link vælger du Discord Provided Link; de andre muligheder er Custom URL og None. Så dukker afsnittet Default Install Settings op, hvor du for Guild Install tilføjer scopes bot og applications.commands og vælger tilladelserne. Linket indeholder hverken scopes eller tilladelser i selve adressen. Discord spørger i stedet ud fra dine Default Install Settings, når nogen installerer appen, og et Discord Provided Link kan kun bruge de to scopes. Åbn linket, og vælg „Add to server“.
Uanset vej skal du have Manage Server på serveren, ellers dukker den ikke op på listen. Bagefter står botten som offline på medlemslisten, indtil du starter dens kode.
Hold botten online 24/7
Portalen registrerer kun botten. Den er online, så længe dens program kører, og på din egen pc stopper det, når du slukker, lukker låget på den bærbare eller Windows genstarter efter en opdatering. Skal andre kunne regne med botten, skal den køre på en maskine, der altid er tændt. Med Discord-bot hosting hos HostValues kører den i gamepanelet:
- Bestil en pakke. Serveren er klar lige efter betalingen.
- Upload dine botfiler under fanen File managers (filhåndtering) eller via SFTP, uden mappen
node_modules. - Opret
.envmed dit token i filhåndteringen, eller upload filen via SFTP. - Vælg runtime under fanen Startup og versionen under Docker Image: Node.js 18, 20, 22, 24 eller 26, Python 3.11 eller Java 17 eller 21. Skriv din startfil, for eksempel
index.js,bot.pyeller en.jar-fil. - Pakker: Med Node.js kører panelet
npm install, når der er enpackage.json, og med Python installerer det pakkerne frarequirements.txt. Står der alligevel „Cannot find module“ i konsollen, trykker du på Reinstall Server under fanen Settings. - Start botten under fanen Console. Når beskeden fra ready-hændelsen dukker op, for eksempel „Logget ind som…“, er den online.
Crasher processen, genstarter panelet den automatisk. Crasher den igen kort efter, starter panelet den ikke igen, så en fejl i koden ikke ender i en uendelig løkke; årsagen står så i konsollen. Indstillinger, levels eller economy-data kan du gemme i en MySQL-database, som du opretter under Databases og administrerer med phpMyAdmin. En kort tjekliste til panelet finder du i Hvordan får jeg min Discord-bot online?, og vil du køre flere bots på én server, kan du bruge PM2 eller systemd, så længe hukommelsen rækker.
| Pakke | RAM | NVMe-lagerplads | Pris pr. måned | Bestil |
|---|---|---|---|---|
| Small | 1 GB | 5 GB | €1,40 | Bestil Small |
| Medium | 2 GB | 10 GB | €2,80 | Bestil Medium |
| Pro | 4 GB | 20 GB | €5,60 | Bestil Pro |
Alle priser er inkl. moms, og du kan opsige hver måned. Betaler du forud, får du 10% rabat pr. kvartal og 15% pr. år, så Small koster €3,78 pr. kvartal eller €14,28 om året. En simpel discord.js-bot bruger typisk 100 til 200 MB, en discord.py-bot ofte 80 til 150 MB, så Small er rigeligt til de fleste bots.
Typiske fejl ved den første start:
- Botten er online, men reagerer ikke på !-kommandoer: Message Content Intent mangler i portalen eller i koden. discord.py advarer med „Privileged message content intent is missing, commands may not work as expected.“
- Velkomstbeskeder kommer ikke: Server Members Intent er slået fra.
- Din server mangler på listen, når du inviterer: du har ikke Manage Server på den server. Bed en administrator om at åbne linket.
- Andre kan ikke tilføje botten: Public Bot er slået fra.
- Kode 4013: værdien for intents er regnet forkert. Lad biblioteket sætte dem i stedet for et håndskrevet tal.
Mere om forskellen på din egen pc og hosting kan du læse i Discord Bot Hosting: Hold Din Bot Online 24/7.
Ofte stillede spørgsmål
Hvor finder jeg min bot-token i Discord Developer Portal?
På siden Bot under Token. Portalen viser kun tokenet lige efter, at du har klikket på Reset Token. Har du ikke gemt det, laver du et nyt på samme måde; det gamle holder så op med at virke, og du skal skifte det ud alle steder, hvor botten kører.
Hvilke Privileged Gateway Intents skal min bot have?
Kun dem, som en funktion ikke kan undvære. Slash-kommandoer kræver ingen. Velkomstbeskeder kræver Server Members Intent, præfikskommandoer som !hjælp kræver Message Content Intent, og statusvisninger kræver Presence Intent.
Hvad er forskellen på Application ID og token?
Application ID er offentligt og står som client_id i invitationslinket. Tokenet er hemmeligt: botten logger ind hos Discord med det, og den, der har tokenet, styrer botten.
Skal min Discord-bot verificeres?
Ifølge Discords dokumentation kræves verificering fra 100 servere. For Privileged Gateway Intents gælder siden 10. juni 2026 en separat grænse: er appen tilgængelig for mere end 10.000 brugere, skal du ansøge om adgang og forny den hvert år.
Bliver min bot ved med at køre, når jeg slukker min pc?
Nej. En bot kører kun, så længe dens program kører, og Discord Developer Portal kører ingen kode. Skal botten være online døgnet rundt, skal den ligge på en server, der altid er tændt, for eksempel en botpakke hos HostValues fra €1,40 om måneden.