# 部署 Python 机器人

> 在 Daki Hosting 上部署 Python Discord 机器人（discord.py 或 py-cord）的分步指南。

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

## 你将学到

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

---

## 前提条件

- 一个 Daki 账户（Free Tier 或付费）— 参见[创建账户与登录](https://daki.cc/zh/wiki/guides/account-create)
- 一个带有**机器人令牌**的 Discord 机器人，在 [Discord 开发者门户](https://discord.com/developers/applications) 中创建
- 你的机器人源代码，包括列出所有依赖的 `requirements.txt`（例如 `discord.py` 或 `py-cord`，以及 `python-dotenv`）

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

---

## 部署

**步骤 1: 创建 Python 服务器**

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

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

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

通过 SSO 或直接访问 [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)。

> **信息:** 请在项目根目录中包含 `requirements.txt`。安装命令会使用它来安装你的依赖。

**步骤 4: 配置 Startup 标签页**

打开 **Startup** 标签页，并配置以下三个字段：

**1. Docker Image** — 选择你的机器人所需的 Python 版本（例如 **Python 3.13**）。如果不确定，Python 3.13 是安全的默认选择；只要你的所有库都支持，更新的版本也可以使用。避免选择标记为 **EOL** 的版本，它们不再接收安全更新。

**2. Install Command** — 设置为自动安装依赖：
```
pip install -r requirements.txt
```
**3. Startup Command** — 设置为运行机器人的命令：
- `python main.py` — 如果你的入口文件是 `main.py`
- `python bot.py` — 如果你的入口文件是 `bot.py`
- `python -m mypackage` — 如果你的项目以包的形式组织

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

完整说明参见[启动设置](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**。

确保 `python-dotenv` 已列在你的 `requirements.txt` 中，然后在代码中加载该文件：

```python

from dotenv import load_dotenv

import os

import discord



load_dotenv()

TOKEN = os.environ.get("BOT_TOKEN")



intents = discord.Intents.default()

client = discord.Client(intents=intents)



@client.event

async def on_ready():

    print(f"Logged in as {client.user}")



client.run(TOKEN)

```
关于使用 `.env` 文件的更多信息，参见[环境变量](https://daki.cc/zh/wiki/guides/environment-variables)。

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

在 **Console** 标签页中点击 **Start**。成功启动时，会打印：

```

Logged in as MyBot#1234

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

---

## 常见问题

**ModuleNotFoundError: No module named 'discord'**

你的依赖没有被安装。请检查 `requirements.txt` 中是否列出了 `discord.py` 或 `py-cord`，并确认 Startup 标签页中的安装命令为 `pip install -r requirements.txt`。重启服务器以触发安装。

**ModuleNotFoundError: No module named 'dotenv'**

将 `python-dotenv` 添加到你的 `requirements.txt` 中，然后重启服务器。

**discord.errors.LoginFailure: Improper token has been passed**

`.env` 文件中的令牌不正确或缺失。在 Files 标签页中打开 `.env` 文件，仔细检查其值。删除多余的空格或引号。

**PrivilegedIntentsRequired error**

你的机器人请求了未在 Discord 开发者门户中启用的 Intents。请在你的机器人应用设置中启用所需的特权 Intents（例如 Message Content Intent），并确保你的代码请求的是相同的 Intents。

**服务器启动后立即崩溃**

阅读 Console 中的错误输出。常见原因：启动命令错误（文件名拼写错误或路径错误）、缺少 `requirements.txt`，或缺少某个包。参见[故障排查](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-python
