Como crear un bot en discord.py
Alexander G
Posted on May 20, 2021
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"
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:
Luego de darle a "Create" les deberá mostrar el menú de nuestra aplicación, algo así:
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í:
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í:
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í:
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
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í:
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:
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.
# 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
y deberia dar como respuesta:
O si no tienes python3:
python
Si no te funciona ninguno de los dos, y te sale algo parecido a esto:
Command 'python' not found
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:
En la navegación(el menú de arriba) encontramos:
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í:
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
Luego les pedirá confirmación presiona Y + Enter, y comenzara la descarga.
Yo ya lo tengo por eso me salio ese mensaje
Proseguimos instalando el IDLE de python:
sudo apt-get install idle
Luego desde el menu podemos conseguir el IDLE si lo instalamos bien, al abrirlo desde el menu saldria algo asi:
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
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
eso con python3
pip install pipenv
con python
Seguidamente iniciamos el entorno virtual en nuestra carpeta
pipenv shell
Instalamos la librería discord.py para programar los comandos de nuestro bot
pipenv install discord.py
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"
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)
# 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
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")
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')
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')
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"))
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')
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')
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')
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:
Parte 5: help_command
También podemos usar el comando _help pero no es así muy bonito véanlo ustedes mismos:
Para cambiar eso, simplemente ponemos algo a nuestra variable bot:
bot = commands.Bot(command_prefix='_', description="this is a testing bot", help_command=None)
help_command:None invalida el comando help para que nosotros podamos crear uno libremente, de otra forma daria un error similar a este:
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)
Los \n son saltos de linea nada más
Se vería así nuestro help_command:
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')
Anotacion
pipenv shell
crea 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
Posted on May 20, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.