Discord ボットは Discord のゲートウェイに接続したままになるため、常時稼働するマシンが必要です。小さな VPS なら安価で、常時オンラインを保て、自宅のインターネットにも依存しません。このガイドでは、discord.js を使った Node.js ボットをデプロイし、systemd で稼働を維持します。
どのサイズの VPS か
ほとんどのボットには、1 vCPU と 1 〜 2 GB の 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);
discord.js ガイドの方法で、/ping スラッシュコマンドを一度登録します。
ステップ 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 にします。
良い習慣
- 必要なインテントだけを使います。特権インテントは、ポータルで有効にする必要があります。
- トークンが漏えいした場合は、すぐにポータルでリセットしてください。
- 失敗時の再起動は上で設定済みです。ボットがコミュニティにとって重要なら、監視を追加してください。