Slackbot nur auf bestimmte Kanäle reagieren lassen (Python Slackbot)

Einführung

Ich betreibe meinen eigenen Bot mit slackbot auf Slack. Kanäle werden für jeden Zweck erstellt und jedes Bot-Plug-In wird auf einem eigenen Kanal ausgeführt.

Ich erhalte jedoch häufig menschliche Fehler, die Plug-Ins ausführen, die nicht für den Kanal bestimmt sind, und ich wollte etwas dagegen tun.

Daher haben wir im Bot einen Mechanismus implementiert, der die Verarbeitung nur auf einem bestimmten Kanal ausführt.

Überprüfungsumgebung

Python 3.6.1 slackbot 0.5.3

Angabe des Kanals, über den die Verarbeitung durch den Dekorateur ausgeführt werden soll

Erstellen Sie einen Dekorateur, der die Kanäle, die Sie zulassen möchten, als Argument verwendet.

import functools


def in_channel(allow_channel):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(message, *args, **kargs):
            channel_id = message.body['channel']
            channel_info = message.channel._client.channels[channel_id]
            channel = channel_info['name']
            if allow_channel not in (channel, channel_id):
                message.reply("Please post in #{}".format(allow_channel))
                return
            return func(message, *args, **kargs)
        return wrapper
    return decorator

Im obigen Code kann das Argument entweder der Kanalname oder die Kanal-ID sein.

Wenden Sie dann den Dekorator auf die Funktion an, die Sie nur auf einem bestimmten Kanal ausführen möchten. Ich habe den obigen Code in eine Datei namens "utils.py" eingefügt.

from slackbot.bot import listen_to

from .utils import in_channel


@listen_to("^stark$")
@in_channel("playground")
def tsuyoi(message):
    message.reply("Nicht stark:white_frowning_face:")

Im obigen Code ist die Funktion "tsuyoi" so eingestellt, dass sie nur auf dem Kanal ** Spielplatz ** ausgeführt wird.

Zu beachtende Punkte

Schreiben Sie "@ in_channel" ** unter ** unter den Slackbot-Dekorator ("@ listen_to" im obigen Beispiel). Wenn die Reihenfolge umgekehrt ist, wird zuerst "@ listen_to" angewendet. In diesem Fall habe ich bestätigt, dass die Nachricht veröffentlicht wird.

abschließend

Durch die Angabe des Kanals mit dem Dekorateur konnten wir den Fehler vermeiden, das Plug-In auf einem Kanal mit einem anderen Zweck auszuführen.

Die Herausforderung besteht darin, dass Sie nur einen Kanal angeben können (was für meinen Betrieb in Ordnung ist). Wenn Sie mehrere Kanäle angeben möchten, müssen Sie den obigen Code ein wenig anpassen.

Referenzierte Seite

Limit slackbot responce to certain channel · Issue #152 · lins05/slackbot · GitHub Wiedereinführung in Python-Dekoratoren ~ Lernen wir Dekoratoren nach Typ ~ --Qiita

Recommended Posts

Slackbot nur auf bestimmte Kanäle reagieren lassen (Python Slackbot)
[Python] Pip unter macOS verfügbar machen
So führen Sie einen Prozessthread nur auf einem bestimmten CPU-Kern aus
Stellen Sie DHT11 mit Raspeye + Python zur Verfügung (Hinweis)
Installieren Sie Python 3 unter MacOS Catalina (nur mit Homebrew)
Lassen Sie Python, das mit jhbuild erstellt wurde, unter OSX funktionieren
Python unter Windows
Python auf Mac
Python auf Windbg
Erstellen Sie einen einfachen Slackbot mit einer interaktiven Schaltfläche in Python
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Machen Sie mit Python einen Haltepunkt auf der c-Ebene
Lassen Sie Python in einer Zeile segfo, ohne ctypes zu verwenden
Extrahieren Sie nur Elemente, die bestimmte Bedingungen in Python erfüllen