Errbot ist ein Python-Chatbot.
Diese Seite fasst zusammen, was ich aus dem Erstellen eines Errbot-Plug-Ins (selbst erstellter Bot) gelernt habe. Der Inhalt entspricht in etwa dem offiziellen Dokument Plugin Development. Es sollte leicht zu verstehen sein, wenn Sie Grundkenntnisse in Python haben.
Informationen zum Umgebungsaufbau finden Sie in Vorheriger Artikel.
Grundsätzlich das Plugin in Errbot
Es wird über git mit dem eingebauten Befehl ! Repos
verwaltet.
Es ist jedoch schwierig, die Quelle während der Entwicklung in das Git-Repository hochzuladen. Laden Sie das Plugin aus Ihrem lokalen Verzeichnis.
In der config.py
generiert von errbot --init
Es gibt ein Einstellungselement namens "BOT_EXTRA_PLUGIN_DIR".
Geben Sie hier den Pfad des Verzeichnisses ein, das Sie als lokales Verzeichnis verwenden möchten.
Das Verzeichnis "Plugins" sollte jedoch standardmäßig angegeben werden. Sie sollten es so verwenden können, wie es ist.
So debuggen Sie den Bot, ohne eine Verbindung zu anderen Servern herzustellen Sie können im Testmodus ausgeführt werden, indem Sie beim Start "--text" oder "-T" angeben. Es ist "Text" statt "Test".
Booten Sie im Testmodus
$ errbot --text
.plug
-Datei: Enthält Plugin-Metadaten im INI-Dateiformat.py
-Datei: Enthält den Python-Code, der tatsächlich vom Plugin verarbeitet wirdDetails werden später beschrieben.
Hello, World!
In dem durch BOT_EXTRA_PLUGIN_DIR
angegebenen Verzeichnis
Erstellen Sie das Verzeichnis "HelloWorld" und seine Konfigurationsdateien.
plugins/
|~err-example/
| |-example.plug
| `-example.py
`~HelloWorld/
|-helloworld.plug
`-helloworld.py
Schreiben Sie in helloworld.py wie folgt gemäß dem Beispiel.
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!"
Erstens mit der Klasse, die vom Plugin erbt Importieren Sie den Dekorator, um die dem Befehl entsprechende Funktion zu erstellen.
helloworld.py
from errbot import BotPlugin, botcmd
Erben Sie die BotPlugin-Klasse und generieren Sie eine Klasse für das Plugin.
Der Dokumentstring-Teil wird angezeigt, wenn Sie den Befehl ! Help
verwenden.
helloworld.py
class HelloWorld(BotPlugin):
"""Example 'Hello, world!' plugin for Errbot"""
Als nächstes schreiben Sie die Funktion und dekorieren sie mit @ botcmd
.
Der Funktionsname wird zum Befehlsnamen, und der Bot akzeptiert den Befehl ! Hallo
.
Die Dokumentzeichenfolge in der Funktion wird auch bei Verwendung des Befehls ! Help
angezeigt.
helloworld.py
@botcmd
def hello(self, msg, args):
"""Say hello to the world"""
return "Hello, world!"
Die Funktion "Hallo" akzeptiert mehrere Argumente, "msg" und "args".
msg
: Vom Benutzer eingegebener vollständiger Textargs
: Der vom Benutzer ohne Befehlsteil eingegebene TextWenn Sie beispielsweise "! Hallo hoge moge" eingeben, werden die folgenden Werte gespeichert.
msg
: '!hello hoge moge'
args
: 'hoge moge'
Beide sind genau wie Strings geschrieben, aber "msg" ist Es sieht aus wie eine Instanz der Klasse "errbot.backends.base.Message".
Schreiben Sie in helloworld.plug wie folgt gemäß dem Beispiel.
[Core]
Name = HelloWorld
Module = helloworld
[Python]
Version = 2+
[Documentation]
Description = Example "Hello, world!" plugin
Name
: Der Name der ausführbaren Datei ohne .py
Modul
: Modul, das die Bot-Klasse sein wird (in der durch Name
angegebenen Datei)Version
: Entsprechende Python-Version (Details unbekannt)Description
: Details zum Plug-In (Details unbekannt)Mit der obigen Beschreibung kann der Bot ausgeführt werden.
Führen Sie den Hallo-Befehl aus
>>> !hello
Hello, World!
Für den Dekorator botcmd
können Argumente angegeben werden.
Durch Angabe von "split_args_with" als Schlüsselwortargument
Sie können die oben genannten "args" -Variablen als Liste erhalten.
Geteiltes Argument
@botcmd(split_args_with=None)
def action(self, mess, args):
# !Wenn Sie Aktion eins zwei drei eingeben
#args['one', 'two', 'three']Bekommen
Die Angabe von "split_args_with" verhält sich wie "str.split ()" "Keine" zeigt Leerzeichen an.
Wenn im Funktionsnamen "" verwendet wird, wird dieser nach "" als Unterbefehl behandelt. Dies ist nützlich für die Befehlsgruppierung.
Unterbefehl
@botcmd
def basket_add(self, mess, args):
# !Unterstützt das Hinzufügen des Eingabekorbs
pass
@botcmd
def basket_remove(self, mess, args):
# !Unterstützt das Entfernen des Eingabekorbs
pass
Zu diesem Zeitpunkt sind "Hinzufügen" und "Entfernen" nur ein Teil des Befehls.
Es scheint nicht als Argument in args
gespeichert zu sein.
Verwenden Sie den Dekorator "arg_botcmd" anstelle des "botcmd" Sie können Argumente im Format [argparse] definieren (https://docs.python.org/3/library/argparse.html). Durch Überlappung können mehrere Dekorateure angegeben werden.
Argumente mit argparse angeben
@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-Wenn Sie den Namen Bot eingeben
# first_Name ist'Err'
# last_Name ist'Bot'
# favorite_Nummer ist 42 (Standardwert)
Ich habe über den grundlegenden Teil des Erstellens eines Plugins geschrieben. Weil das Argument bis zu einem gewissen Grad frei aufgenommen werden kann Sie müssen lediglich den Prozess schreiben, den Sie in Python ausführen möchten.
Darüber hinaus die Verwendung von Befehlen mit regulären Ausdrücken und die Verwendung von Vorlagen usw. Es scheint viele Funktionen zu haben, obwohl es einfach ist. Wenn Sie interessiert sind, lesen Sie bitte die Dokumentation.
Recommended Posts