L'histoire de la création d'un Bot qui affiche les membres actifs dans un canal spécifique de Slack avec Python

introduction

Utilisez l'API de slack pour afficher les membres actifs dans un canal spécifique de slack en python en ignorant les mentions spécifiques sur slackbot.

Résultat d'exécution スクリーンショット 2019-12-22 16.31.44.png

C'est comme ça. Puisqu'il contient des informations personnelles, j'en cache une partie. Faisons le! !!

Structure du répertoire

├───.gitignore                                 
├───.env                                
├───requirements.txt             
├───Procfile           
│───plugins
│   └───my_mention.py                          #Ce fichier est principalement utilisé.
│    └───__init__.py
│───run.py                  
│───settings.py           
│───slackbot_settings.py
└───README.md                      

code

my_mention.py

from slackbot.bot import respond_to
import requests
import random
import sys
sys.path.append('..')

import settings
CHANNEL_ID = settings.CHANNEL_ID
SLACK_API_TOKEN = settings.SLACK_API_TOKEN

@respond_to('')
def main(message):
    url = 'https://slack.com/api/channels.info?token={0}&channel={1}&pretty=1'.format(SLACK_API_TOKEN, CHANNEL_ID)
    response = requests.get(url).json()
    channel_info = response["channel"]
    member_id = channel_info["members"]
    member_id_list = [id for id in member_id]
    name_active_dict = member(member_id_list)
    active_member = []

    for key, value in name_active_dict.items():
        if value == 'active':
            active_member.append(key)

    active_member = random.sample(active_member, len(active_member))
    member_text = ''

    for i, active_name in enumerate(active_member):
        member_text = member_text + '{} : {}\n'.format(i+1, active_name)
            
    message.reply(member_text)


def member(member_id_list):
    member_dict = {}
    user_list = []
    is_active_list = []

    for name_id in member_id_list:
        user_url = 'https://slack.com/api/users.info?token={0}&user={1}&pretty=1'.format(SLACK_API_TOKEN, name_id)
        active_user_url = 'https://slack.com/api/users.getPresence?token={0}&user={1}&pretty=1'.format(SLACK_API_TOKEN, name_id)

        user_response = requests.get(user_url).json()
        active_user_response = requests.get(active_user_url).json()

        user_list.append(user_name(user_response))
        is_active_list.append(is_active_user(active_user_response))

    for user, active in zip(user_list, is_active_list):
        member_dict[user] = active
    
    return member_dict


def user_name(user_response_json):
    user = user_response_json["user"]
    user_profile = user["profile"]
    name = user_profile["real_name"]
    return name


def is_active_user(active_user_response_json):
    is_active = active_user_response_json["presence"]
    return is_active

slackbot_settings.py

import settings

API_TOKEN = settings.API_TOKEN
DEFAULT_REPLY = 'Décidons les membres!'
PLUGINS = ['plugins']

settings.py

import os
from os.path import join, dirname
from dotenv import load_dotenv

dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)

SLACK_API_TOKEN = os.environ.get("SLACK_API_TOKEN")
API_TOKEN = os.environ.get('API_TOKEN')
CHANNEL_ID = os.environ.get('CHANNEL_ID')

run.py

from slackbot.bot import Bot

def main():
    bot = Bot()
    bot.run()

if __name__ == '__main__':
    main()

Procfile

worker: python run.py

runtime.txt

python-3.6.0

requirements.txt

slackbot==0.5.3

Résumé

C'est assez facile à faire. Faisons un usage efficace de slackbot! !!

Recommended Posts

L'histoire de la création d'un Bot qui affiche les membres actifs dans un canal spécifique de Slack avec Python
L'histoire de la création de Botonyan qui renvoie le contenu de Google Docs en réponse à un mot-clé spécifique sur Slack
L'histoire de la création d'un module qui ignore le courrier avec python
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
Créez un BOT qui affiche le nombre de personnes infectées dans le nouveau Corona
[Python] Ne laissez que les éléments commençant par une chaîne de caractères spécifique dans le tableau
Obtenez le nombre d'éléments spécifiques dans la liste python
L'histoire de la création d'un bot de boîte à questions avec discord.py
L'histoire de la création d'un pilote standard pour db avec python.
Une fonction qui mesure le temps de traitement d'une méthode en python
L'histoire de la création d'un site qui répertorie les dates de sortie des livres
J'ai fait un bot mou qui m'informe de la température
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
L'histoire du traitement A du blackjack (python)
Une histoire qui visualise le présent de Qiita avec Qiita API + Elasticsearch + Kibana
L'histoire d'un capteur de stationnement en 10 minutes avec le kit de démarrage GrovePi +
Recevez une liste des résultats du traitement parallèle en Python avec starmap
L'histoire de la recherche d'un magasin BOT (AI LINE BOT) pour Go To EAT dans la préfecture de Chiba (1)
Créez un bot qui publie sur Slack le nombre de personnes positives pour le nouveau virus corona à Tokyo
[Python] Récupérez les fichiers dans le dossier avec Python
Copiez la liste en Python
L'histoire de la lecture des données HSPICE en Python
Celui qui affiche la barre de progression en Python
[Python] Lancer un message sur le canal Slack
L'histoire qui s'inscrit dans l'installation de pip
Une histoire qui est devenue bleu clair en 4 mois après avoir démarré AtCoder avec python
Autour de l'authentification de PyDrive2, un package pour faire fonctionner Google Drive avec Python
L'histoire de Django créant une bibliothèque qui pourrait être un peu plus utile
L'histoire de la création d'un Line Bot qui nous raconte le calendrier de la programmation du concours
Comment obtenir une liste de fichiers dans le même répertoire avec python
Histoire de faire une recherche de magasin BOT (AI LINE BOT) pour Go To EAT dans la préfecture de Chiba (2) [Présentation]
Une histoire qui réduit l'effort de fonctionnement / maintenance
[Python] Un programme qui compte le nombre de vallées
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
Présentation du livre "Créer une IA rentable avec Python" qui vous permet d'apprendre l'apprentissage automatique dans le cours le plus court
[Python] Un programme qui trouve le nombre d'étapes le plus court dans un jeu qui traverse les nuages
Créez un BOT qui raccourcit l'URL Discord
[Python] Changer la couleur du texte et la couleur d'arrière-plan d'un mot clé spécifique dans la sortie d'impression
Une note qui implémente une tâche en Python qui charge un fichier GCS dans BigQuery
L'histoire de FileNotFound en Python open () mode = 'w'
Une histoire qui a eu du mal avec l'ensemble commun HTTP_PROXY = ~
Un mémo que j'ai touché au magasin de données avec python
Expression Lambda (correction) qui crée un index (dictionnaire à clé de membre) des membres de l'objet collecté en python
Une histoire qui a analysé la livraison de Nico Nama.
Une histoire sur la tentative d'introduire Linter au milieu d'un projet Python (Flask)
Un mémorandum sur la mise en œuvre des recommandations en Python
[Python] Un programme qui compare les positions des kangourous.
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
Je suis à Singapour en ce moment Une histoire sur la création d'un LineBot et la volonté de faire un travail mémorable
Un serveur qui renvoie le nombre de personnes devant la caméra avec bottle.py et OpenCV
Créez un bot qui ne renvoie que le résultat de l'analyse morphologique avec MeCab avec Discord
L'histoire de la création d'un «espace de discussion sur l'esprit et le temps» exclusivement pour les ingénieurs de l'entreprise
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
[Python] Programmation pour trouver le nombre de a dans une chaîne de caractères qui se répète un nombre spécifié de fois.
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
[Note] Un script shell qui vérifie l'utilisation du processeur d'un processus spécifique dans une boucle while.
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
[Python] Extrait les blocs de données de Pandas qui ne correspondent pas à une colonne spécifique avec d'autres blocs de données
Essayez de gratter les données COVID-19 Tokyo avec Python
Découvrez la largeur apparente d'une chaîne en python