DEV Community

Alexander G
Alexander G

Posted on • Edited on

Como crear un bot en discord.py

Hola que tal? hoy les traigo este post de como crear un bot de discord usando discord.py.

Cabe destacar que es muy pero muy recomendable saber de python desde antes(python es un lenguaje de programación y usaremos la biblioteca de python discord.py para programar nuestro bot.

Requisitos

  • Python o Python3

  • Una cuenta en Discord

  • Tener permisos administrativos en un server

Parte 1: discord/developers

Lo mejor sera que primero crearnos nuestro bot e invitarlo a nuestro servers que usaremos para probarlo, esto lo haremos siguiendo este link Discord para desarrolladores.

Al entrar en la pagina les pedirá autenticarse con su cuenta de discord, luego de eso deberá aparecer algo así y le dan a "New aplication"

Alt Text

Al darle a ese boton("New aplication") ponen el nombre de su preferencia, ese es el nombre de su aplicación mas no de su bot luego les aclaro eso, les deberá aparecer algo asi:

image

Luego de darle a "Create" les deberá mostrar el menú de nuestra aplicación, algo así:

image

La pagina inicial no es muy interesante por ahora, lo que realmente estamos buscando es el Token de nuestro bot, el token es como la "llave" o "contraseña" de nuestro bot, eso lo haremos para cargar los comandos y demás, ese "token" lo encontramos en la parte de "bot" en el menú de la izquierda, luego de darle clic veremos algo así:

image

Luego le damos clic a el botón que dice "add bot" y saldara un mensaje y le daremos a "Yes, do it"! y saldrá algo así:
image

Ahí donde sale el icono de discord, esa es la foto de perfil o avatar de nuestro bot, ahí podemos subir una y ponerle otro perfil a nuestro gusto, también esta una parte de token, 3 textos hablan de token, el primero "Click to Reveal Token", el segundo "Copy" y el ultimo "Regenerate", expliquemos esto brevemente, el primero es para ver el token, el segundo para copiarlo al portapapeles y el tercero es para invalidar el token actual y crear otro.

Importante En ultimas actualizaciones la parte del link de invitacion es ingresando a Oauth2 -> URL GENERATOR

Copiamos el token y seguimos a ir a "OAutho2", en OAutho2 vamos al final de la pagina y seleccionamos "bot" y veremos algo así:

image

Luego seguimos bajamos mas y veremos algo así, que son los permisos del bot, yo siempre selecciono "Administrator" para los permisos asi no tengo que seleccionar todos

image

Y si nos fijamos veremos un link en el medio de los dos cuadros de selección, ese link es el famoso "link de invitación", copiamos el link y lo abrimos en una pestaña seleccionamos el server de nuestra preferencia, y veríamos algo así:

image

Luego autorizamos los permisos de "administrador" o los que hayan elegido, comprobamos que no somos un bot y ya estaria listo. Si seguistes todos los pasos bien, tu deberia haberse unido al servidor selecionado, recuerda que tienes que esperar el mensaje que diga:

image

Ya tendríamos nuestro bot en el servidor, claro pero no esta activo, podemos comprobarlo, en la hilera de la derecha, sale Desconectado, TestBot y es lógico, nosotros solo hemos creado un bot y lo hemos metido en nuestro server, pero no tiene ni prefix ni nada y eso lo arreglaremos a continuación.

image

# Parte 2: Intalaciòn de lo que necesitaremos

Ahora, si no lo tenemos ya, vamos a la pestaña de bot y copiamos el token, ahora comprobemos que tenemos python

python3
Enter fullscreen mode Exit fullscreen mode

y deberia dar como respuesta:

image

O si no tienes python3:

python
Enter fullscreen mode Exit fullscreen mode

image

Si no te funciona ninguno de los dos, y te sale algo parecido a esto:

Command 'python' not found
Enter fullscreen mode Exit fullscreen mode

Significa que no tienes python instalado en tu SO(sistema operativo) y entonces debemos instalarlo. Nos dirijimos a la pagina de python y encontraremos algo asi:

image

En la navegación(el menú de arriba) encontramos:
image

Lo que nos importa es "Downloads" al posicionar el cursos sobre downloads, nos mostrar el paquete a descargar segun nuestro so y abajo de donde dice "Download for Windows" o "Download for Mac OS X" hay un botón, que dice python 3.9.5 o superior dependiendo de cuando veas este post, le das clic ahí y comenzara la descargar ...

Instalacion en Windows

Luego de que se instale el archivo, vamos a la carpeta que lo contiene y lo abrimos como administrador("ejecutar como administrador") luego de dar nuestra credenciales para ejecutarlo como administrador, nos saldrá algo así:
Alt Text

La versión de el python en la captura es algo vieja pero igual deben ser los mismos pasos

Importante es pinchar en el recuadro de el final que dice "Add Python 3.7 to PATH"

Luego en la parte superior encontramos dos opciones:

  • Install Now: que incluye :IDLE, pip and documetation
  • Customize Installation

Con la opción "Add Python 3.7(o superior dependiendo de la fecha) to PATH" previamente pinchada, presionamos "install Now", comienza la instalacion y cuando termine, seleccionamos close en la esquina inferior derecha.

Luego al irnos al menú debería estar el IDLE y Python en "agregados recientemente"

Instalación en Linux

Nos dirigimos a la terminal, en ella escribimos el siguente comando:

sudo apt-get install python3
Enter fullscreen mode Exit fullscreen mode

Luego les pedirá confirmación presiona Y + Enter, y comenzara la descarga.

image

Yo ya lo tengo por eso me salio ese mensaje

Proseguimos instalando el IDLE de python:

sudo apt-get install idle
Enter fullscreen mode Exit fullscreen mode

image

Luego desde el menu podemos conseguir el IDLE si lo instalamos bien, al abrirlo desde el menu saldria algo asi:
image

Parte 3: Creación del código(sección 1)

Nos dirigimos al directorio que queramos, comúnmente el Escritorio y creamos un carpeta, el nombre no importa, pero la llamaremos "bot", nos abrimos la carpeta y seleccionamos "abrir en terminal" o algo parecido con eso ya deberias tener la terminal dentro de la carpeta, deberia salir toda la direccion algo así: user/Escritorio/bot, donde user es tu usuario y lo demás es la ubicación donde yo tengo el bot.

Consejos

Si no sabes moverte desde consola estos comandos te ayudaran un poco:

Cuando abras la terminal dándole click a el icono o con algún atajo de teclado, usa el comandos :
ls o dir en windows

Ahí veras una serie de archivos y carpetas que estan en la carpeta personal, si creaste la carpeta en el escritorio deberás hacer esto:

dir
Enter fullscreen mode Exit fullscreen mode

si tu pc esta en ingles usa luego de dir:

cd Desktop

si esta en español:

cd Escritorio

Luego de estar dentro de Escritorio usa cd mas el nombre de tu carpeta, en mi caso bot

cd bot

Parte 3: Creación del código(sección 2)

Instalamos pipenv, es para crear un entorno virtual y estar mas seguros.

pip3 install pipenv
Enter fullscreen mode Exit fullscreen mode

eso con python3

pip install pipenv
Enter fullscreen mode Exit fullscreen mode

con python

Seguidamente iniciamos el entorno virtual en nuestra carpeta

pipenv shell
Enter fullscreen mode Exit fullscreen mode

Instalamos la librería discord.py para programar los comandos de nuestro bot

pipenv install discord.py
Enter fullscreen mode Exit fullscreen mode

Hechos los anteriores pasos debería crearse un archivo Pipfile que vendría siendo muy parecido en uso a el package.json

Si nos metemos en el archivo Pipfile, y bajamos un poco deberíamos ver algo así:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

**[packages]
"discord.py" = "*"**

[dev-packages]

[requires]
python_version = "3.9"
Enter fullscreen mode Exit fullscreen mode

Y si vemos en packages dice discord.py.Eso significa que instalamos discord.py correctamente

Parte 3 Creación del código(sección 3)

Adentro de nuestra carpeta, bot o como vos la llamaste, tenemos nuestro archivo Pipfile y un archivo Pipfile.lock, ninguno de estos archivos debemos modificar

Listo con las dependencias creamos una carpeta llamada src, adentro creamos un archivo main.py ese contendrá el código de nuestro bot, ahora toca, echar código.... No importa que editor de código uses, puede ser Atom, SublimeText, Nvim, Vscode, el IDLE no importa.

Ahora si no tenias ningún editor de código antes de ver este post, puedes usar el IDLE que instalamos, lo abrimos y vemos en la esquina superior izquierda que dice -entre otras cosas- file le damos clic ahí, luego nos aparecerá otro menú, le damos a "open" y de ahí navegamos a donde este nuestro archivo del bot(el main.py)

image

# Comencemos con las importaciones

En la parte superior de nuestro archivo ponemos:

import discord #importamos para conectarnos con el bot
from discord.ext import commands #importamos los comandos
import datetime 
Enter fullscreen mode Exit fullscreen mode

Ahora declaramos la variable bot, que es la que nos ayudara a conectarnos con el bot.

bot = commands.Bot(command_prefix='_', description="this is a testing bot")
Enter fullscreen mode Exit fullscreen mode

Eso lo que dice es que el prefix de nuestro bot es : “ _ “. El prefix es el la forma de llamar a nuestro bot.

Cabe decir que, yo he visto varios códigos de bot y también se usa mucho client en vez de bot, aunque eso no importa dado que es solo el nombre de una variable, pero a la hora de trabajar conjunto a otros dev's si que es de suma importancia

Ahora vamos a crear el primer comando, como sabrás en programación es una buena practica que para iniciar se haga el famoso "Hola mundo", pues en los bot hay algo parecido que es el "ping" y el bot te devuelve "pong", agreguemosle esa tarea a nuestro bot:

#Ping-pong
@bot.command()
async def ping():
     await ctx.send('pong')
Enter fullscreen mode Exit fullscreen mode

Que hicimos ahi? simple:

  • 1) @bot.command(): simplemente nos crea un comando.

  • 2) asyng def ping(): una función, ella es la que se encarga de manejar ese comando, el nombre de la función sera el nombre del comando en este caso "ping" y se le pasa el contexto(ctx).

  • 3) luego en la siguiente linea està el envió del mensaje.

El código completo hasta ahora seria:

import discord #importamos para conectarnos con el bot
from discord.ext import commands #importamos los comandos
import datetime 

bot = commands.Bot(command_prefix='_', description="this is a testing bot")


#Ping-pong
@bot.command()
async def ping(ctx):
     await ctx.send('pong')
Enter fullscreen mode Exit fullscreen mode

Pongamos un estado a nuestro bot, los típicos, viendo, jugando, escuchando y trasmitiendo, eso son todos para que vean:

# `Playing ` status
await bot.change_presence(activity=discord.Game(name="a game"))

# `Streaming ` status
await bot.change_presence(activity=discord.Streaming(name="My Stream", url=my_twitch_url))

# `Listening ` status
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.listening, name="a song"))

# `Watching ` status
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name="a movie"))
Enter fullscreen mode Exit fullscreen mode

No le pongas todos, ponle solo uno
Yo en mi caso, usare viendo como casi todos los bot:

@bot.event
async def on_ready():
    await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name="_help"))
    print('My bot is ready')

Enter fullscreen mode Exit fullscreen mode

Y ahora la hora de la verdad, hay que poner el token para activar nuestro bot, y lo haremos de la siguiente forma de hacer que nuestro bot se conecte con el código que hemos escrito. Lo primero debemos tener el token en portapapeles, y lo ponemos entre comillas, algo asi:

bot.run('ODI0ODY3NjkyODg0MDYF1n5wH6REonj68UCLK3UT3zWyXz7Y8Pc')
Enter fullscreen mode Exit fullscreen mode

Consejos: no compartan su token, no pongan este codigo en replit, les pueden robar el token, en otro post hablare de variables de entorno(.env)

Ahora juntemos todo:

import discord #importamos para conectarnos con el bot
from discord.ext import commands #importamos los comandos
import datetime 

bot = commands.Bot(command_prefix='_', description="this is a testing bot")


#Ping-pong
@bot.command()
async def ping(ctx):
     await ctx.send('pong')

@bot.event
async def on_ready():
    await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name="_help"))
    print('My bot is ready')

bot.run('ODI0ODY3NjkyODg0MDAwNzc4.YF1n5w.H6REonj68UCLK3UT3zWyXz7Y8Pc')

Enter fullscreen mode Exit fullscreen mode

Parte 4: Probando el bot

Para Correr nuestro bot tendriamos que hacer algo asi:

python main.py

o

python3 main.py

o en el IDLE seria presionando F5

Ahora vamos a nuestro server y probemos el bot, con el único comando, _ping:

image

Parte 5: help_command

También podemos usar el comando _help pero no es así muy bonito véanlo ustedes mismos:

image

Para cambiar eso, simplemente ponemos algo a nuestra variable bot:

bot = commands.Bot(command_prefix='_', description="this is a testing bot", help_command=None)
Enter fullscreen mode Exit fullscreen mode

help_command:None invalida el comando help para que nosotros podamos crear uno libremente, de otra forma daria un error similar a este:

image

Nos informa que hay un comando help ya

Bueno luego de poner el código de arriba escribimos nuestro help_command personalizado:

@bot.command()
async  def  help(ctx):
  des = """
  Comandos de TestBot\n

  > ping: El bot te responde pong\n

  > Prefix:  _\n
  Hecho con amor en Python\n

  """
  embed = discord.Embed(title="I'm TestBot",url="https://cdn.discordapp.com/avatars/809827305295314967/babea11271bbf5a89d5bf15220e7c278.webp?size=1024",description= des,
  timestamp=datetime.datetime.utcnow(),
  color=discord.Color.blue())
  embed.set_footer(text="solicitado por: {}".format(ctx.author.name))
  embed.set_author(name="AlexanderG",       
  icon_url="https://cdn.discordapp.com/avatars/809827305295314967/babea11271bbf5a89d5bf15220e7c278.webp?size=1024%22")


  await ctx.send(embed=embed)
Enter fullscreen mode Exit fullscreen mode

Los \n son saltos de linea nada más
Se vería así nuestro help_command:
image

Parte 6: Conclusión

Y todo junto seria:

import discord #importamos para conectarnos con el bot
from discord.ext import commands #importamos los comandos
import datetime 

bot = commands.Bot(command_prefix='_', description="this is a testing bot", help_command=None)


#Ping-pong
@bot.command()
async def ping(ctx):
  await ctx.send('pong')



@bot.command()
async  def  help(ctx):
  des = """
  Comandos de TestBot\n

  > ping: El bot te responde pong\n

  > Prefix:  _\n
  Hecho con amor en Python\n

  """
  embed = discord.Embed(title="I'm TestBot",url="https://cdn.discordapp.com/avatars/809827305295314967/babea11271bbf5a89d5bf15220e7c278.webp?size=1024",description= des,
  timestamp=datetime.datetime.utcnow(),
  color=discord.Color.blue())
  embed.set_footer(text="solicitado por: {}".format(ctx.author.name))
  embed.set_author(name="AlexanderG",       
  icon_url="https://cdn.discordapp.com/avatars/809827305295314967/babea11271bbf5a89d5bf15220e7c278.webp?size=1024%22")


  await ctx.send(embed=embed)
@bot.event
async def on_ready():
    await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name="_help"))
    print('My bot is ready')

bot.run('ODI0ODY3NjkyODg0MDAwNzc4.YF1n5w.H6REonj68UCLK3UT3zWyXz7Y8Pc')

Enter fullscreen mode Exit fullscreen mode

Anotacion

pipenv shellcrea un entorno virtual y nosotros al hacer pipenv install discord.py estamos diciendo: En esta carpeta en este entorno virtual quiero que me instales discord.py, no en mi pc globalmente, lo que quiere decir que para correr nuestro bot siempre debemos iniciar el entorno virtual en la misma carpeta del bot, porque los entornos virtuales son totalmente diferentes unos de otros.

Esto es un post introductorio, no insinuó que esto es todo lo que se pueda hacer con los bot porq la verdad hay muchas posibilidades, esto es solo lo básico para comenzar con esta fabuloso y divertido mundo de los bot. Sin nada mas que agregar, Dios mediante seguiré escribiendo, El próximo post seguramente tratara de variables de entorno.

Espero haya sido de su agrado bye :) alguna duda o error por favor déjamelo en los comentarios.

dedicacion a: @adeodato

Top comments (4)

Collapse
 
adeodato profile image
Fidel Emilio Susana Jimenez

Eres el Mejor y algún día quisiera tener la oportunidad de trabajar a tu lado!! bendiciones!!!

Collapse
 
isimpp profile image
iSimpp

En repl.it también se puede hacer un bot sólo que hay que guardarlo en un secret


token = Os.environ["Nombre del secreto"]
Enter fullscreen mode Exit fullscreen mode
Collapse
 
aydiositx profile image
el de Dios

Me aparece el siguiente error: Callback for ping command is missing "ctx" parameter

Collapse
 
alexanderg profile image
Alexander G

hola perdon por no responder, sigues con el error? si es asi pasa el codigo para ver
:)