Eine generische Implementierung des Bots für Slacks ausgehende Webhooks in Python "djehuty/[djehuty-slack](https://github.com/xica/ djehuty-slack) "wurde veröffentlicht, also werde ich es teilen.
Ich wollte ein internes, von Python implementiertes serverseitiges Modul direkt vom Bot aus verwenden.
Bevor Sie einen Bot vorbereiten, müssen Sie zunächst Einstellungen für die Interaktion mit dem Bot auf der Slack-Seite vornehmen. Eine der Integrationen von Slack ist "Outgoing Webhooks", ein Mechanismus zum POST-Anfordern von Eingaben, beginnend mit einem bestimmten Wort zu einer bestimmten URL. djehuty nutzt diese Integration.
In den Einstellungen für ausgehende Webhooks können Sie den Kanal, das Auslösewort usw. festlegen, um diese Integration zu aktivieren. Wenn Sie ein Slack-Konto haben, können Sie wahrscheinlich hier eine Integration hinzufügen (https://slack.com/services/new).
Ausgehende Webhooks befinden sich am Ende der Liste.
djehuty erkennt die erste ASCII-Zeichenfolge, die nach dem hier festgelegten Triggerwort als Befehlszeile gefunden wurde. Wenn Sie beispielsweise im Triggerwort "mybot:" setzen, dann in Slack
mybot:yo -g hello
Wenn Sie usw. eingeben, erkennt djehuty dies als Befehlszeile "yo -g hallo". Für die URL können Sie die URL des Anwendungsservers festlegen, den Sie mit später hinzugefügtem '/ slack' vorbereitet haben.
Sie können das Token auch auf diesem Bildschirm sehen, um anzuzeigen, dass es von einer Anfrage Ihres Slack-Kontos stammt. Da die Implementierung von djehuty-slack auch dieses Token und die Anforderung überprüft, ist es gut, das Token hier im Voraus zu überprüfen.
djehuty
djehuty ist ein Python-Paket, mit dessen Hilfe Anwendungsserver implementiert werden können, die auf die Unterstützung sogenannter Web-Hooks spezialisiert sind. Derzeit hat es eine sehr geringe Funktionalität, aber als Feature,
Djehuty-slack ist bereits als Dienst implementiert. Wenn Sie dies verwenden, können Sie problemlos einen Bot erstellen, der eine Antwort zurückgibt, die den ausgehenden Webhooks von Slack entspricht. Kann in vorbereitet werden.
Der Paketname wurde basierend auf der Pyramide implementiert und wir haben beschlossen, ihn zu einem ägyptischen (mythischen) Namen [thoth] zu machen (http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%) BC% E3% 83% 88) wurde am wahrscheinlichsten implementiert, aber da das Paket mit demselben Namen bereits in PyPI registriert war, war es ein anderer Name, djehuty.
Grundsätzlich wird dies nicht empfohlen, da die Dokumente nicht verfügbar sind.
Derzeit implementiert djehuty ein Pyramidengerüst, sodass Sie problemlos ein Projekt erstellen und es als Pyramiden-App starten können.
$ pip install djehuty
$ pcreate -s djehuty_server PROJECT_NAME
$ cd PROJECT_NAME
...
$ pserve development.ini
Um als Slack-Bot ausgeführt zu werden, müssen die entsprechenden Dienst- und Umgebungsvariablen festgelegt werden, wie in der README-Datei von djehuty und djehuty-slack beschrieben.
Die vom Gerüst von djehuty generierten Dateien enthalten auch Einstellungen für Heroku (Anforderungen.txt, Procfile, INI-Datei für Heroku). Dies ist also Ihre eigene unter der Annahme, dass Sie die SSL-Unterstützung selbst durchführen. Es ist einfacher als die Umgebung vorzubereiten.
$ pip install djehuty
$ pcreate -s djehuty_server PROJECT_NAME
$ cd PROJECT_NAME
$ heroku create
...
$ git push heroku master
Ich werde die Bereitstellung in Heroku und das Festlegen von Umgebungsvariablen weglassen.
Das djehuty-sample Repository für das Sample ist der [Heroku Button](https://blog.heroku.com/archives/2014/8/7/heroku- button) wird unterstützt und djehuty-sample hat bereits djehuty-slack als zu verwendenden Dienst angegeben. Wenn Sie also ein Heroku-Konto haben, können Sie per Knopfdruck einen Chat-Bot-Server für Slack vorbereiten. Wenn Sie jedoch bedenken, dass Sie den Code später bearbeiten, um Befehle usw. hinzuzufügen, ist es besser, vor der Bereitstellung einmal zu gabeln.
Bei der Bereitstellung mit Heroku Button werden Sie aufgefordert, Umgebungsvariablen für djehuty-slack festzulegen. Legen Sie daher hier das Token fest, das in den Einstellungen für ausgehende Webhooks bestätigt werden kann.
Unabhängig davon, mit welcher Methode Sie den Server vorbereiten, müssen Sie die Server-URL angeben, die mit '/ slack' zur URL-Einstellung von Outgoing Webhooks hinzugefügt wurde.
Wenn der Slack eingerichtet und der Djehuty-Server korrekt eingerichtet ist, sollte der Befehl funktionieren. Wenn Sie djehuty-sample ausprobiert haben, sollten der Befehl yo und der Befehl lgtm aktiviert sein. Geben Sie daher auf dem in den Einstellungen angegebenen Kanal Folgendes ein, und die Zeichenfolge yo wird zurückgegeben [LGTM]( Wenn das Bild von http://www.lgtm.in/) zufällig zurückgegeben wird, ist es erfolgreich.
YOUR_TRIGGER_WORD yo
YOUR_TRIGGER_WORD lgtm
Unabhängig davon, mit welcher Methode Sie den Server vorbereiten, steht das Python-Paket für den Anwendungsserver zur Verfügung, sodass Sie Bot-Funktionen hinzufügen können, indem Sie darin Befehle implementieren.
Die Befehlsimplementierung erbt die von djehuty bereitgestellte Klasse und implementiert die Befehlsklasse setuptools entry_points. Es wird durch Registrierung in -and-Plugins aktiviert.
djehuty.command.Command
Eine Klasse namens djehuty.command.Command ist in djehuty definiert. djehuty verwendet für seine Befehlszeilenverwaltungsfunktion ein Framework namens cliff, und djehuty.command.Command wird als fast identisch mit cliff.command.Command angesehen. Sie können. Grundsätzlich folgt die Implementierung der Befehlsklasse der Dokumentation von cliff.
Da der tatsächliche Befehlsname durch Registrieren in den später beschriebenen Eintrittspunkten angegeben wird, muss der Name der von Ihnen zu implementierenden Klasse nicht identisch sein.
Es wird erwartet, dass die konkrete Klasse von djehuty.command.Command eine Methode namens take_action implementiert, und djehuty verwendet den von dieser Methode zurückgegebenen Wert als Antwortnachricht an Slack (dies erwartet Cliff). Anders). Die Implementierung, die die Zeichenfolge "yo" mit einer Erwähnung an den Benutzer zurückgibt, der sie eingegeben hat, lautet beispielsweise wie folgt.
from djehuty.command import Command
class Yo(Command):
'''echo yo''' #Cliff verwendet Klassendokumentation als Hilfe
def take_action(self, parsed_args):
return '@{} yo'.format(self.app_args.user)
parsed_args wird später beschrieben. self.app_args enthält allgemeine Argumente für Dienste, im Fall von Slack den Namen des in user eingegebenen Benutzers und den Namen des in room eingegebenen Kanals.
Grundsätzlich ist dies die einzige Befehlsimplementierung.
Befehle werden von Argumenten begleitet, damit ihnen dynamisch ein Wert zugewiesen werden kann. djehuty (oder cliff) unterstützt auch die Implementierung von Argumenten, sodass Sie Ihren eigenen Befehlen deklarativ Argumente hinzufügen können.
from djehuty.command import Command
class Yo(Command):
'''echo yo'''
def get_parser(self, prog_name):
parser = Command.get_parser(self, prog_name)
parser.add_argument('-g', '--greeting',
default='yo',
help='greeting message')
return parser
def take_action(self, parsed_args):
return '@{} {}'.format(self.app_args.user, parsed_args.greeting)
Wenn Sie eine Methode namens get_parser in der konkreten Klasse von djehuty.command.Command implementieren, wird die Eingabezeichenfolge entsprechend der Implementierung ausgewertet und das Argument als parsed_args an take_action übergeben und kann verwendet werden.
get_parser ist im Grunde
Es ist in Form von. Da Parser eine Instanz von [argparse] ist (http://ja.pymotw.com/2/argparse/).ArgumentParser und parsed_args ist argparse.Namespace. Informationen zur Argumentdefinition und zum Abrufen des Werts finden Sie in der argparse-Dokumentation. Ding. Ich denke, Sie können eine grundlegende Vorstellung davon bekommen, wie man es mit nur dem obigen Code verwendet, aber es gibt viele fortgeschrittenere Möglichkeiten, es zu definieren.
djehuty.command.Command wird von djehuty erkannt und aktiviert, indem es wie oben beschrieben im entry_points-Mechanismus von setuptools registriert wird. Bei der Registrierung wird die Beschreibung einfach zu setup.py hinzugefügt. Wenn Sie also die Befehle Misawa und Hartman in command.py in einem Paket namens mydjehuty implementieren, lautet das Argument entry_points für das Setup in mydjehuty / setup.py: so werden.
setup(
name='mydjehuty',
# ...
entry_points={
'djehuty.commands': [
'misawa = mydjehuty.commands:Misawa',
'hartman = mydjehuty.commands:Hartman',
],
},
)
Als Wert der Liste mit 'jehuty.commands' als Schlüssel
'Befehlsname bei tatsächlicher Verwendung=Modul implementiert(Dateiname):Klassenname implementiert'
Sie müssen nur die Zeichenfolge hinzufügen.
Durch die Installation von djehuty werden nicht nur der Framework-Code und das Pyramidengerüst installiert, sondern auch eine CLI namens djehuty. Da dies eine CLI ist, die nur die POST-Anforderungs- und Antwortteile übernimmt, kann das Verhalten des implementierten Befehls auf der Konsole emuliert werden.
$ djehuty yo
yo
Sie müssen jedoch explizit die Argumente angeben, die für Dienste gelten, wie sie in Diensten wie djehuty-slack implementiert sind.
$ djehuty -u kiri yo
@kiri yo
Es ist möglich, ein Python-Paket zu implementieren, das nur Befehle sowie innerhalb Ihres eigenen Anwendungsservers implementiert, und zu diesem Zweck wird auch ein Gerüst bereitgestellt.
$ pcreate -s djehuty_command YOUR_COMMAND_PROJECT_NAME
Wenn die Implementierung mit Funktionen veröffentlicht werden kann, die nicht von einer bestimmten Organisation abhängen, kann sie mit dieser Funktion auch als Befehlspaket veröffentlicht werden.
Wenn Sie das Paket mit dem implementierten Befehl auf dem Anwendungsserver bereitstellen und den implementierten Befehl von Slack aus ausführen können, ist dies erfolgreich. Implementieren Sie Ihre Lieblingsfunktionen kostenlos in Python für ein gutes Slack-Leben.
Recommended Posts