Cómo crear paso a paso tu propio bot de Discord con Python
Administrar tu propio servidor de Discord te puede suponer mucho trabajo, por eso son tan populares los bots que se encargan de las funciones administrativas. Con la librería discord.py y un conocimiento básico de Python, puedes crear un bot con relativa facilidad.
Crea tu propio bot de Discord con Python paso a paso
Antes de empezar con la programación del bot de Discord, debes crearlo. Para ello, envía tu solicitud a Discord y sigue los pasos necesarios. El código de programación que necesitas para tu bot de Discord va a depender de las tareas que quieras automatizar. El bot que te mostramos en este tutorial sirve para asignar roles y permisos dentro de un servidor de Discord.
Paso 1. Instalar discord.py
Ya que la biblioteca discord.py de Python se utiliza para crear el bot, será lo primero que necesitas instalar en tu sistema. Como es habitual en Python, la instalación se hace mediante pip. En Windows, el comando que debes introducir en la terminal es el siguiente:
py -3 -m pip install -U discord.py
pythonPaso 2. Crear un archivo Python
Crea un nuevo archivo Python para programar tu bot. En él, puedes utilizar diferentes editores de código o un entorno de desarrollo integrado (IDE) como Pycharm.
Paso 3. Establecer la conexión con Discord
Importa la biblioteca de Discord a tu archivo Python y especifica el token que has recibido al registrar tu bot en la página para desarrolladores de Discord. Para ello, sustituye el marcador de posición por el token de tu bot:
import discord
TOKEN = token_marcador_de_posición
pythonNecesitas la biblioteca para interactuar con la API de Discord. También necesitas una instancia del objeto cliente para conectarte a Discord. La instancia se crea con el siguiente código:
client = discord.Client()
pythonPaso 4. Comprobar si la conexión se ha establecido correctamente
A continuación, debes incluir un método asíncrono en tu archivo Python que compruebe si tu bot se ha conectado correctamente con el servidor de Discord. Para ello, debes responder al evento on_ready
definido en la API discord.py. Utiliza el decorador (o patrón de diseño) de Python @client.event
para que tu función actúe como un controlador de eventos.
@client.event
async def on_ready():
print(f'{client.user} está conectado a los siguiente servidores:\n')
for server in client.guilds:
print(f'{server.name}(id: {server.id})')
pythonA menudo se utilizan funciones asíncronas para programar bots de Discord. Esto se traduce en que la función se ejecuta en un hilo dedicado, el cual está desacoplado del hilo principal. De este modo, no se bloquea el hilo principal y las tareas del bot se pueden ejecutar de forma paralela.
Paso 5. Añade funciones a tu bot
La API discord.py define un evento on_message
que te ayuda a ejecutar las funciones de tu bot. El evento se activa cada vez que tu bot de Discord recibe un mensaje. El método que maneja el evento debe comprobar primero de qué remitente es el mensaje y luego ejecutar la función deseada, en nuestro caso, añade roles.
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('!add_role'):
# Obtener el nombre del rol
role_name = message.content.split(' ')[1]
# Encontrar el rol de Discord correspondiente
role = discord.utils.get(message.guild.roles, name=role_name)
# Comprobar si el rol existe
if role is None:
await message.channel.send(f'El rol "{role_name}" no existe)
return
# Asignar el rol
await message.author.add_roles(role)
await message.channel.send(f'El rol "{role_name}" se ha asignado a {message.author}')
En primer lugar, la función comprueba si el mensaje que se ha recibido procede del propio bot de Discord. Si es el caso, se sale de la función con la sentencia return
.
Si no es el caso, el contenido del mensaje se examina más detenidamente. Si el mensaje comienza con la cadena !add_role
, el bot lo interpreta como una orden. Es decir, los usuarios del servidor deben comenzar las solicitudes que dirijan al bot de Discord con la cadena !add_role
. Lógicamente, se puede utilizar cualquier cadena como comando. Sin embargo, es preferible que la cadena utilizada sea una cadena que no se emplee en el lenguaje natural.
A partir de un mensaje que el bot interpreta como un comando correcto, se averigua el nombre del rol solicitado con la función split()
de Python. A continuación, se busca el rol correspondiente en el servidor. Para ello, puedes utilizar el objeto message
, que contiene información variada sobre tu servidor bajo el ítem message.guild
.
Si el rol no existe y por lo tanto tiene el valor “None”, se emite un mensaje de error y se sale de la función con la sentencia return
. En caso contrario, se asigna el rol correspondiente con la función add_roles
de la biblioteca dicord.py, que también está definida en el objeto message
.
Tu bot de Discord puede realizar cualquier acción. Es decir, puedes crear bots que realicen tareas similares al popular bot de chat y moderación conocido como MEE6, o escribir tu propio bot de música en Discord. Hemos elegido un ejemplo sencillo que resulta fácil de comprender para los menos versados en la materia.