Jak uruchomić bota Discord w Node.js na hostingu
Uruchom bota Discord w Node.js (discord.js) na serwerze Hostero: pliki bota, token w .env, biblioteki z package.json i pliki TypeScript.
Serwer do bota z Node.js przy każdym starcie instaluje biblioteki z package.json i uruchamia plik startowy bota. Przykład używa biblioteki discord.js (otwiera się w nowej karcie), ale tak samo uruchomisz bota w innej bibliotece, np. Eris albo Oceanic.js.
Zanim zaczniesz
Potrzebujesz bota utworzonego w Discord Developer Portal i jego tokenu. Jak je zdobyć, opisuje artykuł Jak utworzyć bota Discord.
Pliki bota
W zakładce Pliki utwórz trzy pliki: kliknij Nowy plik, wklej treść, kliknij Stwórz plik i wpisz nazwę. Pliki z komputera wgrasz przyciskiem Wgraj plik albo przez SFTP. Folderu node_modules nie wgrywaj, serwer zainstaluje biblioteki sam.
Token w pliku .env
Token trzymaj w pliku .env, a nie w kodzie. Dzięki temu nie wycieknie, gdy pokażesz komuś kod albo wrzucisz go na GitHuba.
TOKEN=<twój-token>Kod bota
Plik index.js z botem, który loguje się do Discorda i odpowiada na komendę /ping. process.loadEnvFile() wczytuje token z pliku .env bez dodatkowych bibliotek.
process.loadEnvFile();
const { Client, Events, GatewayIntentBits, SlashCommandBuilder } = require("discord.js");
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const ping = new SlashCommandBuilder()
.setName("ping")
.setDescription("Sprawdza, czy bot odpowiada");
client.once(Events.ClientReady, async (readyClient) => {
await readyClient.application.commands.set([ping.toJSON()]);
console.log(`Zalogowano jako ${readyClient.user.tag}`);
});
client.on(Events.InteractionCreate, async (interaction) => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === "ping") {
await interaction.reply(`Pong! ${client.ws.ping} ms`);
}
});
client.login(process.env.TOKEN);Lista bibliotek
Plik package.json z bibliotekami w sekcji dependencies:
{
"name": "moj-bot",
"private": true,
"main": "index.js",
"dependencies": {
"discord.js": "^14.28.1"
}
}Uruchomienie
Kliknij Uruchom w zakładce Konsola. Serwer zainstaluje biblioteki komendą npm install i uruchomi index.js. Gdy zobaczysz Zalogowano jako, bot jest online na Discordzie.
Ustawienia serwera
W zakładce Parametry startowe zmienisz, jak serwer uruchamia bota:
- Wersja środowiska (Obraz Docker): wersja Node.js, od 12 do 26. discord.js 14 wymaga co najmniej Node.js 18, a
process.loadEnvFile()co najmniej 20.12. Zmiana działa po ponownym uruchomieniu serwera. - Plik startowy: plik, który serwer uruchamia. Domyślnie
index.js. Jeśli twój bot startuje zbot.jsalbosrc/index.js, wpisz tu tę ścieżkę. - Dodatkowe biblioteki NodeJS: biblioteki do zainstalowania przy starcie, oddzielone spacjami, np.
dayjs mongoose. Serwer dopisze je dopackage.json. - Odinstaluj biblioteki NodeJS: biblioteki do usunięcia przy starcie, też oddzielone spacjami.
- Dodatkowe argumenty: argumenty przekazywane do bota po nazwie pliku.
Biblioteki
Serwer instaluje biblioteki z package.json. Jeśli wgrasz też plik package-lock.json, npm install zainstaluje dokładnie te wersje, które masz u siebie, więc bot po restarcie zachowa się tak samo.
Nową bibliotekę dodasz na dwa sposoby:
- U siebie na komputerze: w folderze bota uruchom
npm install <nazwa>, a potem wgraj nowepackage.jsonipackage-lock.json. - W panelu: wpisz nazwę w polu Dodatkowe biblioteki NodeJS i uruchom serwer ponownie. Po instalacji możesz wyczyścić to pole, bo biblioteka jest już w
package.json.
TypeScript
Jeśli w polu Plik startowy wpiszesz plik .ts, np. index.ts, serwer uruchomi go przez ts-node, bez wcześniejszej kompilacji. Większe projekty lepiej skompilować u siebie komendą tsc i wpisać jako plik startowy gotowy plik .js, np. dist/index.js.
Najczęstsze problemy
Error: Cannot find module …
Brakuje biblioteki. Dopisz ją do dependencies w package.json albo do pola Dodatkowe
biblioteki NodeJS i uruchom serwer ponownie. Jeśli brakuje pliku twojego bota, sprawdź pole
Plik startowy.
TypeError: process.loadEnvFile is not a function
Serwer ma starszą wersję Node.js. W Parametrach startowych wybierz w Wersji środowiska Node.js 22 albo nowszy i uruchom serwer ponownie.
Error [TokenInvalid]: An invalid token was provided
Token jest błędny albo został zresetowany. Wygeneruj nowy w Developer Portal i wpisz go w .env
po TOKEN=, bez cudzysłowów i spacji.
Used disallowed intents
Kod prosi o intencję, która nie jest włączona w portalu, np. MessageContent. Włącz ją w
Developer Portal w zakładce Bot, w sekcji Privileged Gateway Intents.
SyntaxError: Cannot use import statement outside a module
Kod używa import, a projekt nie jest ustawiony jako moduł ES. Dopisz "type": "module" do
package.json albo zamień import na require.