跳到正文

部署 Discord.js 机器人

在 Daki Hosting 上部署 Discord.js(Node.js)机器人的分步指南。

本指南将带你在 Daki Hosting 上部署一个 Discord.js 机器人 — 从创建服务器,到机器人上线并安全地读取其令牌。

你将学到

  • 如何为你的机器人创建 Node.js 服务器
  • 如何上传你的代码
  • 如何配置安装命令、启动命令和 Docker 镜像
  • 如何使用 .env 文件安全地设置机器人令牌
  • 如何启动机器人并验证其运行正常

前提条件

  • 一个 Daki 账户(Free Tier 或付费)— 参见创建账户与登录
  • 一个带有机器人令牌的 Discord 机器人,在 Discord 开发者门户 中创建
  • 你的机器人源代码,包括在 package.json 中声明了 discord.js 和 dotenv 依赖的文件

Discord 机器人会向外连接到 Discord 的服务器,不需要入站端口。这意味着 Discord 机器人在 Free Tier 和付费套餐上都能运行。如果你的机器人还需要处理 HTTP 请求(例如斜杠命令交互或 Webhook),则需要付费套餐,因为公网可访问的端口仅在付费套餐中提供。参见网络与端口分配。


部署

  1. 创建 Node.js 服务器

    1. 在 free.daki.cc 登录 Free Tier Dashboard,或在 billing.daki.cc 登录 Billing Panel。
    2. 创建新服务器,并选择 Node.js Egg。
    3. 为你的服务器命名(例如 MyDiscordBot)。

    完整流程参见创建你的第一个免费服务器。

  2. 访问门户

    通过 SSO 登录 门户(在控制台的 Account 页面或你的 Billing Panel 服务页面点击 Open Portal),或直接访问 portal.daki.cc。参见门户概览。

  3. 上传机器人代码

    方式 A — 上传 ZIP(最简单):

    1. 在本地将你的项目文件夹压缩为 .zip 文件。
    2. 在门户中进入 Files 标签页,点击 Upload。
    3. 右键点击 .zip 文件,然后点击 Extract。

    方式 B — 使用 SFTP(无大小限制): 使用 Settings 标签页中的 SFTP 凭据进行连接,然后直接上传你的文件夹。参见文件管理器。

    不要将 node_modules 文件夹包含在上传内容中 — 它会由安装命令自动安装。请务必包含你的 package.json 和 package-lock.json。

  4. 配置 Startup 标签页

    打开 Startup 标签页,并配置以下三个字段:

    1. Docker Image — 选择你的机器人所需的 Node.js 版本(例如 Node.js 22 或 Node.js 24)。如果不确定,Node.js 24 LTS 是安全的默认选择。避免选择标记为 EOL 的版本,它们不再接收安全更新。

    2. Install Command — 设置为自动安装依赖:

    Shell
    npm install

    3. Startup Command — 设置为启动机器人的命令:

    • node index.js — 如果你的入口文件是 index.js
    • node bot.js — 如果你的入口文件是 bot.js
    • npm start — 如果你的 package.json 中有 start 脚本

    你可以根据项目结构自由调整这些命令。

    完整说明参见启动设置。

  5. 通过 .env 文件添加机器人令牌

    机器人需要 Discord 令牌才能连接。将其保存在服务器的 .env 文件中,这样它就永远不会出现在你的源代码里。

    1. 在 Files 标签页中,点击 New File,并将其命名为 .env。
    2. 添加你的令牌:
      .env
      BOT_TOKEN=your_discord_bot_token_here
    3. 点击 Save。

    在机器人代码中,使用 dotenv 加载它:

    JavaScript
    require('dotenv').config();
    
    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.login(process.env.BOT_TOKEN);

    确保 dotenv 已列在你的 package.json 依赖中,这样安装命令才会将其安装。

    关于使用 .env 文件的更多信息,参见环境变量。

  6. 启动你的机器人

    在 Console 标签页中点击 Start。成功启动时,会打印机器人的登录确认信息:

    Text
    Logged in as MyBot#1234!

    如果出现的是错误,请查看故障排查指南。


常见问题

Error: Cannot find module 'discord.js'

你的依赖没有被安装。请检查你的 package.json 是否将 discord.js 列为依赖,并确认 Startup 标签页中的安装命令为 npm install。重启服务器以触发安装。

Error: Cannot find module 'dotenv'

将 dotenv 添加到你的 package.json 依赖中,然后重启服务器以重新安装。

Error: An invalid token was provided

.env 文件中的机器人令牌不正确或缺失。进入 Files 标签页,打开 .env,并检查其值。确保没有多余的空格、引号或换行。

机器人启动后不久便断开连接

这通常是缺少 Gateway Intents 导致的。在 Discord 开发者门户中,为你的机器人应用启用所需的特权 Intents(例如 Message Content Intent),并确保你的代码请求了这些 Intents。

服务器启动后立即崩溃

打开 Console 标签页并阅读错误信息。常见原因:启动命令错误(文件名拼写错误)、Node.js 版本错误,或缺少 node_modules。参见故障排查。


下一步