Ir al contenido

Cómo utilizar la API de Discord con Python: una guía detallada

La API de Discord ofrece una gran cantidad de oportunidades para que los desarrolladores se integren con Discord, creen bots, automaticen servidores y mejoren comunidades utilizando Python. En esta guía completa de más de 2000 palabras, profundizaremos en las capacidades de la API de Discord, los requisitos previos, la autenticación, los puntos finales, las bibliotecas, los proyectos de ejemplo y las técnicas avanzadas, proporcionándole todo lo que necesita saber para comenzar.

¿Por qué utilizar la API de Discord con Python?

Antes de profundizar en el código, vale la pena resaltar algunas de las cosas interesantes que los desarrolladores han creado utilizando la API Python Discord:

  • Mee6 – Uno de los bots de Discord más populares con más de 250 millones de usuarios. Proporciona moderación, nivelación, música, Twitch, Reddit y otras integraciones.

  • YAGPDB – Bot repleto de funciones con más de 100 comandos para moderación, registro, administración de roles, recordatorios y más. Utilizado en más de 600,000 servidores de Discord.

  • discordia.py – Destacada biblioteca contenedora de API que permitió muchos de los primeros bots de Discord en Python. Ofrece abstracciones sencillas para bots e integraciones.

  • disstream – Bot de transmisión de música con cola de reproducción, compatibilidad con YouTube/Twitch y filtros de sonido como refuerzo de graves.

  • discordbot.py – Bot que aprovecha el aprendizaje automático para la moderación automatizada de contenido tóxico y spam. Muestra integraciones de IA.

  • comentarios de discordia – Bot de comentarios de los clientes que permite a los usuarios enviar reseñas, calificaciones y comentarios a través de mensajes directos de Discord de manera conveniente.

Y estos son solo algunos ejemplos: los desarrolladores han integrado Discord de manera creativa con plataformas que van desde Reddit y GitHub hasta aplicaciones como Spotify utilizando la flexibilidad de Python.

Requisitos previos para usar la API de Discord

Antes de sumergirse en cualquier codificación, querrá cubrir estos pasos previos:

Crear una cuenta de discordia

  • Obviamente necesitas una cuenta de Discord: regístrate gratis en desacuerdo.com si no tienes uno.

Crear un servidor de discordia

  • Crea un servidor en Discord para realizar pruebas. Esto le brinda acceso completo de administrador en lugar de depender de otro servidor.

  • Para los bots públicos/de producción, más adelante querrás generar enlaces de invitación para agregarlos a otros servidores.

Habilitar el modo desarrollador

  • En Discord, vaya a Configuración de usuario > Avanzado > Modo de desarrollador para desbloquear opciones adicionales.

Instalar Python

  • Tenga Python instalado y listo para codificar. La API de Discord es compatible con Python 3.8 o superior.

  • Opcionalmente, configure un entorno virtual para aislar dependencias.

Obtención de credenciales API de Discord

Para realizar llamadas API, necesitamos generar credenciales:

Crear una aplicación de Discord

Crear una cuenta de robot

  • En la pestaña Bot de su aplicación, agregue una nueva cuenta de bot.

  • Puedes personalizar el nombre de usuario, avatar, etc.

Copiar la ficha

  • Revele y copie el token del bot en la pestaña Bot; esto se usa para autenticar solicitudes de API.

  • Mantenga esto seguro como una contraseña. Cualquiera que tenga el token puede controlar tu bot.

Obtener ID de canal

  • En su servidor de Discord, haga clic derecho en un canal y seleccione "Copiar ID" para obtener el ID del canal.

  • Usaremos ID de canal para especificar dónde enviar mensajes.

Autenticar con la API de Discord

Con los ID del token y del canal, ahora podemos autenticarnos. Hay dos enfoques:

Fichas de bot

  • Se utiliza para que las cuentas de bot se autentiquen con permisos completos.

  • Pasa la ficha en el Authorization encabezamiento:

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

Fichas de usuario

  • Se puede utilizar para cuentas de usuario pero tiene permisos limitados.

  • Generado en la pestaña OAuth2 en su aplicación de desarrollo Discord.

  • Autenticar de manera similar:

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

Los tokens de bot son más comunes para el acceso completo a la API. Los tokens de usuario permiten interactuar en nombre del usuario.

Puntos finales comunes de la API de Discord

La API de Discord expone una serie de puntos finales para diferentes entidades como canales, mensajes, usuarios, etc.

Algunos puntos finales comunes incluyen:

  • Canales/channels/{channel.id}
  • Mensajes/channels/{channel.id}/messages
  • Reacciones/channels/{channel.id}/messages/{message.id}/reactions
  • Gremios/guilds/{guild.id}
  • Miembros/guilds/{guild.id}/members

Realizamos operaciones como enviar mensajes realizando solicitudes a estos puntos finales.

Bibliotecas contenedoras de API de Discord

Si bien podemos llamar directamente a la API sin formato, las bibliotecas contenedoras de Python pueden simplificar las cosas:

  • discordia.py – La biblioteca más popular con un diseño intuitivo orientado a objetos.
  • desatar – Una bifurcación de discord.py actualizada para los últimos cambios de API.
  • hikari – Envoltura centrada en el rendimiento y centrada en la velocidad.
  • siguientecordón – Envoltorio de API asíncrono creado para Python 3.10+.

Estos proporcionan abstracciones sencillas para bots, comandos, eventos, etc., lo que ahorra tiempo de desarrollo en comparación con las solicitudes sin procesar.

Envío de mensajes

Veamos algo de código para enviar un mensaje usando el /channels/{channel.id}/messages punto final:

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)

Usamos una solicitud POST con el content carga útil del cuerpo para enviar nuestro mensaje.

Recuperar mensajes

Para recuperar mensajes, OBTENEMOS del mismo punto final y analizamos la respuesta:

response = requests.get(url, headers=headers)

json_data = response.json()

for message in json_data:
   print(message[‘content‘])

La respuesta contiene una serie de objetos de mensaje que podemos recorrer en iteración.

Edición de mensajes

Para editar un mensaje, necesitamos el message.id valor y utilizar una solicitud 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)

Reaccionar a los mensajes

Podemos reaccionar usando el /reactions/{emoji}/@me punto final:

url = f"https://discord.com/api/v9/channels/{channel_id}/messages/{message_id}/reactions/👍/@me"

response = requests.put(url, headers=headers)

Esto agrega una reacción de aprobación al mensaje del bot.

Eliminar mensajes

Finalmente, podemos eliminar con una solicitud DELETE:

url = f"https://discord.com/api/v9/channels/{channel_id}/messages/{message_id}"

response = requests.delete(url, headers=headers) 

Lo anterior debería brindarle una buena descripción general de las operaciones de mensajería comunes. Ahora analicemos cómo trabajar con la API WebSocket.

Aprovechando la API WebSocket

La API de Discord proporciona dos opciones de conectividad:

REST API – Se utiliza para la mayoría de operaciones como enviar mensajes.

API de WebSocket – Para escuchar eventos en tiempo real como mensajes.

WebSockets permite crear bots controlados por eventos que reaccionan a eventos en vivo en lugar de sondear la API REST.

Por ejemplo, aquí hay un controlador de eventos on_message simple:

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‘)

Esto responde a los mensajes inmediatamente en lugar de esperar a que se devuelva una llamada API.

Manejo de errores de API

Al llamar a la API, debemos manejar los errores con elegancia:

try:
    response = requests.post(url, headers=headers, json=data)
    response.raise_for_status()
except requests.exceptions.HTTPError as err:
    print(err)
    print(response.text)

Algunos errores comunes incluyen:

  • 50001 – Falta acceso al recurso
  • 50035 – Cuerpo de solicitud no válido
  • 429 – Tarifa limitada

Consulte las documentos para obtener detalles sobre los errores.

Construyendo un bot de Discord en Python

Veamos un bot de muestra para mostrar las capacidades principales:

Características del bot:

  • Enviar saludo al inicio
  • Responder a mensajes que contienen "ayuda"
  • Eliminar mensajes con palabras prohibidas
  • Agregar respuestas emoji de reacción
  • Responder con imágenes/emojis
# 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)

Esto muestra un bot de Discord simple pero funcional en Python que responde a eventos y comandos.

Consejos y trucos avanzados de la API de Discord

Completemos esta guía con algunos consejos profesionales:

  • Utilice el raspado de miembros con LISTENER intenta obtener fechas de unión, mejorar el estado, etc. que no están en los datos predeterminados.

  • Aproveche el procesamiento del lenguaje natural y la inteligencia artificial como TensorFlow para una moderación automatizada basada en la semántica de los mensajes frente a las palabras clave.

  • Programe anuncios lucrativos, anuncios, etc. utilizando trabajos cron o programadores como APScheduler para lograr una sincronización óptima.

  • Implemente una lógica personalizada que proteja su bot de abusos como la limitación de la tasa de usuarios individuales.

  • Cree un panel web con Flask o FastAPI para controlar su bot a través de HTTP en lugar de solo Discord.

  • Utilice subprocesos múltiples para paralelizar tareas computacionales intensivas, como generar informes analíticos.

  • Cree funciones auxiliares y abstracciones en torno a las llamadas API que utiliza con más frecuencia.

Combinar algunas de estas capacidades más avanzadas realmente puede diferenciar a su bot de la multitud.

Reflexiones finales sobre la API de Discord

La API de Discord brinda oportunidades increíbles para crear bots y herramientas que mejoran la experiencia de Discord para comunidades y servidores. Junto con la versatilidad de Python, los desarrolladores tienen una base increíble para llevar integraciones creativas y automatización a los más de 100 millones de usuarios de Discord.

Espero que este análisis profundo de más de 2000 palabras le brinde los requisitos previos, la autenticación, el conocimiento de los terminales, los ejemplos y las técnicas necesarios para comenzar a aprovechar la API de Discord en sus propios proyectos. ¡Las comunidades que utilizan tus creaciones te lo agradecerán!

Algunos recursos finales que vale la pena explorar a medida que continúa su viaje:

Ahora, ¡adelante y codifica algo increíble! La comunidad de Python Discord está ansiosa por ver lo que construyes.

Únase a la conversación

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *