DEV Community 👩‍💻👨‍💻

Diego Cuevas
Diego Cuevas

Posted on • Originally published at diegocuevas.dev

Como crear un Bot de discord usando Ruby

Primero debemos crear el bot en la pagina de discord.

apps

para obtener el token del bot debemos ir a la parte settings/Bot creas el bot y guardas el token que sale abajo del username del bot.

bot

Después debemos agregar nuestro bot a nuestro servidor de discord, para ello debemos ir a la parte OAuth2 url generator seleccionar scope Bot y entrar a la url generada.

url-generated

Seleccionar el servidor que queremos y listo! ahora solo debemos hacer las funciones de nuestro bot.


Requerimientos:
Ya con el token podemos empezar a codear, usaremos e instalaremos las siguentes herramientas:

$ gem install discordrb 
Enter fullscreen mode Exit fullscreen mode

Necesitarás esto para que funcione la función de voz de discordrb, a pesar de que no lo usemos la gema discordrb requiere de esto.

$ brew install libsodium 
Enter fullscreen mode Exit fullscreen mode
  • Otra biblioteca popular para audio/video requerida por discordrb para soporte de voz
$ brew install ffmpeg 
Enter fullscreen mode Exit fullscreen mode

Creamos un archivo main.rb donde agregamos primero los require de las herramientas que usaremos:

require "discordrb"
require "mechanize"
require "json"
Enter fullscreen mode Exit fullscreen mode

Creando el bot

Luego con el token que nos dieron podremos inicializar para crear los comandos de nuestro bot eso seria algo asi:

bot = Discordrb::Bot.new token: 'XXXXXXXXXXXXXX'
Enter fullscreen mode Exit fullscreen mode

Entonces hacemos el bot.message(with_text: ‘some key word’) para que cada vez que reconozca el key word o palabra clave entre a la función.

En mi caso es 'meme'

bot.message(with_text: 'meme') do |event|
Enter fullscreen mode Exit fullscreen mode

Para traer la imagen usaremos mechanize que se utiliza para automatizar la interacción con los sitios web.

agent = Mechanize.new
Enter fullscreen mode Exit fullscreen mode

buscamos una url que nos de images random de memes por ejemplo yo usé esta url.

link = 'https://meme-api.herokuapp.com/gimme'
Enter fullscreen mode Exit fullscreen mode

Hacemos un get al endpoint y parseamos la data a Json para obtener la url de la imagen.

response = JSON.parse(agent.get(link).body.to_s)
Enter fullscreen mode Exit fullscreen mode

Después yo hice esto, para obtener el nombre y su tipo como (“.gif”,”.png”).

name = response['url'].split('/').last
Enter fullscreen mode Exit fullscreen mode

Entonces ya que tenemos la url de la imagen le hacemos un get a la url de la imagen y la guardamos con el nombre que obtenemos arriba.

agent.get(response["url"]).save name
Enter fullscreen mode Exit fullscreen mode

Una vez guardada usamos el método “.send_file” para mandar la imagen

event.send_file(File.open(name), caption: response["title"])
Enter fullscreen mode Exit fullscreen mode

Después mandar la imagen, le hacemos un sleep a nuestra función por dos segundos
(que hace que se detenga la función por el tiempo dicho), hacemos el sleep para que no se elimine mientras se esta subiendo la imagen.
y borramos la imagen de nuestra carpeta

sleep(2)
event File.delete(name)
Enter fullscreen mode Exit fullscreen mode

Algo así nos quedaría la función:

bot.message(with_text: 'meme') do |event|
  agent = Mechanize.new
  link = 'https://meme-api.herokuapp.com/gimme'
  response = JSON.parse(agent.get(link).body.to_s)
  name = response['url'].split('/').last
  agent.get(response["url"]).save name
  event.send_file(File.open(name), caption: response["title"])
  sleep(2)
  File.delete(name)
end
Enter fullscreen mode Exit fullscreen mode

Finalmente mandamos un mensaje meme en nuestro servidor de discord.

demo-gif

Top comments (0)

🌚 Friends don't let friends browse without dark mode.

Sorry, it's true.