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.
Python 3.6.1 slackbot 0.5.3
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.
Wenn Sie auf dem Spielplatzkanal sprechen
Wenn Sie auf einem anderen Kanal als dem Spielplatzkanal sprechen
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.
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.
Limit slackbot responce to certain channel · Issue #152 · lins05/slackbot · GitHub Wiedereinführung in Python-Dekoratoren ~ Lernen wir Dekoratoren nach Typ ~ --Qiita
Recommended Posts