Sirviendo Gifs con Discord Bot – Tiempo de lectura: 12 minutos

En este artículo, nos dirigimos a los desarrolladores de Python que tienen interés en aprender a crear sus propios chatbots en Discord.

El lector debe tener algún conocimiento de Python. Para instalar bibliotecas y crear funciones en Python.

Esto es para permitir que el lector aproveche las herramientas de chatbot existentes para construir su propio bot.

¿Alguna vez te has preguntado si podrías tener tu propio asistente personal? ¿Para ayudarlo a hacer sus tareas o tareas domésticas por usted?

Cuando Apple anunció por primera vez su asistente de IA llamado Siri. Para el mundo durante uno de sus lanzamientos de iPhone de Apple.

Siri tomó al mundo por sorpresa, hubo un montón de artículos o videos sobre preguntas divertidas. La gente le preguntaba a Siri como si Siri fuera una persona de la vida real.

¡Hoy aprenderemos a crear nuestro propio asistente personal que le responderá con gifs en lugar de solo palabras en Discord usando nuestro Python favorito!

¿Qué es la discordia?

Discord es una aplicación de voz sobre IP (VoIP) que proporciona comunicaciones de texto y de voz.

Eso es popular entre los jugadores u otras comunidades a las que les gustaría usar los servidores para organizar eventos.

El servicio es como Telegram o Whatsapp, que brinda integración para llamadas de voz en el chat y funciones en el juego.

El auge de los chatbots

A medida que más personas comenzaron a usar clientes de mensajería como WhatsApp, Telegram, Facebook Messenger y Slack.

Ha desatado una tendencia de crear chatbots para una variedad de propósitos, como mejorar la satisfacción del cliente y automatizar procesos.

Uso común para chatbots

Atrás quedaron los días en los que la búsqueda de soluciones implicaba ir a la página de preguntas frecuentes o llamar al centro de atención al cliente.

En cambio, estos se reemplazan con un nuevo y brillante bot.

Quién está para contarte chistes, ofrecerte soluciones o recomendarte productos o servicios que se ajusten a tus necesidades.

Configuración

Muy bien, pongámonos manos a la obra para comenzar con la configuración de nuestro servidor.

debemos registrar una cuenta en Discordia.

Configurar un servidor de discordia

Después de la creación de su cuenta, inicie sesión con su cuenta recién creada. Estarás en el channels página.

Eso le permite agregar un servidor → más icono para agregar un nuevo servidor como se muestra a continuación.

agregar servidor

Después de hacer clic en el más icono, se le lleva a esta página con opciones para crear un nuevo servidor o unirse a un servidor existente.

crear servidor

Haga clic en el botón “Crear un servidor”, luego complete los detalles del servidor de su propio servidor y haga clic en el crear botón.

detalles del servidor de discordia

¡¡¡Felicitaciones!!! Acababa de crear su primer servidor. Este servidor se utilizará para el resto de este tutorial. Mientras tanto, tómate un descanso antes de seguir adelante.

giphy

Crear una aplicación y un bot

Muy bien, vamos a lo de Discord. portal para desarrolladores en e inicie sesión con su cuenta.

Una vez que esté en el portal de desarrolladores, se verá así.

portal para desarrolladores de discordia

Seleccione el botón “Nueva aplicación” para crear una nueva aplicación. Para que su bot pueda usar el token para interactuar con su servidor.

Crear nuevas aplicaciones

A continuación, en el izquierda lado de la barra lateral hay un nombre llamado bot. Haga clic en bot → Add Bot botón.

añadir bot

Se mostrará un mensaje para confirmar la creación de su bot. Ignóralo y continúa haciendo clic en el botón “Sí, hazlo”.

si al bot

Agregar bot a su servidor

Ahora procederemos a agregar su bot recién creado al servidor.

Primero haga clic en la pestaña General Information en el lado izquierdo de la aplicación que había creado.

Luego haga clic en el Copiar botón que está debajo de la identificación del cliente para copiar la identificación del cliente.

Esto le permite formar una URL con la identificación de cliente de su aplicación desde el portal para desarrolladores, como se muestra a continuación.

identificación del cliente de la aplicación

https://discordapp.com/api/oauth2/authorize?scope=bot&client_id=bot_client_id

Ahora, abra una nueva pestaña en su navegador y diríjase a la URL que acaba de formar.

Será redirigido a un sitio web que le permitirá aprobar la conexión de su bot al servidor.

agregar bot al servidor

¡¡¡Felicitaciones!!! Ahora ha completado el configuración proceso de su bot y servidor. Vuelva a este tutorial nuevamente cuando esté listo para comenzar a codificar.

giphy

Hola mundo en Discord Server

Bienvenido de nuevo, comencemos a crear el bot. Crea una carpeta llamada discord.

A continuación, cree un entorno virtual llamado venv en la misma carpeta.

$ virtualenv --python=python3 venv
$ source venv/bin/activate

Con el entorno virtual que había creado, debemos instalar una biblioteca como se muestra a continuación:

$ python3 -m pip install -U discord.py

Crea un archivo llamado bot.py con su token de bot encontrado en el portal de desarrolladores en la pestaña ‘Bot:

copiar token de bot

import discord token = 'your_discord_bot_token'

Para que tu bot funcione, necesitas crear una clase de Python llamada DiscordClient.

Esta clase debe contener al menos dos funciones, a saber on_ready() & on_message() Como se muestra abajo:

class DiscordClient(discord.Client): async def on_ready(self): pass async def on_message(self, message): pass

los on_ready() La función se utiliza para establecer una conexión con su servidor utilizando el token de su bot:

async def on_ready(): print("Login as") print(self.user) print("-------")

los on_message() respuesta de la función con Hola mensaje cada vez que un usuario dice “hola”:

async def on_message(self, message): if message.author != self.user: if message.content == 'hi': await message.channel.send('Hello') client = DiscordClient()
client.run(token)

Después de haber incluido el código para ambos on_ready() & on_message() funciones los bot.py debería verse así para su primer programa de bot:

bot.py

import discord token = 'your_discord_bot_token' class DiscordClient(discord.Client): async def on_ready(self): print("Login as") print(self.user) print("-------") async def on_message(self, message): if message.author != self.user: if message.content == 'hi': await message.channel.send('Hello') client = DiscordClient()
client.run(token)

Ahora ejecutemos el programa y vayamos a su servidor para escribir “hola” en el canal general :

hola respuesta

¡¡¡¡Impresionante!!!! Ahora que hiciste que tu bot dijera “Hola”. Pasemos a los comandos y juguemos con ellos.

Comandos de discordia

Hay un montón de comandos útiles relacionados con los usuarios. Cubriré solo lo básico.

Para obtener más detalles sobre los comandos, puede dirigirse a la Guía de referencia de la API para comprobar que funciona.

bola mágica 8

Los comandos deben llamarse desde bot2.py con el ? prefijo.

Usando el comando llamado 8ball. Que respondió con una predicción cada vez que inicia el comando:

bot2.py

from discord.ext.commands import Bot
import random token = 'your_bot_token'
bot = Bot(command_prefix='?') @bot.event
async def on_ready(): print("Login as") print(bot.user.name) print("-------") @bot.command(name="8ball")
async def magic_eight_ball(ctx): response =['Without a doubt.', 'Outlook good.', 'Better not tell you now.', 'Cannot predict now.', 'My reply is no.', 'Outlook not so good.',] await ctx.send(random.choice(response)) bot.run(token)

Ejecutemos el programa Python para probar el comando recién creado ingresando ‘?8ball’.

comando de bola 8

¿Qué es el contexto?

Tenga en cuenta que para cada comando de bot requiere el parámetro ctx ser llamado.

Lo que es llamado Contexto para iniciar varios comandos relacionados con bots.

Uso del cliente GIPHY Python

Ahora integraremos el cliente Giphy Python como se muestra a continuación:

$ pip install giphy_client

Una vez que haya completado la instalación del cliente giphy, vayamos a la Portal para desarrolladores de Giphy para registrarse y crear una nueva aplicación. Para que pudieras conseguir el Clave API de Giphy.

Para giphy.py, importe lo siguiente. Cuál es el giphy_client que ayuda a iniciar el DefaultApi y ApiExceptionque se ocupa de las diversas excepciones relacionadas con la giphy API.

los pprints() se utiliza para mostrar la respuesta en un formato fácil de leer:

import giphy_client
from giphy_client.rest import ApiException
from pprint import pprint

El diccionario de configuración utiliza 3 claves a saber api_key que es la clave API de Giphy.

los query cuál es el término de búsqueda que buscas giphy y por último limit cuál es el número de gifs que se devuelven del resultado de la búsqueda:

api_instance = giphy_client.DefaultApi()
config = { 'api_key': 'your_api_key', 'limit': 1, 'rating': 'g'
} try: api_response = api_instance.gifs_trending_get( config['token'], limit=config['limit'], rating=config['rating']) pprint(api_response) except ApiException as e: print("Exception when calling DefaultApi->gifs_trending_get: %s\n" % e)

Buscar gifs por palabras o frases

Para buscar sus Gifs por palabras, debe realizar los siguientes cambios.

De .gifs_search_get() y agregue un campo adicional llamado query en ambos config variables y api_response Como se muestra abajo:

config = {'api_key': 'your_api_key', 'q': 'cheese', 'limit': 1, 'rating': 'g'} try: api_response = api_instance.gifs_search_get(config['api_key'], limit=config['limit'], rating=config['rating'],q=config['q']) except ApiException as e: print("Exception when calling DefaultApi->gifs_search_get: %s\n" % e)

GIF al azar

Para obtener un gif aleatorio, debe eliminar tanto el query & limit campo de config variable.

Además de eso, usted tiene que reemplazar el .gifs_search_get() usar .gifs_random_get() Como se muestra abajo.

config = { 'token': 'your_giphy_token', } try: api_response = api_instance.gifs_random_get(config['api_key'])

Tomemos un descanso y comencemos a aplicar lo que aprendimos con nuestro bot para servir gifs.

Bot sirviendo gifs en Python

Bienvenido de nuevo 😃 Comenzaremos usando la biblioteca Giphy para buscar un gif y subirlo a su servidor como respuesta para su bot en el programa de Python llamado ‘bot2.py’.

Mostrar gifs en el servidor

Importe las siguientes bibliotecas:

import random
import giphy_client
from discord.ext.commands import Bot
from giphy_client.rest import ApiException

Después de agregar el cliente giphy y el ApiException. Refactoricemos nuestro código original para incluir el token giphy:

discord_token = 'your_discord_token'
giphy_token = 'giphy_api_key' bot = Bot(command_prefix='?')
api_instance = giphy_client.DefaultApi()

Buscar gifs

Ahora vamos a crear una función llamada search_gifs()donde la API giphy buscará los gifs.

Una vez que buscamos 3 gifs, elegirá aleatoriamente un gif y mostrará el URL cada vez que el 8ball comando se llama:

async def search_gifs(query): try: response = api_instance.gifs_search_get(giphy_token, query, limit=3, rating='g') lst = list(response.data) gif = random.choices(lst) return gif[0].url except ApiException as e: return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e

Mejorar un comando Discord

Añadiremos ahora el search_gifs() función en el magic_eight_ball() función:

@bot.command(name="8ball")
async def magic_eight_ball(ctx): response = ['Without a doubt.', 'Outlook good.', 'Better not tell you now.', 'Cannot predict now.', 'My reply is no.', 'Outlook not so good.',] gif = await search_gifs('cheese') await ctx.send(random.choice(response)) await ctx.send('Gif URL : ' + gif)

Una vez que haya refactorizado su bot2.py con la biblioteca de búsqueda de gifs. Debería verse así a continuación:

bot2.py

import random
import giphy_client
from discord.ext.commands import Bot
from giphy_client.rest import ApiException discord_token = 'your_discord_token'
giphy_token = 'giphy_api_key' bot = Bot(command_prefix='?')
api_instance = giphy_client.DefaultApi() @bot.event
async def on_ready(): print("Login as") print(bot.user.name) print("-------") async def search_gifs(query): try: response = api_instance.gifs_search_get(giphy_token, query, limit=3, rating='g') lst = list(response.data) gif = random.choices(lst) return gif[0].url except ApiException as e: return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e @bot.command(name="8ball")
async def magic_eight_ball(ctx): response = ['Without a doubt.', 'Outlook good.', 'Better not tell you now.', 'Cannot predict now.', 'My reply is no.', 'Outlook not so good.',] gif = await search_gifs('cheese') await ctx.send(random.choice(response)) await ctx.send('Gif URL : ' + gif) bot.run(discord_token)

Gif de pantalla

vamos a ejecutar bot2.py para probar el 8ball comando ingresando el siguiente comando para ejecutar su bot2.py:

gif de comando de bola 8

¡¡¡Impresionante!!! Realmente funciona 😃 está bien. Tomemos un descanso y tomemos un KitKat mientras comenzamos a crear comandos de reacción gif.

giphy

Visualización de reacciones por bot

Hasta ahora habíamos aprendido a buscar gifs y mostrar nuestros gifs cada vez que alguien llama a un comando.

Vamos a crear un bot que nos sirva gifs basados ​​en lo siguiente que es “Hola”, “Bienvenido”, “Adiós” y “Adiós” que se llama bot3.py:

import random
import discord
import giphy_client
from giphy_client.rest import ApiException discord_token = 'your_discord_token'
giphy_token = 'your_giphy_api_key' api_instance = giphy_client.DefaultApi()

Agreguemos el search_gifs() función que habíamos creado previamente.

Aumentamos el número de gifs buscados a 5 en lugar de 3 gifs. Servirá para producir una respuesta gif más aleatoria:

def search_gifs(query): try: return api_instance.gifs_search_get(giphy_token, query, limit=5, rating = 'g') except ApiException as e: return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e

junto al search_gifs() función, debemos agregar en un gif_response() en el que una parte del código se desglosa del search_gifs() para ser más limpio y fácil de entender:

def gif_response(emotion): gifs = search_gifs(emotion) lst = list(gifs.data) gif = random.choices(lst) return gif[0].url

Hola

Ahora que habíamos agregado el search_gifs() & gif_response() funciones

Debemos incluir la DiscordClient Clase de Python como se muestra a continuación con el on_ready() función para la configuración básica de su bot.

class DiscordClient(discord.Client): async def on_ready(self): print("Login as") print(self.user) print("-------")

Ahora centrémonos en crear la lógica para que el bot responda cada vez que un usuario dice “hola” o “hola” al bot:

async def on_message(self, message): if message.author != self.user: if message.content == 'hi': await message.channel.send('Hi there!!! ' + message.author.mention) await message.channel.send(gif_response('hi')) elif message.content == 'hello': await message.channel.send('Hello :) ' + message.author.mention) await message.channel.send(gif_response('hello'))

bot3.py

import random
import discord
import giphy_client
from giphy_client.rest import ApiException

discord_token = 'your_discord_token'
giphy_token = 'your_giphy_api_key'

api_instance = giphy_client.DefaultApi()

def search_gifs(query):
    try:
        return api_instance.gifs_search_get(giphy_token, query, limit=5, rating = 'g')

    except ApiException as e:
        return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e

def gif_response(emotion):
    gifs = search_gifs(emotion)
    lst = list(gifs.data)
    gif = random.choices(lst)

    return gif[0].url

class DiscordClient(discord.Client):
    async def on_ready(self):
        print("Login as")
        print(self.user)
        print("-------")

    async def on_message(self, message):
        # Whenever a user other than bot says "hi"
        if message.author != self.user:
            if message.content == 'hi':
                await message.channel.send('Hi there!!! ' + message.author.mention)
                await message.channel.send(gif_response('hi'))

            elif message.content == 'hello':
                await message.channel.send('Hello :) ' + message.author.mention)
                await message.channel.send(gif_response('hello'))
                
client = DiscordClient()
client.run(discord_token)

hola respuesta

hola respuesta

Bienvenidos

Al mejorar la on_message() función para incluir una respuesta de “bienvenida” cada vez que un usuario diga “bienvenido”:

elif message.content == 'welcome': await message.channel.send(message.author.mention + ' Welcome to the discord channel :)') await message.channel.send(gif_response('welcome'))

respuesta de bienvenida

Usando message.author.mentionel bot responde al usuario

Adiós

Esta es la última respuesta que agregaremos para que el bot diga “adiós” cada vez que un usuario diga “adiós” o “adiós”:

elif message.content == 'bye': await message.channel.send(message.author.mention + ' May the force be with you') await message.channel.send(gif_response('star wars bye')) elif message.content == "good bye": await message.channel.send(message.author.mention + ' Live long and prosper') await message.channel.send(gif_response('salute'))

adiós respuesta

adiós respuesta

Ahora, si está perdido hasta ahora con múltiples respuestas gif, no se preocupe, incluí el bloque de código para bot3.py Como se muestra abajo:

bot3.py

import random
import discord
import giphy_client
from giphy_client.rest import ApiException discord_token = 'your_discord_token'
giphy_token = 'your_giphy_api_key' api_instance = giphy_client.DefaultApi() def search_gifs(query): try: return api_instance.gifs_search_get(giphy_token, query, limit=5, rating = 'g') except ApiException as e: return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e def gif_response(emotion): gifs = search_gifs(emotion) lst = list(gifs.data) gif = random.choices(lst) return gif[0].url class DiscordClient(discord.Client): async def on_ready(self): print("Login as") print(self.user) print("-------") async def on_message(self, message): if message.author != self.user: if message.content == 'hi': await message.channel.send('Hi there!!! ' + message.author.mention) await message.channel.send(gif_response('hi')) elif message.content == 'hello': await message.channel.send('Hello :) ' + message.author.mention) await message.channel.send(gif_response('hello')) elif message.content == 'welcome': await message.channel.send(message.author.mention + ' Welcome to the discord channel :)') await message.channel.send(gif_response('welcome')) elif message.content == 'bye': await message.channel.send(message.author.mention + ' May the force be with you') await message.channel.send(gif_response('star wars bye')) elif message.content == "good bye": await message.channel.send(message.author.mention + ' Live long and prosper') await message.channel.send(gif_response('salute')) client = DiscordClient()
client.run(discord_token)

Conclusión

Guau, ha sido un gran viaje ahora que se ha familiarizado con la creación de un bot y el uso de una biblioteca Giphy.

Permítanos resumir lo que ha aprendido en este tutorial.

Ahora sabe más sobre lo siguiente:

  • ¿Qué es la discordia?
  • El auge de los chatbots
  • Uso del cliente Giphy Python
  • Gifs animados de Bots sirviendo
  • Visualización de reacciones por bot

Mediante la creación de un bot de trabajo que sirve gifs a cualquier usuario. Puedes presumir de ello con tus amigos. No te preocupes, no juzgaré. 😃

Su tarea es pensar en formas de mejorarlo aún más. Mediante el uso de otras API RESTful e incluso crear juegos con él.

Le recomendaría que mirara una variedad de chatbots para ganar inspiración para ayudarte a crear bots intuitivos y divertidos. Espero ver sus creaciones de bots en el futuro.

Si te gusta mi artículo, por favor inscribirse para Max Boletín del Aventurero para el contenido increíble que encuentro semanalmente en Pitón, Puesta en marcha y Desarrollo web.

Tú también puedes seguir yo para conseguir el más reciente actualización de mi artículo sobre CodeMentor

Esta publicación se publicó originalmente en el blog de Max en Sirviendo Gifs con Discord Bot – Tiempo de lectura: 12 minutos y Foto de Andy Kelly en Unsplash

Otras lecturas

Aquí hay algunos artículos y tutoriales que podrían ayudarlo a mejorar su bot.

Ser interactivo e intuitivo para sus usuarios mientras investigaba sobre cómo crear este tutorial.

Similar Posts

Leave a Reply

Your email address will not be published.