Každý Discord bot potrebuje aplikáciu v Discord Developer Portali a token, ktorým sa prihlasuje. Ukážeme, ako aplikáciu založiť, ktoré intenty zapnúť, ako bota pozvať na server a ako token uložiť, aby sa nikdy nedostal von.
Čo budete potrebovať
- Účet na Discorde s overeným e-mailom
- Discord server, na ktorom máte oprávnenie Spravovať server (na skúšanie si založte vlastný)
- Približne 10 minút
Vytvorenie aplikácie#
Otvorte Discord Developer Portal (otvorí sa v novom okne) a prihláste sa.
Kliknite na New Application.
Napíšte názov (napríklad
MujBot), potvrďte súhlas s podmienkami a kliknite na Create.Otvorí sa stránka General Information. Tu môžete nastaviť ikonu a opis.
Skopírujte si Application ID. Hovorí sa mu aj Client ID a budete ho potrebovať na registráciu slash príkazov. Nie je tajné.
Token bota#
Token je heslo bota. Kto ho má, môže bota ovládať: posielať správy, mazať kanály, banovať ľudí na všetkých serveroch, kde bot je.
- V ľavom menu aplikácie kliknite na Bot.
- V časti Token kliknite na Reset Token a potvrďte. Discord môže chcieť heslo alebo kód dvojfázového overenia.
- Token skopírujte (Copy) a rovno ho uložte (časť „Uloženie tokenu“).
Token sa zobrazí iba raz. Keď ho stratíte, vygenerujte nový tlačidlom Reset Token. Tým sa starý token zneplatní.
Token nikdy do kódu ani na GitHub
Token nepíšte priamo do súboru s kódom, neposielajte ho na Discord, do snímky obrazovky ani podpore. Keď unikne, hneď kliknite na Reset Token a nový token vložte do .env na serveri. Bot so starým tokenom sa odpojí.
Pozor na zámenu: krátky reťazec Client Secret na stránke OAuth2 nie je token bota. Token je dlhší a skladá sa z troch častí oddelených bodkou.
Privileged Gateway Intents#
Intenty hovoria Discordu, aké udalosti má botovi posielať. Väčšina je voľná, tri sú privilegované a musíte ich zapnúť na stránke Bot v časti Privileged Gateway Intents:
| Intent | Čo bot dostane | Kedy ho zapnúť |
|---|---|---|
| Presence Intent | Stav členov (online, hrá hru, vlastný status). | Iba keď bot stav členov naozaj používa (štatistiky aktivity). |
| Server Members Intent | Zoznam členov servera a udalosti príchodu a odchodu. | Uvítacie správy, automatické role po pripojení, práca so zoznamom členov. |
| Message Content Intent | Text, prílohy a embedy bežných správ. | Iba keď bot číta bežné správy (príkazy s prefixom ako !help, moderovanie textu). Slash príkazy ho nepotrebujú. |
- Zapnite iba to, čo bot potrebuje. Intent musí byť zapnutý v Developer Portali aj požadovaný v kóde (
GatewayIntentBitsv discord.js). - Keď kód požaduje intent, ktorý v Developer Portali zapnutý nie je, Discord spojenie ukončí a bot hlási
Used disallowed intents. - Bot na 100 a viac serveroch musí prejsť overením aplikácie a privilegované intenty mu Discord musí schváliť. Keď aplikáciu vidí viac než 10 000 používateľov, Discord na ďalšie používanie privilegovaných intentov vyžaduje žiadosť a kontrolu, ktorá sa potom každý rok obnovuje.
Bez Message Content Intent bot vidí text iba pri správach, v ktorých je spomenutý, v súkromných správach so sebou a pri správach, ktoré sám poslal.
Pozvanie bota na server#
V ľavom menu aplikácie kliknite na Installation.
V časti Installation Contexts nechajte zaškrtnuté Guild Install (inštalácia na server). User Install potrebujete iba pre príkazy, ktoré si používatelia pridávajú do svojho účtu.
V časti Install Link zvoľte Discord Provided Link.
V časti Default Install Settings pri Guild Install pridajte do Scopes položky
applications.commandsabot.bot– pridá na server používateľa bota.applications.commands– dovolí botovi vytvoriť na serveri slash príkazy.
Po pridaní
botsa objaví Permissions. Vyberte iba oprávnenia, ktoré bot potrebuje (tabuľka nižšie), a uložte zmeny.Skopírujte odkaz z Install Link a otvorte ho v prehliadači.
Zvoľte Add to server, vyberte server a potvrďte Authorize.
Bot sa objaví v zozname členov servera (zatiaľ offline, kým ho nespustíte).
| Oprávnenie | Na čo ho bot potrebuje |
|---|---|
| View Channels | Vidieť kanály, kde má pracovať. |
| Send Messages | Posielať správy. |
| Embed Links | Posielať embedy (správy s rámčekom a nadpisom). |
| Read Message History | Čítať staršie správy (odpovede, upratovanie). |
| Manage Roles | Iba keď bot prideľuje role. Spravuje len role pod svojou najvyššou rolou. |
| Administrator | Nedávajte. Bot s týmto právom môže na serveri všetko. Keď token unikne, je to katastrofa. |
Odkaz môžete vytvoriť aj ručne na stránke OAuth2 v časti OAuth2 URL Generator: zaškrtnite bot a applications.commands, vyberte oprávnenia a skopírujte vygenerovanú adresu.
Uloženie tokenu#
Token patrí do súboru .env, nie do kódu. Súbor .env vytvorte rovno na serveri, aby ste token nemuseli nikam prenášať:
V zákazníckom účte otvorte bota a prejdite na záložku Súbory, do koreňového priečinka
/.Kliknite na Nový súbor a pomenujte ho
.env(s bodkou na začiatku, bez prípony).Do editora napíš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 úvodzoviek a bez medzier okolo=.CLIENT_ID– Application ID zo stránky General Information.GUILD_ID– ID vášho Discord servera (v Discorde zapnite Používateľské nastavenia › Rozšírené › Režim vývojára, potom kliknite pravým tlačidlom na názov servera › Kopírovať ID servera).
Uložte klávesmi Ctrl+S.
Načítanie .env v kóde#
Node.js súbor .env sám nenačíta, treba mu to povedať. Keďže príkaz na spustenie bota u nás upraviť nejde, načítajte .env priamo v kóde. Najspoľahlivejší je balíček dotenv (nainštalujete ho v počítači príkazom 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číta premenné zo súboru do'dotenv'). config({ … }) process.env. Musí byť úplne hore, pred kódom, ktorý token používa.path: path.join(__dirname, '.env')– hľadá.envv rovnakom priečinku akoindex.js, bez ohľadu na to, odkiaľ sa bot spúšťa.quiet: true– nevypisuje pri štarte hlásenie o načítaní.process.– hodnota zenv. DISCORD_ TOKEN .env. Je to vždy text (string).
Pre ES moduly ("type": "module" v package.json) použite import 'dotenv/config'; na prvom riadku.
Bez balíčka to ide od Node.js 20.12 vstavanou funkciou process.loadEnvFile():
process.loadEnvFile(require('node:path').join(__dirname, '.env'));Keď súbor .env neexistuje, táto funkcia skončí chybou. Verziu Node.js zistíte podľa návodu Verzia Node.js. V počítači môžete bota spúšťať aj príkazom node --env-file=.env index.js.
Súbor .gitignore#
Ak kód ukladáte do Gitu (GitHub, GitLab), vytvorte v projekte súbor .gitignore:
node_modules
.envGit potom .env ani node_modules nikdy nenahrá. Keď ste už .env omylom nahrali, nestačí ho zmazať (zostane v histórii). Token hneď resetujte.
Ďalšie tajné údaje#
Do .env patria aj ďalšie heslá a kľúče: heslo k databáze, kľúče API iných služieb, webhooky. Platia rovnaké pravidlá:
- v kóde iba
process.env.NAZEV, nikdy samotná hodnota, - nikdy ich nevypisujte do konzoly (konzolu môže vidieť aj člen zdieľanej služby),
- pri úniku ich hneď zneplatnite v službe, ktorá ich vydala.
Overenie#
- Bot po spustení prejde na Discorde do stavu online a v Konzole nie je
An invalid token was provided. - Na kontrolu načítania tokenu vypíšte iba jeho dĺžku, nikdy token:
console.log('Délka tokenu:', process.. Výpisenv. DISCORD_ TOKEN?. length); undefinedznamená, že sa.envnenačítal.
Keď niečo nefunguje#
An invalid token was provided.#
Token je nesprávny, po Reset Token už neplatí, alebo sa vôbec nenačítal. Skontrolujte dĺžku tokenu (pozri Overenie), názov premennej v .env aj v kóde (DISCORD_TOKEN) a že v .env nie sú úvodzovky ani medzery navyše. Keď si nie ste istí, vygenerujte nový token a vložte ho znova.
Used disallowed intents#
Kód požaduje privilegovaný intent, ktorý nie je zapnutý v Developer Portali. Na stránke Bot v Privileged Gateway Intents zapnite požadovaný intent, alebo ho odstráňte z kódu.
process.env.DISCORD_TOKEN je undefined#
dotenvsa načítava až po kóde, ktorý token používa. Dajterequire(na prvé riadky.'dotenv'). config( …) - Súbor sa v skutočnosti volá
.env.txt(Windows skrýva prípony). Na serveri ho premenujte na.env. .envje v inom priečinku než hlavný súbor. Použitepath.join(__dirname, '.env').
Private application cannot have a default authorization link#
Na stránke Bot ste vypli Public Bot, ale na stránke Installation je nastavený Discord Provided Link. Súkromný bot nesmie mať predvolený odkaz. Buď nechajte Public Bot zapnutý, alebo v Install Link zvoľte None a odkaz vytvorte v OAuth2 URL Generator.
Bot requires a code grant#
Na stránke Bot je zapnuté Requires OAuth2 Code Grant. Ak ho výslovne nepotrebujete, vypnite ho.
Nevidím svoj server v zozname pri pozvaní#
Nemáte na serveri oprávnenie Spravovať server. Požiadajte vlastníka servera, alebo bota pozvite na vlastný server.
Zhrnutie
- Aplikáciu vytvoríte v Developer Portali (New Application), token získate na stránke Bot tlačidlom Reset Token. Zobrazí sa iba raz.
- Privilegované intenty (Presence, Server Members, Message Content) zapínajte iba keď ich bot potrebuje, v Developer Portali aj v kóde.
- Bota pozvete odkazom zo stránky Installation so scopes
botaapplications.commandsa s čo najmenšími oprávneniami, nikdy Administrator. - Token patrí do
.envna serveri, v kóde ho načítate cezdotenva.envpridáte do.gitignore.