Discord API 为开发人员提供了无数机会与 Discord 集成、构建机器人、自动化服务器以及使用 Python 增强社区。在这份超过 2000 字的综合指南中,我们将深入探讨 Discord API 功能、先决条件、身份验证、端点、库、示例项目和高级技术,为您提供入门所需的一切信息。
为什么将 Discord API 与 Python 结合使用?
在我们深入研究代码之前,有必要强调一下开发人员使用 Python Discord API 构建的一些很酷的东西:
Mee6 – 最受欢迎的 Discord 机器人之一,拥有超过 250 亿用户。提供审核、分级、音乐、Twitch、Reddit 和其他集成。
YAG数据库 – 功能丰富的机器人,具有 100 多个命令,用于审核、日志记录、角色管理、提醒等。用于超过 600,000 个 Discord 服务器。
不和谐.py – 著名的 API 包装器库,支持 Python 中许多最早的 Discord 机器人。为机器人和集成提供简单的抽象。
解流 – 音乐流媒体机器人,具有播放列表队列、YouTube/Twitch 支持以及低音增强等声音过滤器。
不和谐机器人.py – 机器人利用机器学习自动审核有毒内容和垃圾邮件。展示人工智能集成。
不和谐反馈 – 客户反馈机器人允许用户通过 Discord DM 方便地提交评论、评级和反馈。
这些只是少数几个例子——开发人员利用 Python 的灵活性,以创造性的方式将 Discord 与从 Reddit 和 GitHub 到 Spotify 等应用程序的平台集成。
使用 Discord API 的先决条件
在深入进行任何编码之前,您需要先了解以下先决步骤:
创建不和谐帐户
- 显然需要一个 Discord 帐户 – 免费注册 不和谐网 如果你没有的话。
创建一个 Discord 服务器
在 Discord 中创建服务器进行测试。这为您提供了完全的管理访问权限,而不必依赖其他服务器。
对于公共/生产机器人,您稍后需要生成邀请链接以添加到其他服务器。
启用开发者模式
- 在 Discord 中,转到用户设置 > 高级 > 开发者模式以解锁其他选项。
安装Python
已安装 Python 并准备好编码。 Discord API 支持 Python 3.8 或更高版本。
可以选择设置虚拟环境来隔离依赖关系。
获取 Discord API 凭证
要进行 API 调用,我们需要生成凭据:
创建一个 Discord 应用程序
在 不和谐开发者门户,创建一个新应用程序。
这将注册应用程序并提供配置选项。
创建机器人帐户
在应用程序的“机器人”选项卡下,添加一个新的机器人帐户。
您可以自定义用户名、头像等。
复制令牌
在“机器人”选项卡下显示并复制机器人的令牌 - 这用于验证 API 请求。
像密码一样确保其安全。任何拥有令牌的人都可以控制您的机器人。
获取频道 ID
在您的 Discord 服务器下,右键单击频道并选择“复制 ID”以获取频道 ID。
我们将使用通道 ID 来指定向何处发送消息。
使用 Discord API 进行身份验证
有了令牌和通道 ID,我们现在可以进行身份验证。有两种方法:
机器人代币
用于机器人帐户以完全权限进行身份验证。
将令牌传递到
Authorization
标头:
headers = {
‘Authorization‘: ‘Bot ‘ + bot_token
}
用户代币
可用于用户帐户,但权限有限。
在 Discord 开发应用程序的 OAuth2 选项卡下生成。
类似地进行验证:
headers = {
‘Authorization‘: ‘Bearer ‘ + user_token
}
对于完整的 API 访问,机器人令牌更为常见。用户令牌允许代表用户进行交互。
常见的 Discord API 端点
Discord API 公开了不同实体的许多端点,例如通道、消息、用户等。
一些常见的端点包括:
- 通道 –
/channels/{channel.id}
- 在线消息 –
/channels/{channel.id}/messages
- 反应 –
/channels/{channel.id}/messages/{message.id}/reactions
- 公会 –
/guilds/{guild.id}
- 成员 –
/guilds/{guild.id}/members
我们通过向这些端点发出请求来执行发送消息等操作。
Discord API 包装库
虽然我们可以直接调用原始 API,但 Python 包装器库可以简化事情:
- 不和谐.py – 最受欢迎的库,具有直观的面向对象设计。
- 迪蛇 – 更新了discord.py 的一个分支以适应最新的API 更改。
- 阿光 – 注重性能的包装器注重速度。
- 下一条线 – 为 Python 3.10+ 构建的异步 API 包装器。
这些为机器人、命令、事件等提供了简单的抽象,与原始请求相比,节省了开发时间。
发送消息
让我们看一些使用发送消息的代码 /channels/{channel.id}/messages
端点:
import requests
url = "https://discord.com/api/v9/channels/1234567890/messages"
data = {"content": "Hello world!"}
headers = {
"Authorization": "Bot OTI..."
}
response = requests.post(url, headers=headers, json=data)
我们使用 POST 请求 content
发送我们的消息的正文有效负载。
检索消息
为了检索消息,我们从同一端点获取并解析响应:
response = requests.get(url, headers=headers)
json_data = response.json()
for message in json_data:
print(message[‘content‘])
响应包含我们可以迭代的消息对象数组。
编辑消息
要编辑消息,我们需要 message.id
值并使用 PATCH 请求:
message_id = "876543234567891234"
url = f"https://discord.com/api/v9/channels/{channel_id}/messages/{message_id}"
data = {"content": "New message contents!"}
response = requests.patch(url, headers=headers, json=data)
对消息做出反应
我们可以使用 /reactions/{emoji}/@me
端点:
url = f"https://discord.com/api/v9/channels/{channel_id}/messages/{message_id}/reactions/👍/@me"
response = requests.put(url, headers=headers)
这会为来自机器人的消息添加一个竖起大拇指的反应。
删除讯息
最后,我们可以使用 DELETE 请求进行删除:
url = f"https://discord.com/api/v9/channels/{channel_id}/messages/{message_id}"
response = requests.delete(url, headers=headers)
上面的内容应该可以让您对常见的消息传递操作有一个很好的概述。现在我们来讨论一下 WebSocket API 的使用。
利用 WebSocket API
Discord API 提供两种连接选项:
REST API – 用于大多数操作,例如发送消息。
网络套接字接口 – 用于收听消息等实时事件。
WebSocket 允许创建对实时事件做出反应的事件驱动机器人,而不是轮询 REST API。
例如,这是一个简单的 on_message 事件处理程序:
import discord
class MyBot(discord.Client):
async def on_ready(self):
print(‘Logged in as {0}!‘.format(self.user))
async def on_message(self, message):
print(‘Message from {0.author}: {0.content}‘.format(message))
bot = MyBot()
bot.run(‘token‘)
这会立即响应消息,而不是等待 API 调用返回。
处理 API 错误
在调用API时,我们应该优雅地处理错误:
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
except requests.exceptions.HTTPError as err:
print(err)
print(response.text)
一些常见错误包括:
- 50001 – 缺少对资源的访问
- 50035 – 请求体无效
- 429 – 速率有限
查看 文档 有关错误的详细信息。
用 Python 构建 Discord 机器人
让我们通过一个示例机器人来展示核心功能:
机器人特点:
- 启动时发送问候语
- 回复包含“帮助”的消息
- 删除含有禁用词语的邮件
- 添加反应表情符号回复
- 用图片/表情符号回复
# Imports and initialization
import os
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv(‘DISCORD_TOKEN‘)
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
# Event handlers
@client.event
async def on_ready():
channel = client.get_channel(1234567890)
await channel.send("I‘m alive!")
@client.event
async def on_message(message):
if "help" in message.content:
await message.channel.send("Contact our support team for assistance!")
elif check_for_banned_words(message.content):
await message.delete()
# Reactions
emojis = ["👍", "❤️"]
for emoji in emojis:
await message.add_reaction(emoji)
# Run bot
client.run(TOKEN)
这展示了一个简单但实用的 Python 响应事件和命令的 Discord 机器人。
高级 Discord API 提示和技巧
让我们用一些专业提示来完善本指南:
使用会员抓取
LISTENER
意图获取默认数据中没有的加入日期、提升状态等。利用自然语言处理和 TensorFlow 等人工智能,根据消息语义与关键字进行自动审核。
使用 cron 作业或 APScheduler 等调度程序来安排利润丰厚的广告、公告等,以获得最佳时机。
实施自定义逻辑,保护您的机器人免受滥用,例如限制个人用户的速率。
使用 Flask 或 FastAPI 构建 Web 仪表板,通过 HTTP(而不是仅通过 Discord)控制您的机器人。
使用多线程并行化计算密集型任务,例如生成分析报告。
围绕您最常使用的 API 调用创建辅助函数和抽象。
将这些更高级的功能组合在一起可以真正使您的机器人脱颖而出。
关于 Discord API 的最终想法
Discord API 提供了构建机器人和工具的绝佳机会,可以增强社区和服务器的 Discord 体验。与 Python 的多功能性相结合,开发人员拥有令人惊叹的基础,可以为 Discord 的 100 亿多用户带来创意集成和自动化。
我希望这篇 2000 多个字的深入探讨能够为您提供在您自己的项目中开始利用 Discord API 所需的先决条件、身份验证、端点知识、示例和技术。使用您的作品的社区将会感谢您!
当您继续您的旅程时,一些值得探索的最终资源:
现在 – 继续编写一些很棒的代码! Python Discord 社区迫不及待地想看看您构建的内容。