Implementieren Sie den Slack Chat Bot in Python

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.

Mit Hubot?

Ich wollte ein internes, von Python implementiertes serverseitiges Modul direkt vom Bot aus verwenden.

Richten Sie die Outgoing Webhooks-Integration von Slack ein

Integration hinzufügen

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.

slackOutgoing.png

Integrationseinstellungen

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.

slackIntegrationSettings.png

Überprüfen Sie das ausgehende Webhooks-Token

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.

Bereiten Sie einen Djehuty-Server vor

Steh zu dir selbst

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.

Lauf mit Heroku

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.

Verwenden Sie den Djehuty Sample Heroku Button

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.

Versuchen Sie es mit Bot

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

Implementieren Sie den Befehl

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.

Implementierung von Befehlsinhalten

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.

Implementierung von Befehlsargumenten

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.

Befehlsregistrierung

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.

Bedienung auf der Konsole

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

Nur-Befehl-Paket

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.

das Ende

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

Implementieren Sie den Slack Chat Bot in Python
Implementieren Sie XENO mit Python
Slack Chatbot Erstellung Python
Implementieren Sie sum in Python
Implementieren Sie Traceroute in Python 3
Implementieren Sie Naive Bayes in Python 3.3
Implementieren Sie alte Chiffren in Python
Implementieren Sie Redis Mutex in Python
Implementieren Sie die Erweiterung in Python
Implementieren Sie schnelles RPC in Python
Post an Slack in Python
Implementieren Sie das Stacking-Lernen in Python [Kaggle]
Implementieren Sie das Singleton-Muster in Python
Implementieren Sie die REST-API schnell in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Ich habe versucht, PLSA in Python zu implementieren
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Implementieren Sie __eq__ usw. generisch in der Python-Klasse
Ich habe versucht, Permutation in Python zu implementieren
Metaanalyse in Python
Unittest in Python
Implementieren Sie gemeinsam statistische Hypothesentests in Python
Ich habe versucht, PLSA in Python 2 zu implementieren
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
Melden Sie sich mit Anforderungen in Python bei Slack an
nCr in Python
Plink in Python
Ich habe versucht, ADALINE in Python zu implementieren
Konstante in Python
Entwicklung eines Slack Bot mit Python mit chat.postMessage
Ich habe versucht, PPO in Python zu implementieren
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python