Ad­mi­ni­s­trar tu propio servidor de Discord te puede suponer mucho trabajo, por eso son tan populares los bots que se encargan de las funciones ad­mi­ni­s­tra­ti­vas. Con la librería discord.py y un co­no­ci­mie­n­to 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 pro­gra­ma­ción del bot de Discord, debes crearlo. Para ello, envía tu solicitud a Discord y sigue los pasos ne­ce­sa­rios. El código de pro­gra­ma­ción que necesitas para tu bot de Discord va a depender de las tareas que quieras au­to­ma­ti­zar. 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 bi­blio­te­ca 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 in­s­ta­la­ción se hace mediante pip. En Windows, el comando que debes in­tro­du­cir en la terminal es el siguiente:

py -3 -m pip install -U discord.py
python

Paso 2. Crear un archivo Python

Crea un nuevo archivo Python para programar tu bot. En él, puedes utilizar di­fe­re­n­tes editores de código o un entorno de de­sa­rro­llo integrado (IDE) como Pycharm.

Paso 3. Es­ta­ble­cer la conexión con Discord

Importa la bi­blio­te­ca de Discord a tu archivo Python y es­pe­ci­fi­ca el token que has recibido al registrar tu bot en la página para de­sa­rro­lla­do­res de Discord. Para ello, sustituye el marcador de posición por el token de tu bot:

import discord
TOKEN = token_marcador_de_posición
python

Necesitas la bi­blio­te­ca para in­ter­ac­tuar con la API de Discord. También necesitas una instancia del objeto cliente para co­ne­c­tar­te a Discord. La instancia se crea con el siguiente código:

client = discord.Client()
python

Paso 4. Comprobar si la conexión se ha es­ta­ble­ci­do co­rre­c­ta­me­n­te

A co­n­ti­nua­ción, debes incluir un método asíncrono en tu archivo Python que compruebe si tu bot se ha conectado co­rre­c­ta­me­n­te 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 co­n­tro­la­dor 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})')
python
Nota

A menudo se utilizan funciones así­n­cro­nas para programar bots de Discord. Esto se traduce en que la función se ejecuta en un hilo dedicado, el cual está des­aco­pla­do 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 de­te­ni­da­me­n­te. Si el mensaje comienza con la cadena !add_role, el bot lo in­te­r­pre­ta como una orden. Es decir, los usuarios del servidor deben comenzar las so­li­ci­tu­des que dirijan al bot de Discord con la cadena !add_role. Ló­gi­ca­me­n­te, se puede utilizar cualquier cadena como comando. Sin embargo, es pre­fe­ri­ble que la cadena utilizada sea una cadena que no se emplee en el lenguaje natural.

A partir de un mensaje que el bot in­te­r­pre­ta como un comando correcto, se averigua el nombre del rol so­li­ci­ta­do con la función split() de Python. A co­n­ti­nua­ción, se busca el rol co­rre­s­po­n­die­n­te en el servidor. Para ello, puedes utilizar el objeto message, que contiene in­fo­r­ma­ció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 co­rre­s­po­n­die­n­te con la función add_roles de la bi­blio­te­ca dicord.py, que también está definida en el objeto message.

Nota

Tu bot de Discord puede realizar cualquier acción. Es decir, puedes crear bots que realicen tareas similares al popular bot de chat y mo­de­ra­ción conocido como MEE6, o escribir tu propio bot de música en Discord. Hemos elegido un ejemplo sencillo que resulta fácil de co­m­pre­n­der para los menos versados en la materia.

Ir al menú principal