Každý Discord bot potřebuje aplikaci v Discord Developer Portalu a token, kterým se přihlašuje. Ukážeme, jak aplikaci založit, které intenty zapnout, jak bota pozvat na server a jak token uložit, aby se nikdy nedostal ven.
Co budete potřebovat
- Účet na Discordu s ověřeným e-mailem
- Discord server, na kterém máte oprávnění Spravovat server (na zkoušení si založte vlastní)
- Asi 10 minut
Vytvoření aplikace#
Otevřete Discord Developer Portal (otevře se v novém okně) a přihlaste se.
Klikněte na New Application.
Napište název (například
MujBot), potvrďte souhlas s podmínkami a klikněte na Create.Otevře se stránka General Information. Tady můžete nastavit ikonu a popis.
Zkopírujte si Application ID. Říká se mu také Client ID a budete ho potřebovat pro registraci slash příkazů. Není tajné.
Token bota#
Token je heslo bota. Kdo ho má, může bota ovládat: posílat zprávy, mazat kanály, banovat lidi na všech serverech, kde bot je.
- V levém menu aplikace klikněte na Bot.
- V části Token klikněte na Reset Token a potvrďte. Discord může chtít heslo nebo kód dvoufázového ověření.
- Token zkopírujte (Copy) a rovnou ho uložte (části „Uložení tokenu“).
Token se zobrazí jen jednou. Když ho ztratíte, vygenerujte nový tlačítkem Reset Token. Tím se starý token zneplatní.
Token nikdy do kódu ani na GitHub
Token nepište přímo do souboru s kódem, neposílejte ho na Discord, do screenshotu ani podpoře. Když unikne, hned klikněte na Reset Token a nový token vložte do .env na serveru. Bot se starým tokenem se odpojí.
Pozor na záměnu: krátký řetězec Client Secret na stránce OAuth2 není token bota. Token je delší a skládá se ze tří částí oddělených tečkou.
Privileged Gateway Intents#
Intenty říkají Discordu, jaké události má botovi posílat. Většina je volná, tři jsou privilegované a musíte je zapnout na stránce Bot v části Privileged Gateway Intents:
| Intent | Co bot dostane | Kdy ho zapnout |
|---|---|---|
| Presence Intent | Stav členů (online, hraje hru, vlastní status). | Jen když bot stav členů opravdu používá (statistiky aktivity). |
| Server Members Intent | Seznam členů serveru a události příchodu a odchodu. | Uvítací zprávy, automatické role po připojení, práce se seznamem členů. |
| Message Content Intent | Text, přílohy a embedy běžných zpráv. | Jen když bot čte běžné zprávy (příkazy s prefixem jako !help, moderace textu). Slash příkazy ho nepotřebují. |
- Zapněte jen to, co bot potřebuje. Intent musí být zapnutý v Developer Portalu i požadovaný v kódu (
GatewayIntentBitsv discord.js). - Když kód požaduje intent, který v Developer Portalu zapnutý není, Discord spojení ukončí a bot hlásí
Used disallowed intents. - Bot na 100 a více serverech musí projít ověřením aplikace a privilegované intenty mu Discord musí schválit. Když aplikaci vidí víc než 10 000 uživatelů, Discord pro další používání privilegovaných intentů vyžaduje žádost a kontrolu, kterou se pak každý rok obnovuje.
Bez Message Content Intent bot vidí text jen u zpráv, ve kterých je zmíněný, v soukromých zprávách se sebou a u zpráv, které sám poslal.
Pozvání bota na server#
V levém menu aplikace klikněte na Installation.
V části Installation Contexts nechte zaškrtnuté Guild Install (instalace na server). User Install potřebujete jen pro příkazy, které si uživatelé přidávají do svého účtu.
V části Install Link zvolte Discord Provided Link.
V části Default Install Settings u Guild Install přidejte do Scopes položky
applications.commandsabot.bot– přidá na server uživatele bota.applications.commands– dovolí botovi vytvořit na serveru slash příkazy.
Po přidání
botse objeví Permissions. Vyberte jen oprávnění, která bot potřebuje (tabulka níže), a uložte změny.Zkopírujte odkaz z Install Link a otevřete ho v prohlížeči.
Zvolte Add to server, vyberte server a potvrďte Authorize.
Bot se objeví v seznamu členů serveru (zatím offline, dokud ho nespustíte).
| Oprávnění | Na co ho bot potřebuje |
|---|---|
| View Channels | Vidět kanály, kde má pracovat. |
| Send Messages | Posílat zprávy. |
| Embed Links | Posílat embedy (zprávy s rámečkem a nadpisem). |
| Read Message History | Číst starší zprávy (odpovědi, úklid). |
| Manage Roles | Jen když bot přiděluje role. Spravuje pouze role pod svou nejvyšší rolí. |
| Administrator | Nedávejte. Bot s tímto právem může na serveru všechno. Když token unikne, je to katastrofa. |
Odkaz můžete vytvořit i ručně na stránce OAuth2 v části OAuth2 URL Generator: zaškrtněte bot a applications.commands, vyberte oprávnění a zkopírujte vygenerovanou adresu.
Uložení tokenu#
Token patří do souboru .env, ne do kódu. Soubor .env vytvořte rovnou na serveru, ať token nemusíte nikam přenášet:
V zákaznické zóně otevřete bota a přejděte na záložku Soubory, do kořenové složky
/.Klikněte na Nový soubor a pojmenujte ho
.env(s tečkou na začátku, bez přípony).Do editoru napište:
.envini DISCORD_TOKEN=<TOKEN_BOTA> CLIENT_ID=<APPLICATION_ID> GUILD_ID=<ID_SERVERU>DISCORD_TOKEN– token bota. Za<TOKEN_BOTA>dosaďte token z Developer Portalu, bez uvozovek a bez mezer kolem=.CLIENT_ID– Application ID ze stránky General Information.GUILD_ID– ID vašeho Discord serveru (v Discordu zapněte Uživatelská nastavení › Pokročilé › Režim vývojáře, pak klikněte pravým tlačítkem na název serveru › Kopírovat ID serveru).
Uložte klávesami Ctrl+S.
Načtení .env v kódu#
Node.js soubor .env sám nenačte, je potřeba mu to říct. Protože příkaz pro spuštění bota u nás upravit nejde, načtěte .env přímo v kódu. Nejspolehlivější je balíček dotenv (nainstalujete ho v počítači příkazem 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(– načte proměnné ze souboru do'dotenv'). config({ … }) process.env. Musí být úplně nahoře, před kódem, který token používá.path: path.join(__dirname, '.env')– hledá.envve stejné složce jakoindex.js, bez ohledu na to, odkud se bot spouští.quiet: true– nevypisuje při startu hlášku o načtení.process.– hodnota zenv. DISCORD_ TOKEN .env. Je to vždy text (string).
Pro ES moduly ("type": "module" v package.json) použijte import 'dotenv/config'; na prvním řádku.
Bez balíčku to jde od Node.js 20.12 vestavěnou funkcí process.loadEnvFile():
process.loadEnvFile(require('node:path').join(__dirname, '.env'));Když soubor .env neexistuje, tato funkce skončí chybou. Verzi Node.js zjistíte podle návodu Verze Node.js. V počítači můžete bota spouštět i příkazem node --env-file=.env index.js.
Soubor .gitignore#
Pokud kód ukládáte do Gitu (GitHub, GitLab), vytvořte v projektu soubor .gitignore:
node_modules
.envGit pak .env ani node_modules nikdy nenahraje. Když už jste .env omylem nahráli, nestačí ho smazat (zůstane v historii). Token hned resetujte.
Další tajné údaje#
Do .env patří i další hesla a klíče: heslo k databázi, klíče API jiných služeb, webhooky. Platí stejná pravidla:
- v kódu jen
process.env.NAZEV, nikdy samotná hodnota, - nikdy je nevypisujte do konzole (konzoli může vidět i člen sdílené služby),
- při úniku je hned zneplatněte u služby, která je vydala.
Ověření#
- Bot po spuštění přejde na Discordu do stavu online a v Konzoli není
An invalid token was provided. - Pro kontrolu načtení tokenu vypište jen jeho délku, nikdy token:
console.log('Délka tokenu:', process.. Výpisenv. DISCORD_ TOKEN?. length); undefinedznamená, že se.envnenačetl.
Když něco nefunguje#
An invalid token was provided.#
Token je špatný, po Reset Token už neplatí, nebo se vůbec nenačetl. Zkontrolujte délku tokenu (viz Ověření), název proměnné v .env i v kódu (DISCORD_TOKEN) a že v .env nejsou uvozovky ani mezery navíc. Když si nejste jistí, vygenerujte nový token a vložte ho znovu.
Used disallowed intents#
Kód požaduje privilegovaný intent, který není zapnutý v Developer Portalu. Na stránce Bot v Privileged Gateway Intents zapněte požadovaný intent, nebo ho odstraňte z kódu.
process.env.DISCORD_TOKEN je undefined#
dotenvse načítá až po kódu, který token používá. Dejterequire(na první řádky.'dotenv'). config( …) - Soubor se ve skutečnosti jmenuje
.env.txt(Windows skrývá přípony). Na serveru ho přejmenujte na.env. .envje v jiné složce než hlavní soubor. Použijtepath.join(__dirname, '.env').
Private application cannot have a default authorization link#
Na stránce Bot jste vypnuli Public Bot, ale na stránce Installation je nastavený Discord Provided Link. Soukromý bot nesmí mít výchozí odkaz. Buď nechte Public Bot zapnutý, nebo v Install Link zvolte None a odkaz vytvořte v OAuth2 URL Generator.
Bot requires a code grant#
Na stránce Bot je zapnuté Requires OAuth2 Code Grant. Pokud ho výslovně nepotřebujete, vypněte ho.
Nevidím svůj server v seznamu při pozvání#
Nemáte na serveru oprávnění Spravovat server. Požádejte vlastníka serveru, nebo bota pozvěte na vlastní server.
Shrnutí
- Aplikaci vytvoříte v Developer Portalu (New Application), token získáte na stránce Bot tlačítkem Reset Token. Zobrazí se jen jednou.
- Privilegované intenty (Presence, Server Members, Message Content) zapínejte jen když je bot potřebuje, v Developer Portalu i v kódu.
- Bota pozvete odkazem ze stránky Installation se scopes
botaapplications.commandsa s co nejmenšími oprávněními, nikdy Administrator. - Token patří do
.envna serveru, v kódu ho načtete přesdotenva.envpřidáte do.gitignore.