J'exploite mon propre bot en utilisant slackbot sur Slack. Les canaux sont créés pour chaque objectif et chaque plug-in de bot est exécuté sur son propre canal.
Cependant, je reçois souvent des erreurs humaines qui exécutent des plug-ins qui ne sont pas destinés au canal, et je voulais faire quelque chose à ce sujet.
Par conséquent, nous avons implémenté un mécanisme dans le bot qui n'exécute le traitement que sur un canal spécifique.
Python 3.6.1 slackbot 0.5.3
Créez un décorateur qui prend comme argument les canaux que vous souhaitez autoriser.
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
Dans le code ci-dessus, l'argument peut être le nom du canal ou l'ID du canal.
Appliquez ensuite le décorateur à la fonction que vous souhaitez exécuter uniquement sur un canal spécifique. J'ai mis le code ci-dessus dans un fichier appelé ʻutils.py`.
from slackbot.bot import listen_to
from .utils import in_channel
@listen_to("^fort$")
@in_channel("playground")
def tsuyoi(message):
message.reply("Pas fort:white_frowning_face:")
Dans le code ci-dessus, la fonction tsuyoi
est définie pour s'exécuter uniquement sur le canal ** aire de jeux **.
--Lorsque vous parlez sur un canal autre que le canal du terrain de jeu
Écrivez @ in_channel
** ci-dessous ** sous le décorateur slackbot ( @ listen_to
dans l'exemple ci-dessus).
Si l'ordre est inversé, @ listen_to
sera appliqué en premier. Dans ce cas, j'ai confirmé que le message sera publié.
En spécifiant le canal avec le décorateur, nous avons pu éviter l'erreur d'exécuter le plug-in sur un canal avec un but différent.
Le défi est que vous ne pouvez spécifier qu'un seul canal (ce qui convient parfaitement à mon opération). Si vous souhaitez spécifier plusieurs canaux, vous devez modifier un peu le code ci-dessus.
Limit slackbot responce to certain channel · Issue #152 · lins05/slackbot · GitHub Réintroduction aux décorateurs Python ~ Apprenons les décorateurs par type ~ --Qiita
Recommended Posts