Errbot: les bases du chatbot Python

Aperçu

Errbot est un chatbot Python.

Cette page résume ce que j'ai appris en créant un plug-in Errbot (robot auto-créé) Le contenu est à peu près conforme au document officiel Plugin Development. Cela devrait être facile à comprendre si vous avez une connaissance de base de Python.

Veuillez vous référer à Article précédent pour la construction de l'environnement.

Connaissances de base avant la création

Lire le répertoire local

Fondamentalement, le plugin dans Errbot Il est géré via git par la commande intégrée ! Repos.

Cependant, il est difficile de télécharger la source dans le référentiel git pendant le développement. Chargez le plugin depuis votre répertoire local.

Dans le config.py généré par ʻerrbot --init Il y a un élément de réglage appeléBOT_EXTRA_PLUGIN_DIR`. Entrez ici le chemin du répertoire que vous souhaitez utiliser comme répertoire local.

Cependant, le répertoire plugins doit être spécifié par défaut. Vous devriez pouvoir l'utiliser tel quel.

Exécuter en mode test

Pour déboguer le bot sans se connecter à d'autres serveurs Vous pouvez exécuter en mode test en spécifiant --text ou -T au démarrage. C'est «texte» au lieu de «test».

Démarrer en mode test


$ errbot --text

fichier de configuration du plugin

Les détails seront décrits plus tard.

Hello, World!

Créer un fichier

Dans le répertoire spécifié par BOT_EXTRA_PLUGIN_DIR Créez le répertoire HelloWorld et ses fichiers de configuration.

plugins/           
|~err-example/     
| |-example.plug   
| `-example.py     
`~HelloWorld/      
  |-helloworld.plug
  `-helloworld.py  

Dans helloworld.py, écrivez comme suit en fonction de l'exemple.

helloworld.py


from errbot import BotPlugin, botcmd

class HelloWorld(BotPlugin):
    """Example 'Hello, world!' plugin for Errbot"""

    @botcmd
    def hello(self, msg, args):
        """Say hello to the world"""
        return "Hello, world!"

Description du code

Tout d'abord, avec la classe qui hérite du plugin Importez le décorateur pour créer la fonction correspondant à la commande.

helloworld.py


from errbot import BotPlugin, botcmd

Héritez de la classe BotPlugin et générez une classe pour le plugin. La partie docstring s'affiche lorsque vous utilisez la commande ! Help.

helloworld.py


class HelloWorld(BotPlugin):
    """Example 'Hello, world!' plugin for Errbot"""

Ensuite, écrivez la fonction et décorez-la avec @ botcmd. Le nom de la fonction devient le nom de la commande et le bot acceptera la commande ! Hello. La docstring de la fonction est également affichée lors de l'utilisation de la commande ! Help.

helloworld.py


@botcmd
def hello(self, msg, args):
    """Say hello to the world"""
    return "Hello, world!"

La fonction hello prend plusieurs arguments, msg et ʻargs`.

Par exemple, lorsque vous entrez ! Hello hoge moge, les valeurs suivantes sont stockées.

Les deux sont écrits comme des chaînes, mais msg est Cela ressemble à une instance de la classe ʻerrbot.backends.base.Message`.

métadonnées du plugin

Dans helloworld.plug, écrivez comme suit en fonction de l'exemple.

[Core]
Name = HelloWorld
Module = helloworld

[Python]
Version = 2+

[Documentation]
Description = Example "Hello, world!" plugin

Exécutez le bot créé

Avec la description ci-dessus, le bot peut être exécuté.

Exécuter la commande bonjour


 >>> !hello
Hello, World!

Application en création de commandes

Division automatique des arguments

Des arguments peuvent être spécifiés pour le décorateur botcmd. En spécifiant split_args_with comme argument de mot-clé Vous pouvez recevoir les variables ʻargs` ci-dessus sous forme de liste.

Argument de division


@botcmd(split_args_with=None)
def action(self, mess, args):
    # !Lorsque vous tapez action un deux trois
    #args['one', 'two', 'three']Recevoir

Spécifier split_args_with se comporte comme str.split () «Aucun» indique un espace blanc.

Sous-commande

Si _ est utilisé dans le nom de la fonction, il sera traité comme une sous-commande après _. Ceci est utile pour le regroupement de commandes.

Sous-commande


@botcmd
def basket_add(self, mess, args):
    # !Prend en charge le panier d'entrée ajouter
    pass

@botcmd
def basket_remove(self, mess, args):
    # !Prend en charge le retrait du panier d'entrée
    pass

Pour le moment, «ajouter» et «supprimer» font simplement partie de la commande. Il ne semble pas être stocké comme argument dans ʻargs`.

Diviser les arguments avec argparse

En utilisant le décorateur ʻarg_botcmdau lieu debotcmd` Vous pouvez définir les arguments au format argparse. Plusieurs décorateurs peuvent être spécifiés en les superposant.

Spécifier des arguments avec argparse


@arg_botcmd('first_name', type=str)
@arg_botcmd('--last-name', dest='last_name', type=str)
@arg_botcmd('--favorite', dest='favorite_number', type=int, default=42)
def hello(self, mess, first_name=None, last_name=None, favorite_number=None):
    # !hello Err --last-Lorsque vous tapez le nom Bot
    # first_nom est'Err'
    # last_nom est'Bot'
    # favorite_le nombre est 42 (valeur par défaut)

Résumé

J'ai écrit sur la partie de base de la création d'un plugin. Parce que l'argument peut être reçu librement dans une certaine mesure Tout ce que vous avez à faire est d'écrire le processus que vous souhaitez exécuter en Python.

De plus, utilisation de commandes utilisant des expressions régulières et utilisation de modèles, etc. Il semble avoir de nombreuses fonctions bien qu'il soit simple. Si vous êtes intéressé, veuillez lire la Documentation.

Recommended Posts

Errbot: les bases du chatbot Python
Les bases de Python ⑤
Les bases de Python
Les bases de Python ④
Les bases de Python ③
Les bases de Python
Les bases de Python
Les bases de Python
Les bases de Python ③
Les bases de Python ②
Les bases de Python ②
bases de python: liste
Mémorandum de base Python
Les bases de #Python (#matplotlib)
Principes de base de Python CGI
bases de python: dictionnaire
Les bases de Python ①
Bases de python ①
bases de la tranche de python
# Principes de base de Python (portée)
Les bases de #Python (#Numpy 1/2)
Les bases de #Python (#Numpy 2/2)
# Bases de Python (fonctions)
principes de base des tableaux python
Principes de base du profilage Python
Principes de base de Python #Numpy
bases de python: fonctions
Les bases de #Python (classe)
Résumé des bases de Python
Bases de Python ② pour déclaration
Python: apprentissage non supervisé: principes de base
Principes de base du grattage Python
Création de chatbot Slack Python
#Python DeepLearning Basics (Mathématiques 1/4)
Principes de base de Python: Socket, Dnspython
# 4 [python] Bases des fonctions
Bases de python: sortie
python: principes de base de l'utilisation de scikit-learn ①
bases de python: conditions et itérations
Paiza Python Primer 4: Notions de base sur les listes
Implémenter le bot de discussion Slack en Python
Principes de base de Python x SIG (1)
Créer un chatbot Slack avec Errbot
Principes de base de Python x SIG (3)
Paiza Python Primer 5: Principes de base des dictionnaires
Bases de SNS Python faites avec Flask
Python
Premiers pas avec Python Bases de Python
Revue des bases de Python (FizzBuzz)
Principes de base de Python x SIG (partie 2)
5 façons de créer un chatbot Python
À propos de la liste de base des bases de Python
(python) Principes de base du chaînage de la bibliothèque d'apprentissage en profondeur
Apprenez les bases de Python ① Débutants élémentaires
Bases du traitement d'images binarisées par Python
Python: principes de base de la reconnaissance d'image à l'aide de CNN
Bases statistiques et Python, graphisme, etc. (mémo)
[Python3] Comprendre les bases de Beautiful Soup
Apprenez les bases en touchant les variables python
[JAWS-UG CLI] Explication du plan Lambda: principes de base de Python2.7