概述
在 Discord 上部署一个 Bot 并不复杂,但涉及到的权限和意图(Intents)设置容易踩坑。本文将带你从开发者后台开始,一步步完成应用的创建、Bot 用户的配置、Token 管理以及最终的代码接入测试。
1. 创建应用与 Bot 用户
首先访问 Discord 开发者门户。点击 New Application,输入名称(例如 MyForwarderBot),确认创建。
进入应用详情页后,选择左侧的 Bot 标签页:
- 点击 Add Bot 并确认 Yes, do it。
- 此时 Bot 用户已生成,你可以修改头像、用户名等信息。
2. 关键配置:网关意图与 Token
这一步至关重要,直接决定 Bot 能否收到消息。
开启 Privileged Gateway Intents
在 Bot 页面往下滚动,找到 Privileged Gateway Intents 区域:
- 务必打开 Message Content Intent。如果不启用,SDK 将无法读取普通消息文本。
- 若需获取成员列表或在线状态,按需开启 Server Members Intent 或 Presence Intent。
注意:如果你的 Bot 计划加入超过 100 个服务器,部分特权意图可能需要通过 Discord 的审核验证。
获取并保护 Token
在 Bot 页面中,点击 Reset Token 或 Copy 获取 Bot Token(格式类似 Bot XXXXXXXXX...)。
- 安全提示:切勿将 Token 硬编码到代码库中。建议使用环境变量或
.env文件管理,并确保该文件未被提交至 Git。 - 如果怀疑 Token 泄露,立即在同一页面点击 Regenerate 重置。
3. 邀请链接与服务器权限
要让 Bot 进入你的服务器,需要生成 OAuth2 邀请链接。
- 在左侧菜单选择 OAuth2 → URL Generator。
- Scopes:勾选
bot(如需支持斜杠命令/,同时勾选applications.commands)。 - Bot Permissions:勾选所需权限,建议至少包含:
- View Channels (查看频道)
- Read Message History (读取历史消息)
- Send Messages (发送消息)
- Embed Links (嵌入链接)
- Attach Files (上传附件)
- 复制底部生成的 URL,在浏览器打开并选择目标服务器进行授权。
服务器端检查:
- 进入服务器角色设置,确保 Bot 的角色拥有 View Channels 和 Read Message History 权限。
- 在特定频道的权限覆盖中,也要确认允许读取消息。
4. 代码接入示例
准备好环境后,我们可以用 Python 快速验证连接。这里以 discord.py 为例,展示如何接收消息并处理附件。
import discord
from dotenv import load_dotenv
import os
# 加载环境变量中的 Token
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
intents = discord.Intents.default()
intents.message_content = True # 必须开启此意图才能读取内容
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f'Bot {client.user} 已上线!')
@client.event
async def on_message(message):
# 忽略 Bot 自己的消息
if message.author == client.user:
return
# 简单响应逻辑
if message.content.startswith('!hello'):
await message.channel.send('Hello there!')
# 如果有附件,打印文件名
if message.attachments:
for attachment in message.attachments:
print(f'收到附件:{attachment.filename}')
if __name__ == '__main__':
client.run(TOKEN)
运行脚本后,观察控制台输出。如果看到 Bot ... 已上线!,说明连接成功。尝试在 Discord 发送消息,检查是否触发相应事件。
5. 常见问题排查
- 读不到 message.content:双重检查开发者面板是否开启了 Message Content Intent,且代码中
intents.message_content = True已生效。 - 403 权限错误:确认 Bot 在服务器的角色/频道中有 View Channel 和 Read Message History 权限,且 OAuth2 页面勾选了正确权限。
- API 限流:生产环境中请做好日志记录、错误重试和速率限制处理,避免频繁请求导致 Discord API 暂时封禁。
- 邀请失败:发起邀请的用户必须在目标服务器拥有'管理服务器'或相应的邀请权限。
