# 部署 Discord.js 机器人

> 在 Daki Hosting 上部署 Discord.js（Node.js）机器人的分步指南。

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

## 你将学到

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

---

## 前提条件

- 一个 Daki 账户（Free Tier 或付费）— 参见[创建账户与登录](https://daki.cc/zh/wiki/guides/account-create)
- 一个带有**机器人令牌**的 Discord 机器人，在 [Discord 开发者门户](https://discord.com/developers/applications) 中创建
- 你的机器人源代码，包括在 `package.json` 中声明了 `discord.js` 和 `dotenv` 依赖的文件

> **信息:** Discord 机器人会**向外**连接到 Discord 的服务器，不需要入站端口。这意味着 Discord 机器人在 Free Tier 和付费套餐上都能运行。如果你的机器人还需要处理 HTTP 请求（例如斜杠命令交互或 Webhook），则需要付费套餐，因为公网可访问的端口仅在付费套餐中提供。参见[网络与端口分配](https://daki.cc/zh/wiki/guides/network-allocations)。

---

## 部署

**步骤 1: 创建 Node.js 服务器**

1. 在 [free.daki.cc](https://free.daki.cc) 登录 Free Tier Dashboard，或在 [billing.daki.cc](https://billing.daki.cc) 登录 Billing Panel。
2. 创建新服务器，并选择 **Node.js** Egg。
3. 为你的服务器命名（例如 `MyDiscordBot`）。

完整流程参见[创建你的第一个免费服务器](https://daki.cc/zh/wiki/guides/create-server)。

**步骤 2: 访问门户**

通过 SSO 登录 门户（在控制台的 **Account** 页面或你的 Billing Panel 服务页面点击 **Open Portal**），或直接访问 [portal.daki.cc](https://portal.daki.cc)。参见[门户概览](https://daki.cc/zh/wiki/guides/portal)。

**步骤 3: 上传机器人代码**

**方式 A — 上传 ZIP（最简单）：**
1. 在本地将你的项目文件夹压缩为 `.zip` 文件。
2. 在门户中进入 **Files** 标签页，点击 **Upload**。
3. 右键点击 `.zip` 文件，然后点击 **Extract**。

**方式 B — 使用 SFTP（无大小限制）：**
使用 **Settings** 标签页中的 SFTP 凭据进行连接，然后直接上传你的文件夹。参见[文件管理器](https://daki.cc/zh/wiki/guides/file-manager)。

> **信息:** **不要**将 `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** — 设置为自动安装依赖：
```
npm install
```
**3. Startup Command** — 设置为启动机器人的命令：
- `node index.js` — 如果你的入口文件是 `index.js`
- `node bot.js` — 如果你的入口文件是 `bot.js`
- `npm start` — 如果你的 `package.json` 中有 `start` 脚本

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

完整说明参见[启动设置](https://daki.cc/zh/wiki/guides/startup-settings)。

**步骤 5: 通过 .env 文件添加机器人令牌**

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

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

在机器人代码中，使用 `dotenv` 加载它：
```js
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` 文件的更多信息，参见[环境变量](https://daki.cc/zh/wiki/guides/environment-variables)。

**步骤 6: 启动你的机器人**

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

```

Logged in as MyBot#1234!

```
如果出现的是错误，请查看[故障排查](https://daki.cc/zh/wiki/guides/troubleshooting)指南。

---

## 常见问题

**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`。参见[故障排查](https://daki.cc/zh/wiki/guides/troubleshooting)。

---

## 下一步

- [环境变量](https://daki.cc/zh/wiki/guides/environment-variables) — 关于 `.env` 文件以及在代码中读取变量的完整指南。
- [保持免费服务器运行](https://daki.cc/zh/wiki/guides/save-free-server-from-purge) — 观看广告，让你的 Free Tier 服务器保持运行。
- [文件管理器](https://daki.cc/zh/wiki/guides/file-manager) — 修改代码后更新你的代码文件。

---
Source: https://daki.cc/zh/wiki/guides/deploy-discordjs
