本指南介绍如何在 Discord 开发者门户创建应用和机器人、保护令牌、邀请到社区服务器,并在 Linux VPS 上 24 小时托管(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)。
用“机器人邀请链接”工具生成邀请链接(bot + applications.commands scope,最小权限)。
打开链接,选择服务器(需要“管理服务器”权限)并授权。
编写最小机器人(discord.js),用 .env 中的令牌在本地测试。
准备 Linux VPS:非 root 用户、防火墙、Node.js(参见“准备 VPS”指南)。
部署代码,把令牌放入 .env 文件(chmod 600),用 systemd、pm2 或 Docker 运行机器人。
配置社区服务器:角色、频道、权限、Webhook 与管理。
前提条件
需要 Discord 账号(启用 2FA)、您拥有或管理的服务器,以及 Node.js LTS(或 Python):请核对所安装 discord.js 版本要求的最低版本。托管方面:Linux VPS(小型机器人通常 1 vCPU 加 512 MB 到 1 GB 内存即可,视代码调整)。切勿分享机器人令牌,它拥有机器人的完全控制权。
创建应用和机器人
- discord.com/developers/applications → New Application → 名称 → Create。
- General Information:复制 Application ID(公开的 client_id)。
- Bot → Reset Token → 复制令牌(仅显示一次)。
- 令牌一旦泄露(公开 Git 仓库、截图等),立即执行 Reset Token。
保护令牌(.env)
切勿把令牌写进代码。使用被 Git 忽略、仅当前用户可读的 .env 文件。示例(虚构值):
echo 'DISCORD_TOKEN=ChangeMe!' > .env
chmod 600 .env
echo '.env' >> .gitignorePrivileged Intents
- Server Members Intent:成员加入/离开事件与完整成员列表。
- Message Content Intent:读取消息文本(只用斜杠命令则不需要)。
- Presence Intent:成员在线状态。
- 超过一定服务器数量(撰写时 Discord 政策为 100)后,这些 intent 需要验证机器人:请查看最新政策。
邀请机器人
邀请链接格式如下(虚构 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 和路径,用 “which node” 确认 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"]配置社区服务器
- 角色:按职能创建角色(管理员、版主、成员)并授予最小权限;机器人的角色必须位于其管理的角色之上。
- 频道:建立分类(欢迎、规则、综合、支持、语音),按分类而非单个频道设置权限。
- Webhook:要发布游戏服务器状态,请用“Webhook 嵌入构建器”制作嵌入。
- 管理:验证等级、AutoMod、审核日志;在服务器设置中为版主启用 2FA 要求。
- 曝光:在 game-rank.com/jeux 登记您的游戏服务器以便被发现。
故障排除
- “TokenInvalid” / “An invalid token was provided”:令牌错误、多余空格或已被重置。请通过 Reset Token 重新复制。
- “Used disallowed intents”:在 Bot 标签页启用对应特权 intent,或从代码中移除。
- “Missing Access” / “Missing Permissions”:机器人在该频道无权限,或其角色在层级中过低。
- 斜杠命令不显示:邀请时缺少 applications.commands scope,或命令未注册(部署);请用正确链接重新邀请机器人。
- 机器人在 VPS 上掉线:查看日志(journalctl -u discord-bot -f),检查可用内存以及是否设置了 Restart=on-failure。
常见问题
- Discord 机器人免费吗?
- 在开发者门户创建机器人是免费的,只有托管(VPS 或常开的电脑)可能每月花费几欧元。
- 令牌泄露了怎么办?
- 立即在 Bot 标签页点击 Reset Token,更新 .env,重启机器人并检查服务器审核日志。
- systemd、pm2 还是 Docker?
- systemd 最轻量且内置于 Linux;pm2 适合同时管理多个 Node.js 进程;Docker 隔离环境并使部署可复现。三者都能在崩溃后重启机器人。
- 托管机器人需要开放端口吗?
- 不需要:机器人自己向 Discord 发起出站连接。仅需保持 SSH 端口可访问以便管理(除非对外提供网站)。
