
Índice
- ¿Qué es y Por qué crear un bot en Discord?
- Pasos para crear un Bot en Discord
- Cómo crear un bot de Discord en el portal de desarrolladores
- Cuenta de desarrollador de Discord
- Creando el Bot en el Developer Portal
- Crear Servidor de Discord
- Añadir el Bot a nuestro Servidor
- Cómo hacer un Bot de Discord en Python
- Interactuando con la API de Discord
- Respondiendo a Mensajes de Usuarios
- Conectando un Bot
- Usar Comandos de Bot
- Conclusión
Discord se está convirtiendo en la herramienta más usada de comunicación.
Para mi es mucho mejor que Slack, Telegram y por supuesto mi odiado Whatsapp
Todavía mucha gente piensa que Discord es una herramienta para Gamers pero yo creo que funciona genial en entornos empresariales.
De hecho creo que Discord se va a comer a Slack y Telegram.
En otra ocasión hablaré de todo lo que puedes hacer con Discord pero en este artículo os voy a contar como hacer un Bot en Discord.
Hay herramientas NoCode para hacerlo como Boto pero en este tutorial lo haremos con Python.
Lo haremos en Python por dos motivos:
- Estoy haciendo un boto real para un canal de Discord que ya os presentaré y no encuentro ninguna herramienta Nocode que haga justo lo que quiero y además que el nombre del bot sea el que yo quiera y no aparezca el nombre de la herramienta con la que lo hago
- Porque quiero aprender Python 😉
El tutorial original en el que me he basado está en inglés y es este:
https://realpython.com/how-to-make-a-discord-bot-python/
Los que prefieran el tutorial en Español que sigan leyendo
Aviso
Estoy aprendiendo Python, en estos momentos no soy ningún experto 😉
¿Qué es y Por qué crear un bot en Discord?
Un bot es una herramienta que nos permite añadir funcionalidad a nuestro canal de discord.
Puedes consultarle cosas tales como la cotización de criptomonedas, qué tiempo hace, gamificar las interacciones y un montón de cosas más.
Podemos hacer que el bot esté escuchando y el disparador sea alguna palabra que escriban los usuarios o podemos crear comandos personalizados.
Las posibilidades son infinitas.
Pasos para crear un Bot en Discord
- Crear el usuario bot en Discord y registrarlo en tu servidor (los llaman gremios)
- Crear el bot propiamente dicho
Cómo crear un bot de Discord en el portal de desarrolladores
Antes de lanzarnos a escribir el código de Python tienes que realizar los siguientes pasos previos dentro de Discord:
- Crear una cuenta
- Crear una aplicación
- Crear un bot
- Crear un servidor de Discord (los llamaremos Gremios para ser coherentes con el post original y la documentación de Discord)
Cuenta de desarrollador de Discord
Evidentemente necesitamos una cuenta de Discord y acceder al portal de desarrolladores:
http://discordapp.com/developers/applications

Si ya tienes cuenta de Discord te logueas y si no te la creas.

Una vez que haces click en «New Application» te pedirá un nombre para el bot, se lo das y haces click en «Create»:

Y ya está, ya tenemos nuestra primera aplicación de Discord creada:

Discord tiene una API muy potente, podemos crear aplicaciones de todo tipo, no solo Bots.
Como en nuestro caso es un bot lo que estamos haciendo nos vamos a la pestaña Bot
Creando el Bot en el Developer Portal
Como hemos comentado anteriormente un bot está escuchando en nuestro servidor de Discord y puede reaccionar automáticamente a comandos y eventos.
Por este motivo tenemos que crear un usuario bot.
Para ello hacemos click en Bot y dentro de la siguiente pantalla hacemos click en «Add Bot»:

Una vez añadido podrás ver el bot de nuestra aplicación:

El Bot heredará el nombre de la aplicación, desde aquí podemos cambiar el nombre del bot a algo más conveniente como por ejemplo MisIngresosPasivosBot
Ya tenemos el bot listo pero para verlo en acción tenemos que crear un servidor de Discord para que pueda interactuar con otros usuarios.
Si estás interesado por este tutorial entiendo que ya tienes un Servidor de Discord pero si no lo tienes es el momento de crearlo.
Crear Servidor de Discord
Para crearlo es tan fácil como hacer click en el + que aparece abajo a la derecha y elegir una plantilla o crear una por ti mismo:

Añadir el Bot a nuestro Servidor
El boto no puede aceptar invitaciones como hacen las personas reales por lo que tenemos que añadirlo a través del protocolo OAuth2.
Si te das cuenta, en la cuenta de desarrolladores, dentro de nuestra aplicación teníamos esa opción:

Desde la opción OAuth2 podemos crear una URL para vincular el Bot con el Servidor de Discord que acabamos de crear.
Pero antes de hacerlo tenemos que darle permisos a nuestro bot para que más adelante no nos de fallos.
Lo primero que tenemos que hacer en la opción «Default Authorization Link» es seleccionar la opción In-app Authorization:

Al hacerlo nos aparecerá el alcance que le queremos dar.
Si vamos a crear comandos de texto normal del tipo: !rank o cualquier otro texto no valdría con seleccionar Bot en el Scope(alcance)
Este tipo de comandos tienen un problema, si no lo conoces no lo puedes usar.
Por eso me gustan mucho los comandos que se autorrellenan al añadir la barra inclinada (\), es inglés slash.
Aquí un ejemplo:

Para que funcionen los comandos tipo Slash tenemos que seleccionar también applications.commands.
Y tenemos que darle permisos de Administrador al Bot:

Una vez que le hemos dado los permisos necesarios al bot dentro de OAuth2 –> General tenemos que ir a OAuth2 –> URL Generator y crear el Link para añadir el Bot a nuestro Canal de Discor.
Importante
No te olvides de marcar en URL Generator los permisos que necesitamos, es decir, bot y applications.commands.
Y dentro de bot, Administrator

Ahora copia la URL que se ha generado, cópiala en un navegador y te redirigirá a una pantalla para que añadas el bot al servidor que quieras:

Si todo ha ido bien te aparecerá una pantalla en la que te indica que el bot ha sido autorizado:

y si entras en el servidor verás que aparece el bot:

Resumen
Hasta ahora lo que hemos hecho ha sido:
– Una aplicación que el bot usará para autenticarse con la API de Discord
– Un usuario bot que usaremos para interacturar con otros usuarios y eventos dentro del servidor de Discord
Ahora viene lo divertido, hacer que nuestro Bot haga cosas gracias a Python.
Quiero recordar de nuevo que no soy Experto en Python y que todo lo que he hecho lo he visto en este tutorial en Inglés.
Cómo hacer un Bot de Discord en Python
Voy a dar por supuesto que tienes instalado Python 3 y PIP instalado.
Para poder interactuar con Discord vamos a instalar discord.py, para ello vamos a instalarlo con pip:
pip install -U discord.py
Una vez que lo tenemos instalado vamos a crear una conexión a Discord.
El primer paso para implementar tu usuario bot es crear una conexión con Discord. Con discord.py, lo haces creando una instancia de Cliente.
Por lo que creamos un fichero llamado bot.py con el siguiente contenido:
# bot.py
import os
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
client = discord.Client()
@client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
client.run(TOKEN)
Un cliente es un objeto que representa una conexión a Discord. Un Cliente maneja eventos, rastrea el estado, y generalmente interactúa con las APIs de Discord.
Aquí, has creado un Cliente e implementado su controlador de eventos on_ready(), que maneja el evento cuando el Cliente ha establecido una conexión con Discord y ha terminado de preparar los datos que Discord ha enviado, como el estado de inicio de sesión, los datos del gremio y del canal, y más.
En otras palabras, se llamará a on_ready() (y se imprimirá su mensaje) una vez que el cliente esté listo para realizar más acciones. Aprenderás más sobre los controladores de eventos más adelante en este artículo.
Cuando trabajes con información sensible como tu token de Discord, es una buena práctica que tu programa lo lea desde una variable de entorno. El uso de variables de entorno te ayuda a:
- Evitar poner información sensible o contraseñas en el control de versiones
- Usar diferentes variables para los entornos de desarrollo y producción sin cambiar tu código
Aunque podría exportar DISCORD_TOKEN={tu-token-bot}, una solución más sencilla es guardar un archivo .env en todas las máquinas que vayan a ejecutar este código.
Esto no sólo es más fácil, ya que no tendrás que exportar tu token cada vez que limpies tu terminal, sino que también te protege de almacenar tus claves en el historial de tu terminal.
Crea un archivo llamado .env en el mismo directorio que bot.py:
# .env
DISCORD_TOKEN={tu-token-bot}
Tienes que reemplazar {tu-token-bot}, incluidas las llaves, por el token que te otorga Discord en el página de desarrolladores, dentro de las opciones del bot:

Si miras el código de bot.py, verás que importamos una biblioteca llamada dotenv. Esta biblioteca es útil para trabajar con archivos .env.
Load_dotenv() carga las variables de entorno de un archivo .env en las variables de entorno de tu terminal para que puedas usarlas en tu código.
Instalaremos dotenv con pip:
pip install -U python-dotenv
Finalmente, client.run() ejecuta tu Cliente usando el token de tu bot.
Ahora que has configurado tanto bot.py como .env, puedes ejecutar tu código:
python bot.py
Si todo te ha salido bien te aparecerá en la propia terminal que el bot se ha conectado:

Y en el servidor de Discord verás al bot en linea:

Interactuando con la API de Discord
Usando un Cliente, tienes acceso a una amplia gama de APIs de Discord.
Por ejemplo, digamos que quieres escribir en la consola el nombre y el identificador del servidor (guild) en el que has registrado a tu usuario bot.
Primero, necesitarás añadir una nueva variable de entorno:
# .env DISCORD_TOKEN={your-bot-token} DISCORD_GUILD={your-guild-name}OJO
Recuerda que en el código anterior tienes que cambiar las siguientes frases por tus valores reales:
{your-bot-token}
{your-guild-name}
Recuerda que Discord llama a on_ready(), que ya usamos anteriormente, una vez que el Cliente ha hecho la conexión y preparado los datos. Así que puedes confiar en que los datos del servidor estén disponibles dentro de on_ready():
# bot.py
import os
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')
client = discord.Client()
@client.event
async def on_ready():
for guild in client.guilds:
if guild.name == GUILD:
break
print(
f'{client.user} is connected to the following guild:\n'
f'{guild.name}(id: {guild.id})'
)
client.run(TOKEN)
En este caso, hemos recorrido los datos del gremio(servidor) que Discord ha enviado al cliente, es decir, client.guilds. Luego, encontraste el gremio con el nombre correspondiente e imprimiste una cadena formateada en stdout.
Si ejecutamos el programa, veremos que pasa:
python bot.py

¡Genial! Puedes ver el nombre de tu bot, el nombre de tu servidor y el número de identificación del servidor.
Respondiendo a Mensajes de Usuarios
Vamos a hacer que nuestro bot sea capaz de responder a mensajes de los usuarios de nuestro servidor gracias al evento on_message().
on_message() ocurre cuando se publica un mensaje en un canal al que tu bot tiene acceso.
# bot.py
import os
import random
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
client = discord.Client()
@client.event
async def on_ready():
print(f'{client.user.name} has connected to Discord!')
@client.event
async def on_member_join(member):
await member.create_dm()
await member.dm_channel.send(
f'Hi {member.name}, welcome to my Discord server!'
)
@client.event
async def on_message(message):
if message.author == client.user:
return
_99_frases_aleatorias = [
'Espero que estés disfrutando al 💯.',
'Hola!!!! 😉',
'Amigo, aquí estamos para disfrutar'
]
if message.content == '99!':
response = random.choice(_99_frases_aleatorias )
await message.channel.send(response)
client.run(TOKEN)
Si ejecutamos el programa y lo probamos en nuestro canal de discord tendría que suceder algo tal que así :)
El comando que hemos usado es 99!

Conectando un Bot
Un Bot es una subclase de Cliente que añade un poco de funcionalidad extra que es útil cuando estás creando usuarios bot. Por ejemplo, un Bot puede manejar eventos y comandos, invocar comprobaciones de validación, y más.
Antes de entrar en las características específicas de Bot, convierte bot.py para usar un Bot en lugar de un Cliente:
# bot.py
import os
import random
from dotenv import load_dotenv
# 1
from discord.ext import commands
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
# 2
bot = commands.Bot(command_prefix='!')
@bot.event
async def on_ready():
print(f'{bot.user.name} has connected to Discord!')
bot.run(TOKEN)
Como puedes ver, el Bot puede manejar eventos de la misma manera que el Cliente. Sin embargo, fíjate en las diferencias entre Client y Bot:
- Bot se importa del módulo discord.ext.commands.
- El inicializador de Bot requiere un command_prefix, del que aprenderás más en la siguiente sección.
La biblioteca de extensiones, ext, ofrece varios componentes interesantes para ayudarte a crear un Bot de Discord. Uno de estos componentes son los Commandos.
Usar Comandos de Bot
En términos generales, un comando es una orden que un usuario da a un bot para que haga algo. Las órdenes se diferencian de los eventos porque:
- Se definen de forma arbitraria
- Son invocados directamente por el usuario
- Flexibles, en cuanto a su interfaz
En términos técnicos, un comando es un objeto que envuelve una función que es invocada por un comando de texto en Discord. El comando de texto debe comenzar con el comando_prefijo, definido por el objeto Bot.
Por ejemplo, en el código anterior el disparador era 99!, es decir, no tenía un prefijo.
Si hacemos el ejemplo anterior pero con un comando, el código nos quedaría así:
# bot.py
import os
import random
from discord.ext import commands
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
bot = commands.Bot(command_prefix='!')
@bot.command(name='99')
async def nine_nine(ctx):
_99_frases_aleatorias = [
'Espero que estés disfrutando al 💯.',
'Hola!!!! 😉',
'Amigo, aquí estamos para disfrutar'
]
response = random.choice(_99_frases_aleatorias)
await ctx.send(response)
bot.run(TOKEN)
Hay varias características importantes que hay que entender sobre el uso de Command:
- En lugar de utilizar bot.event como antes, se utiliza bot.command(), pasando el comando de invocación (nombre) como argumento.
- La función ahora sólo será llamada cuando !99 sea mencionado en el chat. Esto es diferente al evento on_message(), que se ejecutaba cada vez que un usuario enviaba un mensaje, independientemente del contenido.
- El comando debe ir precedido del signo de exclamación (!) porque ese es el comando_prefijo que has definido en el inicializador de tu Bot.
- Cualquier función de comando (técnicamente llamada callback) debe aceptar al menos un parámetro, llamado ctx, que es el Contexto que rodea al comando invocado.
Un Contexto contiene datos como el canal y el gremio(servidor) desde el que el usuario llamó al Comando.
Ahora puedes probar el programa:
python bot.py
Desde el punto de vista del usuario, la diferencia práctica es que el prefijo ayuda a formalizar el comando, en lugar de simplemente reaccionar a un evento on_message() particular.
Esto también conlleva otras grandes ventajas. Por ejemplo, puedes invocar el comando !help para ver todos los comandos que maneja tu Bot:

Si quieres añadir una descripción a tu comando para que el mensaje de ayuda sea más informativo, simplemente pasa una descripción de ayuda al decorador .command():
# bot.py
import os
import random
from discord.ext import commands
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
bot = commands.Bot(command_prefix='!')
@bot.command(name='99', help='Las 99 frases que te alegrarán el día')
async def nine_nine(ctx):
_99_frases_aleatorias = [
'Espero que estés disfrutando al 💯.',
'Hola!!!! 😉',
'Amigo, aquí estamos para disfrutar'
]
response = random.choice(_99_frases_aleatorias)
await ctx.send(response)
bot.run(TOKEN)
Y ahora si ponemos el comando !help nos saldrá:

Ten en cuenta que toda esta funcionalidad existe sólo para la subclase Bot, no para la superclase Cliente.
El artículo en inglés es mucho más completo, te recomiendo que le eches un ojo si quieres profundizar
Conclusión
Si has llegado hasta aquí, ENHORABUENA!!! Eso es que has creado tu primer bot de Discord con python 😉
Los que me conocéis sabéis que sois un fiel defensor de las herramientas NoCode, de hecho, haré tutoriales para hacer un bot con herramientas NoCode.
Pero en esta ocasión quería probar Python ya que es algo que me apetece aprender.
No tenemos que perder de vista el objetivo que buscas cuando haces algo.
En esta ocasión necesitaba un Bot y además quería aprender un poco de Python.
Espero que este artículo sea sólo el principio de tus bots en Discord.
Deja una respuesta