跳到内容

如何通过 Python 使用 Discord API:深入指南

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 社区迫不及待地想看看您构建的内容。

加入谈话

您的电邮地址不会被公开。 必填带 *