перейти к содержанию

Как использовать Discord API с Python: подробное руководство

API Discord предоставляет разработчикам множество возможностей для интеграции с Discord, создания ботов, автоматизации серверов и улучшения сообществ с помощью Python. В этом подробном руководстве, состоящем из более чем 2000 слов, мы углубимся в возможности Discord API, предварительные условия, аутентификацию, конечные точки, библиотеки, примеры проектов и передовые методы, предоставив вам все, что вам нужно знать, чтобы начать работу.

Зачем использовать Discord API с Python?

Прежде чем мы углубимся в код, стоит выделить некоторые интересные вещи, которые разработчики создали с помощью Python Discord API:

  • Mee6 – Один из самых популярных ботов Discord с более чем 250 миллионами пользователей. Обеспечивает модерацию, прокачку, музыку, Twitch, Reddit и другие интеграции.

  • ЯГПДБ – Функциональный бот с более чем 100 командами для модерации, ведения журналов, управления ролями, напоминаний и многого другого. Используется на более чем 600,000 XNUMX серверах Discord.

  • дискорд.py – Известная библиотека-оболочка API, которая позволила использовать многие из первых ботов Discord на Python. Предлагает простые абстракции для ботов и интеграций.

  • DisStream – Бот для потоковой передачи музыки с очередью плейлистов, поддержкой YouTube/Twitch и звуковыми фильтрами, такими как усиление басов.

  • discordbot.py – Бот, использующий машинное обучение для автоматической модерации токсичного контента и спама. Демонстрирует интеграцию искусственного интеллекта.

  • разногласия-обратная связь – Бот обратной связи с клиентами, позволяющий пользователям удобно оставлять обзоры, оценки и отзывы через личные сообщения Discord.

И это лишь несколько примеров: разработчики творчески интегрировали Discord с платформами, начиная от Reddit и GitHub и заканчивая такими приложениями, как Spotify, используя гибкость Python.

Предварительные условия для использования Discord API

Прежде чем погрузиться в кодирование, вам необходимо выполнить следующие необходимые шаги:

Создать учетную запись Discord

  • Очевидно, вам понадобится учетная запись Discord – зарегистрируйтесь бесплатно на сайте disagree.com если у вас его нет.

Создать дискорд-сервер

  • Создайте сервер в Discord для тестирования. Это дает вам полный доступ администратора вместо того, чтобы полагаться на другой сервер.

  • Для общедоступных/производственных ботов вам позже понадобится создать ссылки для приглашения для добавления на другие серверы.

Включить режим разработчика

  • В Discord перейдите в «Настройки пользователя» > «Дополнительно» > «Режим разработчика», чтобы разблокировать дополнительные параметры.

Установить Python

  • Установите Python и будьте готовы к написанию кода. Discord API поддерживает Python 3.8 или выше.

  • При необходимости настройте виртуальную среду для изоляции зависимостей.

Получение учетных данных Discord API

Чтобы совершать вызовы API, нам необходимо сгенерировать учетные данные:

Создать приложение Discord

Создать учетную запись бота

  • На вкладке «Бот» вашего приложения добавьте новую учетную запись бота.

  • Вы можете настроить имя пользователя, аватар и т. д.

Скопируйте токен

  • Откройте и скопируйте токен бота на вкладке «Бот» — он используется для аутентификации запросов API.

  • Храните это как пароль. Любой, у кого есть токен, может управлять вашим ботом.

Получить идентификаторы каналов

  • На сервере Discord щелкните правой кнопкой мыши канал и выберите «Копировать идентификатор», чтобы получить идентификатор канала.

  • Мы будем использовать идентификаторы каналов, чтобы указать, куда отправлять сообщения.

Аутентификация с помощью Discord API

Теперь, имея идентификаторы токена и канала, мы можем пройти аутентификацию. Есть два подхода:

Токены ботов

  • Используется для учетных записей ботов для аутентификации с полными разрешениями.

  • Передайте токен в Authorization заголовок:

headers = {
    ‘Authorization‘: ‘Bot ‘ + bot_token
}

Пользовательские токены

  • Может использоваться для учетных записей пользователей, но имеет ограниченные разрешения.

  • Создается на вкладке OAuth2 в вашем приложении для разработчиков Discord.

  • Аутентифицируем аналогично:

headers = {
    ‘Authorization‘: ‘Bearer ‘ + user_token
} 

Токены ботов чаще используются для полного доступа к API. Токены пользователя позволяют взаимодействовать от имени пользователя.

Общие конечные точки API Discord

API Discord предоставляет ряд конечных точек для различных объектов, таких как каналы, сообщения, пользователи и т. д.

Некоторые общие конечные точки включают в себя:

  • каналы/channels/{channel.id}
  • Сообщения/channels/{channel.id}/messages
  • Реакции/channels/{channel.id}/messages/{message.id}/reactions
  • гильдий/guilds/{guild.id}
  • Участники/guilds/{guild.id}/members

Мы выполняем такие операции, как отправка сообщений, отправляя запросы к этим конечным точкам.

Библиотеки оболочек API Discord

Хотя мы можем напрямую вызывать необработанный API, библиотеки-оболочки Python могут упростить задачу:

  • дискорд.py – Самая популярная библиотека с интуитивно понятным объектно-ориентированным дизайном.
  • избавиться от змеи – Форк discord.py обновлен с учетом последних изменений API.
  • Хикари – Обертка, ориентированная на производительность и скорость.
  • следующий шнур – Асинхронная оболочка API, созданная для Python 3.10+.

Они предоставляют простые абстракции для ботов, команд, событий и т. д., экономя время разработки по сравнению с необработанными запросами.

Отправка сообщений

Давайте посмотрим код для отправки сообщения с использованием /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 полезная нагрузка тела для отправки нашего сообщения.

Получение сообщений

Чтобы получить сообщения, мы GET из той же конечной точки и анализируем ответ:

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) 

Вышеизложенное должно дать вам хороший обзор распространенных операций обмена сообщениями. Теперь давайте обсудим работу с API WebSocket.

Использование API WebSocket

Discord API предоставляет два варианта подключения:

REST API – Используется для большинства операций, таких как отправка сообщений.

API веб-сокетов – Для прослушивания событий в реальном времени, таких как сообщения.

WebSockets позволяют создавать ботов, управляемых событиями, которые реагируют на текущие события, а не опрашивают 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 – Скорость ограничена

Смотрите пост в Документы подробнее об ошибках.

Создание бота Discord на Python

Давайте рассмотрим пример бота, чтобы продемонстрировать основные возможности:

Возможности бота:

  • Отправить приветствие при запуске
  • Отвечайте на сообщения, содержащие слово «помощь»
  • Удалить сообщения с запрещенными словами
  • Добавьте ответы в виде смайликов
  • Ответьте изображениями/смайликами
# 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)

Здесь демонстрируется простой, но функциональный бот Discord на Python, реагирующий на события и команды.

Советы и рекомендации по расширенному API Discord

Давайте завершим это руководство некоторыми профессиональными советами:

  • Используйте очистку участников с помощью LISTENER намерения получить даты присоединения, повышение статуса и т. д., которых нет в данных по умолчанию.

  • Используйте обработку естественного языка и искусственный интеллект, такой как TensorFlow, для автоматической модерации на основе семантики сообщений и ключевых слов.

  • Планируйте прибыльную рекламу, объявления и т. д., используя задания cron или планировщики, такие как APScheduler, для оптимального выбора времени.

  • Внедрите собственную логику, защищающую вашего бота от злоупотреблений, например ограничение скорости отдельных пользователей.

  • Создайте веб-панель с помощью Flask или FastAPI для управления вашим ботом через HTTP, а не просто через Discord.

  • Используйте многопоточность для распараллеливания ресурсоемких задач, таких как создание аналитических отчетов.

  • Создавайте вспомогательные функции и абстракции вокруг вызовов API, которые вы используете чаще всего.

Объединение некоторых из этих более продвинутых возможностей действительно может выделить вашего бота из толпы.

Заключительные мысли об API Discord

API Discord предоставляет потрясающие возможности для создания ботов и инструментов, которые расширяют возможности Discord для сообществ и серверов. В сочетании с универсальностью Python разработчики получают потрясающую основу для творческой интеграции и автоматизации для более чем 100 миллионов пользователей Discord.

Я надеюсь, что это глубокое погружение объемом более 2000 слов предоставит вам предварительные условия, аутентификацию, знания конечных точек, примеры и методы, необходимые для начала использования Discord API в ваших собственных проектах. Сообщества, использующие ваши творения, будут вам благодарны!

Некоторые заключительные ресурсы, которые стоит изучить по мере продолжения вашего путешествия:

А теперь — идите и напишите что-нибудь потрясающее! Сообществу Python Discord не терпится увидеть, что вы создадите.

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *