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.
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.
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
.plug
: inclut les métadonnées du plugin au format de fichier INI.py
: contient le code Python qui est réellement traité par le pluginLes détails seront décrits plus tard.
Hello, World!
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!"
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`.
msg
: texte entier saisi par l'utilisateurPar exemple, lorsque vous entrez ! Hello hoge moge
, les valeurs suivantes sont stockées.
msg
: '!hello hoge moge'
args
: 'hoge moge'
Les deux sont écrits comme des chaînes, mais msg
est
Cela ressemble à une instance de la classe ʻerrbot.backends.base.Message`.
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
Name
: Le nom du fichier exécutable sans .py
Module
: Module qui est une classe de bot (dans le fichier spécifié par Name
)Version
: Version Python correspondante (détails inconnus)Description
: Détails du plug-in (détails inconnus)Avec la description ci-dessus, le bot peut être exécuté.
Exécuter la commande bonjour
>>> !hello
Hello, World!
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.
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`.
En utilisant le décorateur ʻarg_botcmdau lieu de
botcmd`
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)
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