07.06.2023

Cómo construir un Slabot en Python on Ubuntu 20.04.

Creamos Slausando Python on Ubuntu 20.04:

Intro:

Slack - un mensajero corporativo, que fue diseñado para mejorar la productividad en sus lugares de trabajo. Con él podrás intercambiar mensajes, crear chats públicos o privados, realizar llamadas (de voz o videollamadas), e integrarte con diferentes Slabots. Slackbot es un aplicación que fue diseñada para interactuar con los usuarios a través de conversaciones. Eso tiene muchas funciones y opciones, como: enviar advertencias y mensajes, iniciar cualquier tarea.

En nuestro tutorial, para implementar Slackbot que usaremos Python y Ubuntu 20.04. Slack tiene muchas herramientas en su propio arsenal, para ayudarte a interactuar con Python's programa de aplicaciónraminterfaz de ming (API) y sus integraciones.

Para probar las habilidades de los Python y Slack API, CoinBot se lanzará, que monitoreará el chat y lanzará una moneda cuando se active. Después de todo, puede actualizar su bot para fines más prácticos y sus propias ideas.

Mancha: En nuestro tutorial, estamos usando Python.3, eso significa que si va a utilizar versiones que se lanzaron antes, el bot no podrá funcionar.

Preparación:

Todo funcionaría, si tienes estos elementos:

1) Slack en su PC y Workplace (workspace) en el que vas a trabajar. Si no tiene uno, debe crear uno en el sitio oficial Slasitio web de ck.
2)Máquina virtual o PC con dirección IP pública.

Lanzamiento Slarobot

En primer lugar, vamos a lanzar nuestro Slack aplicación en el Slack API Panel de control (SCP)API). Ingrese al menú de su lugar de trabajo y luego vaya a SCPAPI.
Entonces, click en el menú "Crear una aplicación", como en nuestra captura de pantalla:

A partir de entonces, se le pedirá que nombre su aplicación. Nuestro nombre será "CoinBot", pero tu nombre depende de ti. Después de eso, elige un trabajospace que sea más conveniente para usted, donde se instalará la aplicación.

 

Luego, su aplicación estará lista para funcionar. Podrías ir al panel de control.

Desde ese panel, puede personalizar su aplicación: cargar nuevos permisos, conectar notificaciones a cualquier evento, instalar su aplicación en cualquier lugar de trabajo y muchas otras cosas.

Ahora, debemos otorgar derechos especiales a nuestra aplicación, si queremos que nuestra aplicación tenga acceso para enviar mensajes en nuestros chats.
Para tener este permiso: tenemos que click en el menú contextual "Permisos", como en nuestra captura de pantalla:

Después de eso, estará en el menú "OAuth y permisos". Tienes que bajar al "Alcance". Allí debe seleccionar "Ámbitos de token de bot". En ese menú, presione el menú "Add on OAuth Scope":

Como siguiente paso, necesitamos agregar el permiso charlar: escribir. Puedes buscarlo en el escritorio especial.

Después de eso, su aplicación tendrá permiso para escribir en los chats.

A continuación, después de agregar este derecho, debe agregar su aplicación nuevamente a su Trabajospace.
Vaya un poco más abajo en esta página a "Tokens Oauth para su trabajospace", luego haga clic en "Instalar para trabajarspace" botón:


Después de nuestras acciones, Slack le indicará que mire los permisos disponibles para esta aplicación. Si todo te arregla, click en el botón con "Permitir":

Entonces nuestro bot está listo para funcionar, Slack le proporcionará su token de usuario, se utilizará para acceder a su Trabajospace:

Todavía en ese menú tiene un botón "Reinstalar para trabajarspace", que puedes usar si tienes algunos errores con tu bot, se va a reinstalar, después clihaciendo clic en ese botón.
Lo último que debemos hacer es agregar nuestro chatbot en su trabajospaCe. Si ya tiene un canal creado, puede pasar a ese paso ahora: "Agregar un bot a tu canal"

En caso de que aún no haya iniciado los chats, siga estos pasos:
Busque el menú contextual "Agregar canal" y seleccione el botón "Crear un nuevo canal" en él:


Después, seleccione un nombre para su canal y, opcionalmente, complete la barra de descripción.

 

Agregar un bot a tu canal

Si desea agregar un bot a su chat, debe colocar su cursor en el nombre del chat y click en el menú contextual "Ver detalles del canal":


Luego cambie al menú "Integración" y cliHaga clic en el botón "Agregar aplicación":

Luego busque su aplicación por su nombre o simplemente desplácese hacia abajo para encontrarla. En nuestro caso "CoinBot":


Después de todas nuestras acciones, el bot se lanzará en nuestro chat:

 

Python Configure

tenemos que configurar Python, para que podamos instalar y administrar nuestro Slabots de ck.
En primer lugar, instalemos python v.3 y los asistentes de herramientas correspondientes. Vamos a hacer eso en nuestra máquina virtual con Ubuntu v.20.04 implementado en él.
Inicialmente, Python v.3 ya está preinstalado en todos Ubuntu servidores versión 20.04, pero para convencernos de que tenemos todas las actualizaciones disponibles, debemos descargar todas las actualizaciones anteriores en nuestro sistema usando estos comandos:

sudo apt update
sudo apt -y actualización

Después de eso, podemos ver qué versión tenemos:

python3-V

La respuesta será algo como esto:

Python 3.8.2

A continuación, debemos descargar la herramienta pip, que nos dará acceso a la gestión de paquetes:

sudo apto instalar -y python3 pipas

Después de eso, vamos a implementar el entorno virtual (VE):

python3 -m venv ~/.venvs/slarobot

Después de eso necesitamos activarlo:

fuente ~/.venvs/slackbot/bin/activar

Ahora nuestro terminal entre paréntesis mostrará nuestro entorno virtual, debería ser algo así:

(slackbot) raíz@Ubuntu-Bot-Python: ~ #

A continuación, con la herramienta pip, vamos a instalar algunos importantes Python componentes:

instalación de pip slackclient slaeventosapi Frasco

Explicanation: slackclient y slaeventosapi - herramientas que facilitan el uso de Slack API más fácil. Matraz - microweb framework que se utilizará para implementar nuestro bot.
Después de que hayamos configurado Python, podemos configurar nuestro bot.

Creando una clase para Slamensajes de ckbot en Python

Slack utiliza datos JSON con formato especial para enviar mensajes.
Lancemos un Python clase que simula un lanzamiento de moneda.
Recordatorio: hacemos todas las acciones en un entorno virtual. En nuestro caso, el entorno virtual es root@Ubuntu-Bot-Python: ~ #
Primero, usando el comando táctil, cree un archivo llamado coinbot.py:

toque coinbot.py

Luego abra este archivo con el editor nano, puede usar cualquier otro editor:

nanocoinbot.py

Agregue el siguiente contenido a nuestro archivo:

# importar la biblioteca aleatoria para ayudarnos a generar los números aleatorios
importar al azar

# Crear la clase CoinBot
clase CoinBot:
# Crear una constante que contenga el texto predeterminado para el mensaje
MONEDA_BLOQUE = {
"tipo": "sección",
"texto": {
"tipo": "mrkdwn",
"texto": (
"¡Vale! Tirar una moneda al aire....\n\n"
),
},
}
& # El constructor de la clase. Toma el nombre del canal como el a
#papárameter y luego lo establece como una variable de instancia
def __init__(uno mismo, canal):
self.canal = canal
# Genere un número aleatorio para simular lanzar una moneda. Luego devuelve el
# hecho a mano slack payload con el mensaje de lanzamiento de moneda.
def _flip_coin(uno mismo):
rand_int = aleatorio.randint(0,1)
si rand_int == 0:
resultados = "Cabezas"
más:
resultados = "cruz"
text = f"El resultado es {resultados}"
volver {"tipo": "sección", "texto": {"tipo": "mrkdwn", "texto": texto}},
# Elabore y devuelva la carga completa del mensaje como un diccionario.
def get_message_payload(auto):
regreso {
"canal": self.channel,
"bloques": [
yo.COIN_BLOCK,
*self._flip_coin(),
],
}
Luego guardemos y cerremos nuestro archivo con un atajo de teclado.
Ahora nuestro bot puede enviar mensajes y puedes agregarlo a tu trabajospace.

Mensajes de prueba de nuestro Slarobot

Ahora comprobemos que nuestra clase crea la carga correcta.
Cree un archivo llamado coinbot_test.py:

nano coinbot_test.py

Luego agregue el siguiente contenido al archivo creado
Importante: asegúrese de cambiar el nombre del servidor por el suyo propio en coin_bot = coinbot("#YOUR_CHANNEL_HERE").

Desde slack importar WebClient
de coinbot importar CoinBot
importar os

# Crear un slack client
slack_web_client = WebClient(token=os.environ.get("SLACK_TOKEN"))

# Obtener un nuevo CoinBot
coin_bot = CoinBot("#SU_CANAL_AQUÍ")

# Obtenga la carga útil del mensaje de incorporación
mensaje = coin_bot.get_message_payload()

# Publique el mensaje de incorporación en Slack
slack_web_client.chat_postMessage(**mensaje)
Guarde y cierre este archivo.
Antes de ejecutar la prueba, debe exportar su token, que se encuentra en la lista Slak API:

Ahora exporta tu token:

exportar SLACK_TOKEN="Tu token"

Ahora podemos probar nuestro bot. Ejecute el siguiente script en su terminal:

python coinbot_test.py

Después de eso, se le enviará un mensaje sobre el lanzamiento de una moneda en el canal en el que instaló su aplicación. Asegúrate de que tu bot realmente te haya dado cara o cruz.

Creación de una aplicación Flask para ejecutar Slarobot

Ahora que su bot puede lanzar una moneda, crear y enviar mensajes, implementaremos Flask, que procesará los mensajes y les dará algún tipo de reacción si su contenido coincide con algunos criterios.
Primero, configuremos el firewall configuración para permitir el tráfico en el puerto 3000:

sudo ufw permite 3000

Ahora verifique el estado de ufw:

sudo ufw estado

Deberías ver un resultado similar a este:

Salida
Estado: Activo

A la acción de
-- ------ ----
AbiertoSSH    PERMITIR en cualquier lugar
3000 PERMITIR En cualquier lugar
AbiertoSSH (v6) PERMITIR en cualquier lugar (v6)
3000 (v6) PERMITIR en cualquier lugar (v6)

Luego crearemos un archivo para nuestra aplicación Flask.
Llamemos a este archivo app.py:

toque app.py

Luego, abra este archivo con cualquiera de los editores. Usaremos nano:

aplicación nano.py

Agreguemos el siguiente contenido a nuestro archivo app.py:

importar os
registro de importación
desde el matraz de importación Matraz
Desde slack importar WebClient
Desde slaeventosapi importar SlackEventAdapter
de coinbot importar CoinBot

# Inicialice una aplicación Flask para alojar el adaptador de eventos
app = Frasco (__ nombre__)
# Cree un adaptador de eventos y regístrelo en un punto final en el slaaplicación ck para inyección de eventos.
slack_events_adaptador = SlackEventAdapter(os.environ.get("SLACK_EVENTS_TOKEN"), "/slack/eventos", aplicación)

# Inicializar una Web API client
slack_web_client = WebClient(token=os.environ.get("SLACK_TOKEN"))

def flip_coin(canal):
"""Crea el CoinBot, lanza la moneda y envía el mensaje al canal
""
# Crear un nuevo CoinBot
coin_bot = CoinBot(canal)

# Obtenga la carga útil del mensaje de incorporación
mensaje = coin_bot.get_message_payload()

# Publique el mensaje de incorporación en Slack
slack_web_client.chat_postMessage(**mensaje)

# Cuando el adaptador de eventos detecta un evento de 'mensaje', reenvía esa carga
# a esta función.
@slack_events_adapter.on("mensaje")
mensaje def (carga útil):
""" Analice el evento del mensaje y, si la cadena de activación está en el texto,
simule un lanzamiento de moneda y envíe el resultado.
""

# Obtenga los datos del evento de la carga útil
evento = payload.get("evento", {})

# Obtenga el texto del evento que se produjo
texto = evento.get("texto")

# Verifique y vea si la frase de activación estaba en el texto del mensaje.
# Si es así, ejecuta el código para lanzar una moneda.
if "hey sammy, lanza una moneda" en text.lower():
# Dado que se cumplió la frase de activación, obtenga el ID del canal que el evento
# fue ejecutado el
channel_id = event.get("canal")

# Ejecuta la función flip_coin y envía los resultados de
# lanzar una moneda al canal
devolver flip_coin(channel_id)

if __name__ == "__main__":
# Crear el objeto de registro
registrador = registro.getLogger()

# Establecer el nivel de registro en DEBUG. Esto aumentará la verbosidad de los mensajes de registro.
logger.setLevel (registro.DEBUG)

# Agregue StreamHandler como controlador de registro
registrador.addHandler(registro.StreamHandler())

# Ejecute nuestra aplicación en nuestra dirección IP externa en el puerto 3000 en lugar de
# ejecutándolo en localhost, que es tradicional para el desarrollo.
aplicación.ejecutar(host='0.0.0.0', puerto=3000)
Guarde y cierre el archivo.
Explicanation: Agregamos las siguientes afirmaciones porque:

importar os - usaremos para acceder a las variables de entorno

registro de importación - usaremos para registrar eventos de la aplicación.

desde el matraz de importación Matraz - usaremos para crear una aplicación Flask

Desde slack importar WebClient - utilizaremos para enviar mensajes a través de Slack

Desde slaeventosapi importar SlackEventAdapter - utilizaremos para recibir eventos de Slack y procesarlos

de coinbot importar CoinBot - usaremos para crear una instancia de su CoinBot y generar la carga útil del mensaje.

Lanzamiento de su aplicación Flask

Después de todo, nuestra aplicación Flask está lista para funcionar con la aplicación, probémosla.
Primero, agreguemos nuestro Slaaplicación ckbot.
En Slack API página, vaya a la sección "Información básica" y desplácese hacia abajo hasta la subsección "Credenciales de la aplicación":

CliHaga clic en "Mostrar" como se muestra en la captura de pantalla y luego copie el secreto de firma.
Ahora exportamos nuestra firmanature secreto con este comando:

exportar SLACK_EVENTS_TOKEN="MI_FIRMA_SECRET_TOKEN"

Ahora podemos probar nuestra aplicación.
Inicie la aplicación Flask usando ese código:

python3 aplicación.py

Ejemplo de salida:

(slackbot) [19:37:05] danial:CoinBot$ python aplicación.py
* Aplicación "aplicación" de Frasco de servicio (carga diferida)
* Medio ambiente: producción
ADVERTENCIA: Este es un servidor de desarrollo. No lo utilice en una implementación de producción.
Utilice un servidor WSGI de producción en su lugar.
* Modo de depuración: desactivado
* Que se ejecuta en http://0.0.0.0:3000/ (Presione CTRL+C para salir)

Ahora terminemos de configurar nuestra aplicación en el SlaVerifique la interfaz de usuario.
En primer lugar, vamos a proporcionar a nuestra aplicación el derecho de leer, procesar actividades en el chat y responder a ellas.
En el menú de la interfaz de usuario, seleccione la sección "Suscripciones a eventos" y cambie el interruptor de palanca "Habilitar eventos" a la posición "Encendido", como se muestra en la captura de pantalla:

 

Después, abra el menú "Suscribirse a eventos de bot" y seleccione mensajes.canales:

 

Después de nuestras acciones, su aplicación en futere tendrá la oportunidad de procesar mensajes.
Una vez que guarde los cambios, tendrá un menú contextual amarillo en la parte superior de la pantalla que le informará que necesita reinstalar la aplicación para aplicar los siguientes cambios.
CliHaga clic en el enlace de reinstalación en este banner para reinstalar la aplicación:


Luego tendrá un menú contextual con los nuevos permisos aplicados. Si estás de acuerdo con todo, climarque "Permitir":


Después de todo, nuestro bot estará listo. Vaya a su chat y envíe un mensaje con la frase "Oye, Danny, lanza una moneda".
Tu vas a comprobar tu suerte y mostrarte el resultado. ¡Felicitaciones, lanzamos nuestro bot!