Руководство показывает, как создать приложение и бота в портале разработчиков Discord, защитить токен, пригласить бота на сервер сообщества и запустить его круглосуточно на Linux VPS (systemd, pm2 или Docker). Потребуется 30–45 минут; для небольшого бота хватит VPS начального уровня.
Пошаговая установка
Включите двухфакторную аутентификацию в аккаунте Discord и установите актуальную LTS-версию Node.js (или Python).
Создайте приложение на discord.com/developers/applications (New Application).
Вкладка Bot: сгенерируйте токен (Reset Token) и один раз скопируйте его в менеджер паролей или файл .env.
Включайте только реально используемые Privileged Gateway Intents (Presence, Server Members, Message Content).
Сгенерируйте ссылку-приглашение (scopes bot + applications.commands, минимум прав) инструментом «Ссылка-приглашение бота».
Откройте ссылку, выберите сервер (нужно право «Управление сервером») и подтвердите.
Напишите минимального бота (discord.js) и проверьте локально с токеном в .env.
Подготовьте Linux VPS: пользователь без root, файрвол, Node.js (см. руководство «Подготовка VPS»).
Разверните код, поместите токен в файл .env (chmod 600) и запустите бота через systemd, pm2 или Docker.
Настройте сервер сообщества: роли, каналы, права, вебхуки и модерацию.
Требования
Нужны аккаунт Discord (с 2FA), сервер, которым вы владеете или управляете, и Node.js LTS (или Python): проверьте минимальную версию для вашей версии discord.js. Для хостинга — Linux VPS (для небольшого бота обычно хватает 1 vCPU и 512 МБ–1 ГБ RAM, подстройте под свой код). Никогда не передавайте токен бота: он даёт полный контроль над ботом.
Создание приложения и бота
- discord.com/developers/applications → New Application → имя → Create.
- General Information: скопируйте Application ID (публичный client_id).
- Bot → Reset Token → скопируйте токен (показывается один раз).
- Если токен утёк (публичный Git-репозиторий, скриншот…), немедленно нажмите Reset Token.
Защита токена (.env)
Никогда не храните токен в коде. Используйте файл .env, исключённый из Git и доступный только вашему пользователю. Пример (фиктивное значение):
echo 'DISCORD_TOKEN=ChangeMe!' > .env
chmod 600 .env
echo '.env' >> .gitignorePrivileged Intents
- Server Members Intent: события входа/выхода и полный список участников.
- Message Content Intent: чтение текста сообщений (не нужен, если только слэш-команды).
- Presence Intent: статусы присутствия участников.
- При превышении определённого числа серверов (100 по политике Discord на момент написания) эти интенты требуют верификации бота: проверьте актуальные правила.
Пригласить бота
Ссылка-приглашение выглядит так (фиктивный client_id, permissions = 3072: видеть и писать в каналах). Посчитайте число в калькуляторе прав и соберите ссылку инструментом:
https://discord.com/oauth2/authorize?client_id=123456789012345678&scope=bot%20applications.commands&permissions=3072Минимальный бот (discord.js)
Установка: npm init -y && npm install discord.js dotenv. Файл index.js (актуальный API — на discordjs.guide):
require('dotenv').config();
const { Client, Events, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, (c) => console.log(`Logged in as ${c.user.tag}`));
client.login(process.env.DISCORD_TOKEN);Хостинг через systemd
Файл /etc/systemd/system/discord-bot.service (поправьте User и пути; путь к node — «which node»). Затем: sudo systemctl daemon-reload && sudo systemctl enable --now discord-bot; логи: journalctl -u discord-bot -f.
[Unit]
Description=Discord bot
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=botuser
WorkingDirectory=/home/botuser/bot
EnvironmentFile=/home/botuser/bot/.env
ExecStart=/usr/bin/node index.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.targetХостинг через pm2
pm2 перезапускает процесс при сбое. Команда «pm2 startup» выводит команду sudo, которую нужно выполнить, чтобы pm2 стартовал при загрузке.
sudo npm install -g pm2
pm2 start index.js --name discord-bot
pm2 save
pm2 startup
pm2 logs discord-botХостинг через Docker
Dockerfile ниже (версию Node подберите по требованиям discord.js). Соберите и запустите, передав токен через env-файл: docker build -t discord-bot . && docker run -d --restart unless-stopped --env-file .env --name discord-bot discord-bot
FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
CMD ["node", "index.js"]Настройка сервера сообщества
- Роли: создайте роли по функциям (админ, модератор, участник) с минимумом прав; роль бота должна стоять выше управляемых ролей.
- Каналы: категории (приветствие, правила, общий, поддержка, голос) и права по категориям, а не по каналам.
- Вебхуки: чтобы публиковать состояние игровых серверов, соберите embed инструментом «Конструктор embed для вебхука».
- Модерация: уровень проверки, AutoMod, журнал аудита; включите требование 2FA для модераторов в настройках сервера.
- Видимость: добавьте игровой сервер на game-rank.com/jeux, чтобы его находили.
Устранение неполадок
- «TokenInvalid» / «An invalid token was provided»: неверный токен, лишний пробел или токен сброшен. Скопируйте заново через Reset Token.
- «Used disallowed intents»: включите нужный привилегированный интент на вкладке Bot или уберите его из кода.
- «Missing Access» / «Missing Permissions»: у бота нет прав в этом канале или его роль слишком низко в иерархии.
- Слэш-команды не появляются: в приглашении не было scope applications.commands либо команды не зарегистрированы (деплой); пригласите бота заново правильной ссылкой.
- Бот отключается на VPS: смотрите логи (journalctl -u discord-bot -f), проверьте свободную память и наличие Restart=on-failure.
Частые вопросы
- Бесплатен ли бот Discord?
- Создание бота в портале разработчиков бесплатно. Платить придётся только за хостинг (VPS или постоянно включённый компьютер) — несколько евро в месяц.
- Что делать, если токен утёк?
- Сразу нажмите Reset Token на вкладке Bot, обновите .env, перезапустите бота и проверьте журнал аудита сервера.
- systemd, pm2 или Docker?
- systemd — самый лёгкий и встроен в Linux; pm2 удобен, если у вас несколько процессов Node.js; Docker изолирует окружение и делает деплой воспроизводимым. Все три перезапускают бота после сбоя.
- Нужен ли открытый порт для хостинга бота?
- Нет: бот сам открывает исходящее соединение с Discord. Для администрирования нужен лишь доступный порт SSH (если вы не публикуете веб-сервер).
