Przejdź do treści

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.

.env
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.

index.js
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:

package.json
{
  "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 z bot.js albo src/index.js, wpisz tu tę ścieżkę.
  • Dodatkowe biblioteki NodeJS: biblioteki do zainstalowania przy starcie, oddzielone spacjami, np. dayjs mongoose. Serwer dopisze je do package.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 nowe package.json i package-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.