Discord-бот подключается к шлюзу Discord и остаётся на связи, поэтому ему нужна всегда включённая машина. Небольшой VPS недорог, всегда в сети и не зависит от вашего домашнего интернета. В этом руководстве разворачивается бот на Node.js с discord.js, а его работа поддерживается через systemd.
Какой размер VPS?
1 vCPU и 1–2 ГБ RAM достаточно для большинства ботов. Более крупным ботам, которые кешируют много серверов или обрабатывают аудио, нужно больше. Тарифы смотрите на странице хостинга для Discord-ботов.
Шаг 1: создайте бота в Discord
- Откройте Discord Developer Portal и создайте новое приложение.
- Добавьте Bot, скопируйте его токен и держите его в секрете.
- В разделе OAuth2 создайте ссылку-приглашение с областями
botиapplications.commandsи добавьте бота на свой сервер.
Шаг 2: установите Node.js
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node -v
sudo adduser --disabled-password --gecos "" discord
Шаг 3: напишите бота
sudo -iu discord
mkdir ~/bot && cd ~/bot
npm init -y
npm install discord.js
// index.js
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once('ready', () => console.log('Logged in as ' + client.user.tag));
client.on('interactionCreate', async (i) => {
if (i.isChatInputCommand() && i.commandName === 'ping') await i.reply('Pong!');
});
client.login(process.env.DISCORD_TOKEN);
Один раз зарегистрируйте слеш-команду /ping способом, описанным в руководстве по discord.js.
Шаг 4: не храните токен в коде
echo "DISCORD_TOKEN=your-token-here" > ~/bot/.env
chmod 600 ~/bot/.env
Шаг 5: запустите через systemd
[Unit]
Description=Discord bot
After=network-online.target
[Service]
User=discord
WorkingDirectory=/home/discord/bot
EnvironmentFile=/home/discord/bot/.env
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now discordbot
journalctl -u discordbot -f
Назовите файл /etc/systemd/system/discordbot.service.
Хорошие привычки
- Используйте только нужные вам intents. Привилегированные intents нужно включать в портале.
- Если токен когда-либо утечёт, немедленно сбросьте его в портале.
- Перезапуск при сбое настроен выше. Добавьте мониторинг, если бот важен для сообщества.