Bot napsaný v Node.js u nás běží nepřetržitě a po pádu se sám spustí znovu. Ukážeme, jak projekt připravit v počítači, co nahrát a co ne, jak nastavit spuštění a jak zjistit verzi Node.js.
Co budete potřebovat
- Discord bota u StormHostu
- Kód bota v JavaScriptu (Node.js), ideálně odzkoušený v počítači
- Token bota z Discord Developer Portalu (návod)
- Asi 15 minut
Jak bot u nás běží#
- Prostředí je Node.js. Bot je obyčejná aplikace Node.js, nejčastěji s knihovnou discord.js.
- Soubory bota spravujete v záložce Soubory (správce souborů v prohlížeči).
- Spuštění určuje záložka Nastavení: Příkaz pro spuštění (celý příkaz, jen pro čtení) a Proměnné (například název hlavního souboru).
- Výpis bota (všechno z
console.loga chyby) vidíte v záložce Konzole, tam jsou i tlačítka Spustit, Restartovat a Vypnout. - Automatický restart: když bot spadne, spustí se znovu. Běží 24 hodin denně, i když máte vypnutý počítač.
- Paměť je omezená podle balíčku. Využití vidíte pod konzolí.
Příprava projektu v počítači#
Doporučená struktura projektu:
muj-bot/
├── package.json
├── package-lock.json
├── index.js
├── deploy-commands.js
├── .env
├── .gitignore
├── commands/
│ └── utility/
│ └── ping.js
└── node_modules/package.json#
package.json popisuje projekt: jak se jmenuje, který soubor se spouští a jaké balíčky potřebuje. Vytvoříte ho ve složce projektu příkazem npm init -y a balíčky přidáte příkazem npm install discord.js dotenv. Výsledek upravte zhruba takto:
{
"name": "muj-bot",
"version": "1.0.0",
"private": true,
"main": "index.js",
"type": "commonjs",
"scripts": {
"start": "node index.js"
},
"engines": {
"node": ">=18"
},
"dependencies": {
"discord.js": "^14.27.0",
"dotenv": "^18.0.5"
}
}| Pole | Co dělá | Co nastavit |
|---|---|---|
name | Název projektu. Malá písmena, bez mezer. | Libovolný, například muj-bot. |
version | Verze vašeho bota. | 1.0.0, při změnách můžete zvyšovat. |
private | true zabrání omylem zveřejnit projekt do registru npm. | true |
main | Hlavní soubor, kterým bot začíná. | Stejný soubor, jaký spouštíte, obvykle index.js. |
type | commonjs = kód používá require(), module = kód používá import. | Podle vašeho kódu. Návody discord.js používají commonjs. |
scripts.start | Příkaz pro npm start v počítači. | node index.js |
engines.node | Informace, jakou verzi Node.js bot potřebuje. Verzi nemění, jen upozorní. | >=18 pro discord.js 14. |
dependencies | Balíčky, které bot potřebuje, s verzemi. ^14.27.0 znamená „14.27.0 nebo novější 14.x“. | Vyplní je npm install <BALICEK>, ručně je nepište. |
Soubor package-lock.json vznikne sám a zamyká přesné verze všech balíčků. Nahrajte ho na server spolu s package.json, ať se na serveru nainstalují stejné verze jako v počítači.
JSON nesnese chyby
V package.json musí být klíče i texty ve dvojitých uvozovkách, za posledním řádkem bloku nesmí být čárka a komentáře nejsou povolené. Jedna chyba a instalace balíčků skončí chybou EJSONPARSE.
Co nahrát a co ne#
| Soubor nebo složka | Nahrát? | Proč |
|---|---|---|
index.js, commands/, events/ a další kód | Ano | Samotný bot. |
package.json, package-lock.json | Ano | Podle nich se nainstalují balíčky. |
.env s tokenem | Ano, jen na server | Bot z něj čte token. Nikdy ho nedávejte na GitHub ani nikomu neposílejte (návod). |
node_modules/ | Ne | Tisíce souborů. Balíčky se mají nainstalovat na serveru. Balíčky s nativním kódem z Windows by na serveru navíc nefungovaly. |
.git/, logs/, testovací data | Ne | Server je nepotřebuje. |
Nahrání do zákaznické zóny#
- V zákaznické zóně otevřete Moje služby, klikněte na bota a přejděte na záložku Soubory.
- Zůstaňte v kořenové složce
/. Sem patřípackage.jsona nejlépe i hlavní soubor bota. - Klikněte na Nahrát a vyberte soubory z kořene projektu (
index.js,package.json,package-lock.json,.env…). Soubory můžete do okna i přetáhnout. - Pro každou podsložku (například
commands) klikněte na Nová složka, otevřete ji a nahrajte do ní její soubory. Celé složky naráz nahrát nejde.
Velký projekt s mnoha složkami pohodlněji nahrajete přes SFTP, přístup vám zřídí podpora (kontakty). Limity správce souborů najdete v návodu Správa souborů.
Nastavení spuštění#
- Přejděte na záložku Nastavení.
- Rozbalte Příkaz pro spuštění a podívejte se, jakým příkazem se bot spouští. Příkaz je jen pro čtení. Pokud je zakrytý šrafovaným pruhem, je zapnutý režim streamu. Klikněte nahoře na Zobrazit údaje.
- V části Proměnné najděte proměnnou s hlavním souborem (podle popisu, typicky s výchozí hodnotou
index.js) a vyplňte název svého hlavního souboru, napříkladindex.jsnebobot.js. - Klikněte na Uložit.
Změny proměnných se projeví po dalším spuštění bota.
Instalace balíčků#
Balíčky ze package.json se musí nainstalovat na serveru.
- V Příkazu pro spuštění zkontrolujte, jestli obsahuje
npm install. - Pokud ano, balíčky se nainstalují samy při každém spuštění bota. V konzoli pak uvidíte výpis instalace, například
added 25 packages. První start proto trvá déle. - Pokud
npm installv příkazu není, nebo se balíčky přesto nenainstalují (bot hlásíCannot find module 'discord.js'), napište nám. Složkunode_modulesz počítače nenahrávejte.
Nový balíček přidáte tak, že ho nainstalujete v počítači (npm install <BALICEK>), na server nahrajete nový package.json a package-lock.json a bota restartujete.
Verze Node.js#
Verzi Node.js, na které bot běží, zjistíte z výpisu. Na úplný začátek hlavního souboru přidejte:
console.log('Node.js', process.version);Po spuštění uvidíte v Konzoli například Node.js v22.….
process.version– verze Node.js, na které kód právě běží, ve tvaruv<HLAVNI>..<VEDLEJSI>. <OPRAVA>
Co s ní:
| Knihovna nebo funkce | Potřebná verze Node.js |
|---|---|
| discord.js 14 | 18 nebo novější |
process.loadEnvFile() (načtení .env bez balíčku) | 20.12 nebo novější |
require() balíčků, které existují jen jako ES moduly | 20.19 nebo 22.12 a novější |
Na svém počítači používejte stejnou hlavní verzi jako na serveru, ať se kód chová stejně. Doporučené jsou verze LTS (k 1. 10. 2026 je aktivní LTS Node.js 24, udržovaná LTS Node.js 22). Pole engines v package.json verzi na serveru nezmění. Pokud bot potřebuje jinou verzi Node.js, napište nám.
První start a kontrola#
Přejděte na záložku Konzole a klikněte na Spustit.
Sledujte výpis:
Výstuptext Node.js v22.… Ready! Logged in as MujBot#1234Řádek
Ready! …vypisuje bot z návodu první bot v discord.js. Váš bot může vypisovat jiný text.Na Discordu má bot zelenou tečku (online).
Aktualizace kódu#
- V počítači kód upravte a vyzkoušejte.
- V záložce Soubory nahrajte změněné soubory. Nahrání stejnojmenného souboru se zeptá na přepsání, potvrďte ho.
- V záložce Konzole klikněte na Restartovat. Node.js načítá kód jen při startu.
Před větší změnou si stáhněte důležité soubory do počítače (tlačítko Stáhnout), ať se máte kam vrátit.
Bot s databází#
Data, která mají přežít restart (body, varování, nastavení serverů), ukládejte do databáze, ne do proměnných v paměti.
V záložce Databáze vytvořte databázi: Název databáze například
bot, Povolený přístup z%, tlačítko Vytvořit databázi. Kolik databází můžete mít, ukazuje řádekVyužito X z Y.Údaje zapište do
.envna serveru:.envini DB_HOST=<IP_DATABAZE> DB_PORT=3306 DB_USER=<UZIVATEL> DB_PASSWORD=<HESLO> DB_NAME=<NAZEV_DATABAZE><IP_DATABAZE>a port jsou v poli Server (část před a za dvojtečkou), ostatní údaje opište z polí Uživatel, Heslo a Název databáze.V počítači nainstalujte knihovnu
mysql2(npm install mysql2) a v kódu vytvořte připojení:db.jsJavaScript const mysql = require('mysql2/promise'); const pool = mysql.createPool({ host: process.env.DB_HOST, port: Number(process.env.DB_PORT), user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, connectionLimit: 5, }); module.exports = pool;mysql.createPool({ … })– vytvoří sadu připojení, která se opakovaně používají. Je odolnější než jedno připojení, které může po delší nečinnosti spadnout.Number(– hodnoty zprocess. env. DB_ PORT) .envjsou text, port musí být číslo.connectionLimit: 5– nejvýš 5 současných připojení. Botovi to stačí.
Použití:
const db = require('./db');a pakconst [radky] = await db.query('SELECT * FROM body WHERE uzivatel = ?', [id]);. Otazník je zástupný znak: hodnotu do dotazu vloží knihovna bezpečně, chrání to proti SQL injection.
Databázi si pravidelně exportujte, například v programu HeidiSQL (postup).
Bezpečné vypnutí bota#
Při kliknutí na Vypnout nebo Restartovat dostane proces signál k ukončení. Bot se může slušně odhlásit a dokončit zápisy:
async function ukoncit(signal) {
console.log(`Přijat ${signal}, ukončuji bota…`);
await client.destroy();
process.exit(0);
}
process.on('SIGINT', ukoncit);
process.on('SIGTERM', ukoncit);process.on('SIGINT' | 'SIGTERM', …)– zachytí žádost o ukončení (v počítači ji pošle Ctrl+C, na serveru vypnutí).client.destroy()– odpojí bota od Discordu.process.exit(0)– ukončí proces s kódem 0 (bez chyby).
Pokud máte databázi, zavřete před process.exit i ji (await pool.end()).
Pro pokročilé: TypeScript a jiné sestavení#
Server spouští JavaScript. Kód v TypeScriptu (nebo s jiným sestavením) zkompilujte v počítači (například npx tsc), na server nahrajte výsledné soubory .js (typicky složku dist) a v Proměnných nastavte hlavní soubor na zkompilovaný soubor. Zdrojové soubory .ts a vývojové balíčky (devDependencies) na serveru nepotřebujete.
Ověření#
- V Konzoli je výpis startu bez chyby a bot nepadá dokola.
- Bot je na Discordu online a reaguje na příkazy.
- Po kliknutí na Restartovat se bot do pár sekund vrátí online.
Když něco nefunguje#
Error: Cannot find module 'discord.js'#
Balíčky nejsou nainstalované. Zkontrolujte, že package.json je v kořenové složce a obsahuje discord.js v dependencies. Pak postupujte podle části „Instalace balíčků“.
Error: Cannot find module '/…/index.js'#
Hlavní soubor nesedí s nastavením: soubor má jiný název, je v podsložce, nebo nesedí velká a malá písmena (Index.js a index.js jsou na serveru dva různé soubory). Opravte proměnnou s hlavním souborem, nebo soubor přesuňte do kořene.
npm error code EJSONPARSE#
package.json není platný JSON (chybějící čárka nebo uvozovka, čárka navíc, komentář). Opravte ho v počítači, ověřte příkazem npm install a nahrajte znovu.
Bot se spustí a hned spadne, pořád dokola#
Automatický restart chybu v kódu nevyřeší. Najděte v Konzoli první chybu po startu (řádek s Error a seznamem souborů pod ním), opravte ji a bota spusťte znovu. Vysvětlení nejčastějších hlášek je v návodu logy a chyby.
An invalid token was provided. nebo Used disallowed intents#
Problém s tokenem nebo intenty v Developer Portalu. Postup je v návodu token a intenty.
SyntaxError: Cannot use import statement outside a module#
Kód používá import, ale projekt je nastavený na require(). V package.json nastavte "type": "module", nebo kód přepište na require(). Podrobně v návodu logy a chyby.
Shrnutí
- Do kořenové složky v záložce Soubory nahrajte kód,
package.json,package-lock.jsona.env.node_modulesnenahrávejte. mainvpackage.jsona proměnná s hlavním souborem v záložce Nastavení musí ukazovat na stejný soubor.- Balíčky se instalují na serveru. Zda automaticky, poznáte podle
npm installv Příkazu pro spuštění. - Verzi Node.js zjistíte řádkem
console.. discord.js 14 potřebuje Node.js 18 a novější.log( process. version) - Po každé změně kódu bota restartujte.