Faire en sorte que slackbot ne réagisse que sur des canaux spécifiques (slackbot Python)

introduction

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.

Environnement de vérification

Python 3.6.1 slackbot 0.5.3

Spécifier le canal pour exécuter le traitement par le décorateur

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 other.png

Points à noter

É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 conclusion

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.

Page référencée

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

Faire en sorte que slackbot ne réagisse que sur des canaux spécifiques (slackbot Python)
[Python] Rendre pip disponible sur macOS
Comment faire exécuter un thread de processus uniquement sur un cœur de processeur spécifique
Rendre DHT11 disponible avec Raspeye + python (Remarque)
Installez Python 3 sur MacOS Catalina (avec Homebrew uniquement)
Faire fonctionner Python avec jhbuild sous OSX
Python sur Windows
python sur mac
Python sur Windbg
Créez un Slackbot simple avec un bouton interactif en python
Suite ・ J'ai essayé de créer Slackbot après avoir étudié Python3
Faire un point d'arrêt sur la couche c avec python
Laissez Python segfo sur une ligne sans utiliser de ctypes
Extraire uniquement les éléments qui répondent à des conditions spécifiques en Python