07.06.2023

Comment construire un Slackbot dans Python on Ubuntu 20.04.

La création Slackbot utilisant Python on Ubuntu 20.04:

Intro:

Slack - un messager d'entreprise, conçu pour améliorer la productivité de vos lieux de travail. Avec lui, vous pourrez échanger des messages, créer des chats publics ou privés, passer des appels (appels vocaux ou vidéo) et intégrer différents Slackbots. Slackbot est un application conçue pour interagir avec les utilisateurs par le biais de conversations. Il a de nombreuses fonctions et options, comme : envoyer des avertissements et des messages, lancer des tâches.

Dans notre tutoriel, pour déployer Slackbot nous allons utiliser Python ainsi que le Ubuntu 20.04. Slack a beaucoup d'outils dans son propre arsenal, afin de vous aider à interagir avec Python's Programme d'applicationraminterface de connexion (API) et ses intégrations.

Pour tester les capacités du Python ainsi que le Slack APIun CoinBot sera lancé, qui surveillera le chat et lancera une pièce quand il sera déclenché. Après tout, vous pouvez mettre à niveau votre bot à des fins plus pratiques et selon vos propres idées.

Tache: Dans notre tutoriel, nous utilisons Python.3, cela signifie que si vous utilisez des versions antérieures, le bot ne pourra pas fonctionner.

Préparation :

Tout fonctionnerait, si vous aviez ces éléments :

1) Slack sur votre PC et lieu de travail (travailspace) dans lequel vous allez travailler. Si vous n'en avez pas, vous devez en créer un sur le site officiel Slack site Web.
2) Machine virtuelle ou PC avec adresse IP publique.

Lancement Slackbot

Tout d'abord, lançons notre Slack application dans le Slack API Panneau de configuration (SCPAPI). Entrez dans le menu de votre lieu de travail et après cela, allez à SCPAPI.
Puis, click sur le menu "Create an App", comme sur notre capture d'écran :

Par la suite, vous devrez nommer votre application. Notre nom sera "CoinBot", mais votre nom dépend de vous. Après cela, choisissez une œuvrespace qui est plus pratique pour vous, où l'application sera installée.

 

Ensuite, votre application sera prête à fonctionner. Vous pourriez aller au panneau de contrôle.

À partir de ce panneau, vous pouvez personnaliser votre application : télécharger de nouvelles autorisations, connecter des notifications à tous les événements, installer votre application dans n'importe quel lieu de travail, et bien d'autres choses.

Maintenant, nous devons donner des droits spéciaux à notre application, si nous voulons que notre application ait accès pour envoyer des messages dans nos chats.
Pour avoir cette autorisation : nous devons click sur le menu contextuel "Permissions", comme sur notre capture d'écran :

Après cela, vous serez dans le menu "OAuth & Permissions". Vous devez descendre jusqu'à la "Portée". Là, vous devez sélectionner "Bot Token Scopes". Dans ce menu, appuyez sur le menu "Add on OAuth Scope":

Dans une prochaine étape, nous devons ajouter l'autorisation discuter : écrire. Vous pouvez le rechercher dans le bureau spécial.

Après cela, votre application aura la permission d'écrire dans les chats.

Ensuite, après avoir ajouté ce droit, vous devez à nouveau ajouter votre application à votre travailspace.
Allez un peu plus bas sur cette page vers les "Oauth Tokens for Your Workspace", puis cliquez sur "Installer pour travaillerspabouton ce" :


Après nos actions, Slack va vous demander de consulter les autorisations de lancement disponibles pour cette application. Si tout vous arrange, click sur le bouton avec "Autoriser":

Que notre bot est prêt à partir, Slack va vous fournir votre jeton d'utilisateur, il va être utilisé pour accéder à votre travailspace:

Toujours dans ce menu, vous avez un bouton "Réinstaller pour travaillerspace", que vous pouvez utiliser si vous avez des erreurs avec votre bot, il va être réinstallé, après cliappuyant sur ce bouton.
Notre dernière chose à faire est d'ajouter notre chatbot dans votre travailspace. Si vous avez déjà créé une chaîne, vous pouvez passer à cette étape maintenant : "Ajouter un bot à votre chaîne"

Si vous n'avez pas encore lancé de chat, suivez ces quelques étapes :
Recherchez le menu contextuel "Ajouter une chaîne" et sélectionnez-y le bouton "Créer une nouvelle chaîne":


Ensuite, sélectionnez un nom pour votre chaîne et remplissez éventuellement la barre de description.

 

Ajouter un bot à votre chaîne

Si vous voulez ajouter un bot à votre chat, vous devez placer votre curseur sur le nom du chat et click sur le menu contextuel "Afficher les détails de la chaîne":


Passez ensuite au menu "Intégration" et click sur le bouton "Ajouter une application":

Ensuite, recherchez votre application par son nom ou faites simplement défiler vers le bas pour la trouver. Dans notre cas "CoinBot":


Après toutes nos actions, le bot sera lancé dans notre chat :

 

Python installation

Nous devons mettre en place Python, afin que nous puissions installer et gérer notre Slack robots.
Tout d'abord, installons python v.3 et les outils d'aide correspondants. Nous allons le faire sur notre VM avec Ubuntu v.20.04 déployé dessus.
Dans un premier temps, Python v.3 est déjà préinstallé sur tous Ubuntu serveurs version 20.04, mais pour nous convaincre que toutes les mises à jour sont disponibles, nous devons télécharger toutes les mises à jour précédentes sur notre système à l'aide de ces commandes :

mise à jour de sudo apt
sudo apt -y mise à niveau

Après cela, nous pouvons voir quelle version nous avons :

python3-V

La réponse ressemblera à ceci :

Python 3.8.2

Ensuite, nous devrions télécharger l'outil pip, qui nous donnera accès à la gestion des packages :

sudo apt install -y python3 points

Après cela, nous allons déployer l'environnement virtuel (VE):

python3 -m venv ~/.venvs/slackbot

Après cela, nous devons l'activer:

source ~/.venvs/slackbot/bin/activer

Maintenant notre terminal entre parenthèses affichera notre environnement virtuel, ça devrait ressembler à ça :

(slackbot) racine@Ubuntu-Bot-Python: ~ #

Ensuite, avec l'outil pip, nous allons installer d'importants Python Composants:

installer pip slackclient slaévénementsapi Flacon

Explicationnation: slackclient et slaévénementsapi - des outils qui permettent d'utiliser le Slack API Plus facile. Flacon - microweb framework qui va être utilisé pour déployer notre bot.
Après avoir mis en place Python, nous pouvons configurer notre bot.

Création d'une classe pour Slamessages ckbot dans Python

Slack utilise des données JSON spécialement formatées pour envoyer des messages.
Lançons un Python classe qui simule un tirage au sort.
Rappel - nous faisons toutes les actions dans un environnement virtuel. Dans notre cas, l'environnement virtuel est root@Ubuntu-Bot-Python: ~ #
Tout d'abord, à l'aide de la commande touch, créez un fichier appelé coinbot.py :

toucher coinbot.py

Ouvrez ensuite ce fichier avec l'éditeur nano, vous pouvez utiliser n'importe quel autre éditeur :

nanocoinbot.py

Ajoutez le contenu suivant à notre fichier :

# importer la bibliothèque aléatoire pour nous aider à générer les nombres aléatoires
importer au hasard

# Créer la classe CoinBot
classe CoinBot :
# Crée une constante qui contient le texte par défaut du message
COIN_BLOC = {
"type": "section",
"texte": {
"type": "mrkdwn",
"texte": (
"Ok ! Lancer une pièce...\n\n"
),
},
}
& # Le constructeur de la classe. Il prend le nom du canal comme a
# anrameter puis le définit comme une variable d'instance
def __init__(soi, canal):
self.canal = canal
# Générez un nombre aléatoire pour simuler le lancer d'une pièce. Retournez ensuite le
# fabriqué slack payload avec le message coin flip.
def _flip_coin(soi) :
rand_int = aléatoire.randint(0,1)
si rand_int == 0 :
résultats = "Têtes"
autre:
résultats = "Tails"
text = f"Le résultat est {résultats}"
return {"type": "section", "text": {"type": "mrkdwn", "text": text}},
# Créez et renvoyez l'intégralité de la charge utile du message sous forme de dictionnaire.
def get_message_payload(self):
revenir {
"canal": self.channel,
"blocs": [
soi.COIN_BLOCK,
*self._flip_coin(),
],
}
Ensuite, enregistrons et fermons notre fichier avec un raccourci clavier.
Maintenant, notre bot peut envoyer des messages et vous pouvez l'ajouter à votre travailspace.

Testez les messages de notre Slackbot

Vérifions maintenant que notre classe crée la bonne charge.
Créez un fichier appelé coinbot_test.py :

nano coinbot_test.py

Ajoutez ensuite le contenu suivant au fichier créé
Important : Assurez-vous de changer le nom du serveur pour le vôtre dans coin_bot = coinbot("#YOUR_CHANNEL_HERE").

de slack importer WebClient
de coinbot importer CoinBot
importer os

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

# Obtenez un nouveau CoinBot
coin_bot = CoinBot("#VOTRE_CANAL_ICI")

# Obtenir la charge utile du message d'intégration
message = coin_bot.get_message_payload()

# Postez le message d'intégration dans Slack
slack_web_client.chat_postMessage(**message)
Enregistrez et fermez ce fichier.
Avant d'exécuter le test, vous devez exporter votre jeton, qui est répertorié sur le Slak API:

Exportez maintenant votre jeton :

Exporter SLACK_TOKEN="Votre jeton"

Nous pouvons maintenant tester notre bot. Exécutez le script suivant dans votre terminal :

python coinbot_test.py

Après cela, un message concernant un tirage au sort vous sera envoyé dans le canal sur lequel vous avez installé votre application. Assurez-vous que votre bot vous a bien donné pile ou face.

Créer une application Flask à exécuter Slackbot

Maintenant que votre bot peut lancer une pièce, créer et envoyer des messages, nous allons déployer Flask, qui traitera les messages et leur donnera une sorte de réaction si leur contenu correspond à certains critères.
Tout d'abord, configurons le firewall paramètres pour autoriser le trafic sur le port 3000 :

sudo ufw autoriser 3000

Vérifiez maintenant le statut de ufw :

statut de sudo ufw

Vous devriez voir une sortie semblable à celle-ci :

Sortie
statut : actif

À l'action de
-- ------ ----
OuvertSSH    AUTORISER n'importe où
3000 AUTORISER n'importe où
OuvertSSH (v6) AUTORISER n'importe où (v6)
3000 (v6) AUTORISER n'importe où (v6)

Nous allons ensuite créer un fichier pour notre application Flask.
Appelons ce fichier app.py :

toucher app.py

Ensuite, ouvrez ce fichier avec l'un des éditeurs. Nous utiliserons nano :

application nano.py

Ajoutons le contenu suivant à notre fichier app.py :

importer os
journalisation d'importation
à partir du flacon import Flacon
de slack importer WebClient
de slaévénementsapi importer SlackEventAdapter
de coinbot importer CoinBot

# Initialiser une application Flask pour héberger l'adaptateur d'événements
app = Flacon (__ nom__)
# Créez un adaptateur d'événements et enregistrez-le sur un point de terminaison dans le slack app pour l'injection d'événements.
slack_events_adapter = SlackEventAdapter(os.environ.get("SLACK_EVENTS_TOKEN"), "/slack/events", appli)

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

def flip_coin(canal):
""" Fabriquez le CoinBot, lancez la pièce et envoyez le message à la chaîne
"" "
# Créer un nouveau CoinBot
coin_bot = CoinBot(canal)

# Obtenir la charge utile du message d'intégration
message = coin_bot.get_message_payload()

# Postez le message d'intégration dans Slack
slack_web_client.chat_postMessage(**message)

# Lorsqu'un événement 'message' est détecté par l'adaptateur d'événements, transférez cette charge utile
# à cette fonction.
@slack_events_adapter.on("message")
def message (charge utile):
"""Analysez l'événement de message, et si la chaîne d'activation est dans le texte,
simuler un tirage au sort et envoyer le résultat.
"" "

# Obtenir les données d'événement à partir de la charge utile
événement = charge utile.get("événement", {})

# Obtenez le texte de l'événement qui s'est produit
texte = événement.get("texte")

# Vérifiez et voyez si la phrase d'activation était dans le texte du message.
# Si oui, exécutez le code pour lancer une pièce.
si "hey sammy, lancez une pièce" dans text.lower() :
# Étant donné que la phrase d'activation a été rencontrée, obtenez l'ID de canal que l'événement
# a été exécuté le
channel_id = event.get("canal")

# Exécutez la fonction flip_coin et envoyez les résultats de
# lancer une pièce sur le canal
retourner flip_coin(channel_id)

if __name__ == "__main__":
# Créer l'objet de journalisation
enregistreur = journalisation.getLogger()

# Définissez le niveau de journalisation sur DEBUG. Cela augmentera la verbosité des messages de journalisation
logger.setLevel(logging.DEBUG)

# Ajoutez le StreamHandler en tant que gestionnaire de journalisation
logger.addHandler(logging.StreamHandler())

# Exécutez notre application sur notre adresse IP externe sur le port 3000 au lieu de
# l'exécutant sur localhost, ce qui est traditionnel pour le développement.
app.run(hôte='0.0.0.0', port=3000)
Enregistrez et fermez le fichier.
Explicationnation : Nous ajoutons les déclarations suivantes car :

importer os - nous utiliserons pour accéder aux variables d'environnement

journalisation d'importation - nous utiliserons pour enregistrer les événements de l'application.

à partir du flacon import Flacon - nous allons utiliser pour créer une application Flask

de slack importer WebClient - nous utiliserons pour envoyer des messages via Slack

de slaévénementsapi importer SlackEventAdapter - nous utiliserons pour recevoir des événements de Slack et traitez-les

de coinbot importer CoinBot - nous utiliserons pour instancier votre CoinBot et générer la charge utile du message.

Lancer votre application Flask

Après tout, notre application Flask est prête à fonctionner avec l'application, testons-la.
Ajoutons d'abord notre Slaapplication ckbot.
Sur le Slack API page, accédez à la section "Basik information" et faites défiler jusqu'à la sous-section "App Credentials":

Click sur "Show" comme indiqué dans la capture d'écran, puis copiez le secret de signature.
Maintenant, nous exportons notre signature secret avec cette commande :

Exporter SLACK_EVENTS_TOKEN="MY_SIGNING_SECRET_TOKEN"

Nous pouvons maintenant tester notre application.
Démarrez l'application Flask en utilisant ce code :

python3 app.py

Exemple de sortie :

(slackbot) [19:37:05] danial : CoinBot$ python app.py
* Serving Flask app "app" (chargement paresseux)
* Environnement : fabrication
AVERTISSEMENT : Il s'agit d'un serveur de développement. Ne l'utilisez pas dans un déploiement de production.
Utilisez plutôt un serveur WSGI de production.
* Mode débogage : désactivé
* Fonctionne sur http://0.0.0.0:3000/ (Appuyez sur CTRL+C pour quitter)

Terminons maintenant la configuration de notre application dans le Slack interface utilisateur.
Premièrement, nous allons fournir à notre application le droit de lire, de traiter les activités dans le chat et d'y répondre.
Dans le menu de l'interface utilisateur, sélectionnez la section « Abonnements aux événements » et basculez l'interrupteur à bascule « Activer les événements » sur la position « Activé », comme indiqué dans la capture d'écran :

 

Ensuite, ouvrez le menu "S'abonner aux événements du bot" et sélectionnez canaux.de.messages :

 

Après nos actions, votre application in futere aura la possibilité de traiter les messages.
Une fois les modifications enregistrées, vous aurez un menu contextuel jaune en haut de l'écran vous informant que vous devez réinstaller l'application afin d'appliquer les modifications suivantes.
CliCliquez sur le lien de réinstallation dans cette bannière pour réinstaller l'application :


Vous aurez alors un menu contextuel avec les nouvelles autorisations appliquées. Si vous êtes d'accord avec tout, clicochez "Autoriser":


Après tout, notre bot sera prêt. Accédez à votre chat et envoyez un message avec la phrase "Hey Danny, lancez une pièce".
Votre va vérifier votre chance et vous montrer le résultat. Félicitations, nous avons lancé notre bot !