Infrastruktura
Discord bot nonstop: co potřebuje a kde ho provozovat
Co bot potřebuje, aby běžel nonstop — proces, restart po pádu, token, databáze — a srovnání domácího PC, free hostingu, VPS a hostingu pro boty.
6 min čteníBlazeHost
Bot, kterého jste napsali a vyzkoušeli na svém počítači, funguje jen do chvíle, než zavřete terminál nebo vypnete PC. Aby byl online nonstop, potřebuje místo, kde jeho proces poběží nepřetržitě, a pár věcí kolem: restart po pádu, bezpečně uložený token, trvalá data a logy. V článku projdeme, co bot technicky potřebuje, a srovnáme čtyři běžné možnosti provozu — domácí PC nebo Raspberry Pi, bezplatný hosting, VPS a hosting pro boty.
Bot je dlouhoběžící proces
Klasický Discord bot není webová stránka, která se probudí při návštěvě. Je to program, který po spuštění naváže s Discordem trvalé spojení přes WebSocket — takzvanou gateway — a přes něj dostává události: nové zprávy, připojení člena, reakce nebo použití příkazu. Jakmile proces skončí, spojení zanikne a bot se v seznamu členů ukáže jako offline. Proto nestačí bota „nahrát“; něco ho musí držet spuštěného. Podrobnosti o gateway najdete v dokumentaci Discordu pro vývojáře.
Slash příkazy (např. /ticket) jsou interakce: Discord je botovi doručí buď přes gateway, nebo — pokud v Developer Portalu nastavíte Interactions Endpoint URL — jako HTTP požadavek na vaši veřejnou HTTPS adresu. Druhá varianta nepotřebuje trvalé spojení, ale potřebuje trvale dostupný webový server. Většina botů postavených na discord.js nebo discord.py používá gateway, protože kromě příkazů reaguje i na další události.
Co se stane, když proces spadne
Neošetřená výjimka, výpadek sítě, nedostatek paměti — proces bota jednou spadne. Knihovny samy zvládají obnovení gateway spojení po krátkém výpadku, ale když skončí celý proces, musí ho znovu spustit něco zvenčí. Na vlastním serveru nebo VPS se k tomu používají správci procesů: pro Node.js často pm2, obecně systemd služba s volbou Restart=on-failure. Příklad s pm2:
npm install -g pm2
pm2 start index.js --name my-bot # spustí bota a restartuje ho po pádu
pm2 logs my-bot # živý výpis logů
pm2 save && pm2 startup # obnovení po restartu serveruPamatujte, že restart řeší jednorázový pád, ne chybu v kódu. Pokud bot padá hned po startu, bude se restartovat dokola — příčinu najdete v logu.
Token a privilegované intenty
Token je heslo vašeho bota. Kdo ho má, může se za bota přihlásit a na všech serverech, kde je, dělat cokoli, co mu dovolují oprávnění. Do kódu ho nepište napevno: načtěte ho z proměnné prostředí nebo z konfiguračního souboru (typicky .env), který je v .gitignore a nikdy se nedostane do gitu. Minimální příklad pro discord.js v14 (discord.js.org):
// index.js — discord.js v14
const { Client, Events, GatewayIntentBits } = require("discord.js");
const token = process.env.DISCORD_TOKEN;
if (!token) {
console.error("DISCORD_TOKEN is not set");
process.exit(1);
}
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, (c) => {
console.log(`Logged in as ${c.user.tag}`);
});
client.login(token);A totéž v discord.py 2.x (discordpy.readthedocs.io):
# bot.py — discord.py 2.x
import os
import discord
intents = discord.Intents.default()
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f"Logged in as {client.user}")
client.run(os.environ["DISCORD_TOKEN"])Druhá častá past jsou privilegované intenty: Message Content (obsah zpráv), Server Members (seznam členů) a Presence (stav a aktivita). Kód si je musí vyžádat a zároveň je musíte zapnout v Developer Portalu, jinak bot při připojení skončí chybou nebo dostane prázdná data. Boti na 100 a více serverech navíc musí projít ověřením a přístup k privilegovaným intentům jim Discord schvaluje. Vyžadujte jen intenty, které opravdu používáte — pro slash příkazy obsah zpráv nepotřebujete.
Rate limity
Discord omezuje, kolik požadavků smí bot poslat za určitý čas. discord.js i discord.py limity sledují a požadavky samy pozdrží, takže je nemusíte řešit ručně — jen je neobcházejte vlastními smyčkami, které hromadně mažou zprávy nebo mění role. Opakované chybné požadavky (například na neexistující kanály) mohou vést k dočasnému zablokování přístupu k API.
Data, logy a aktualizace
- Data neukládejte jen do paměti. Nastavení serverů, tikety nebo body za aktivitu v proměnné zmizí při každém restartu. Pro menšího bota stačí SQLite (jeden soubor na disku), pro víc dat nebo souběžný přístup z webového panelu se hodí MySQL.
- Logujte. Vypisujte start, chyby a výjimky i s časem. Bez logu nezjistíte, proč bot ve tři ráno spadl.
- Aktualizujte závislosti. Discord API se vyvíjí a starší verze knihoven časem přestanou fungovat. Verze uzamkněte (
package-lock.json,requirements.txt) a aktualizujte vědomě, ne naslepo.
Kde bota provozovat
| Výhody | Nevýhody | |
|---|---|---|
| Domácí PC / Raspberry Pi | Skoro zdarma, plná kontrola, dobré na učení | Elektřina, závislost na domácím internetu a výpadcích proudu, restarty a aktualizace systému řešíte sami |
| Bezplatný hosting | Nic neplatíte | Obvykle omezené prostředky, uspávání při nečinnosti nebo omezená doba běhu, podmínky se mohou změnit |
| VPS | Plná kontrola nad systémem (root), lze provozovat cokoli dalšího | Operační systém, zabezpečení, aktualizace, správce procesů a zálohy spravujete sami |
| Hosting pro boty (kontejner) | Připravené běhové prostředí, konzole, restart po pádu, méně administrace | Bez root přístupu, systémové balíčky neinstalujete sami |
Pro testování a malého bota pro kamarády je domácí PC nebo Raspberry Pi v pořádku. VPS dává smysl, když vedle bota provozujete další služby a správa Linuxu vám nevadí. Hosting pro boty je střední cesta: nestaráte se o systém, jen o kód.
Hosting botů u BlazeHostu
Na našem hostingu Discord botů běží bot v kontejneru v panelu Pterodactyl s připraveným runtime Node.js nebo Python. K službě patří MySQL databáze, konzole s živým logem, proměnné prostředí pro token a automatický restart procesu po pádu. Kód nahrajete přes správce souborů nebo SFTP — základy panelu popisuje návod práce s panelem Pterodactyl. Běží na vlastním hardwaru ve Frankfurtu nad Mohanem s DDoS ochranou na síťové vrstvě (L3/L4) s kapacitou 7,4 Tbps od Dataforest — hodí se hlavně tehdy, když bot vystavuje i webový panel nebo webhook (víc v článku o DDoS útocích). Tarify začínají od 15 Kč měsíčně.
Férově i omezení: jde o kontejner, ne o virtuální server, takže nemáte root přístup a služba nemá vlastní IPv4 adresu. Za kód, token a dodržování podmínek Discordu odpovídáte vy jako provozovatel bota.
Shrnutí
- Bot je dlouhoběžící proces s trvalým spojením na gateway — musí někde běžet nonstop.
- Zajistěte restart po pádu (pm2, systemd nebo hosting, který to dělá za vás) a čtěte logy.
- Token patří do proměnné prostředí, ne do gitu; při úniku ho hned resetujte.
- Privilegované intenty zapněte v Developer Portalu a vyžadujte jen ty, které potřebujete.
- Data ukládejte do SQLite nebo MySQL, ne jen do paměti, a závislosti aktualizujte vědomě.
Nevíte, jaký tarif bude stačit? Napište nám, co bot dělá a na kolika serverech běží, a doporučíme velikost.
Discord bot běžící nonstop
Kontejner s Node.js nebo Pythonem, MySQL databází a restartem po pádu.