Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt

Einführung

Verwenden Sie die API von slack, um aktive Mitglieder in einem bestimmten Slack-Kanal in Python anzuzeigen, indem Sie bestimmte Erwähnungen in slackbot überspringen.

Ausführungsergebnis スクリーンショット 2019-12-22 16.31.44.png

Es ist so. Da es persönliche Informationen enthält, verstecke ich einige davon. Machen wir das! !!

Verzeichnisaufbau

├───.gitignore                                 
├───.env                                
├───requirements.txt             
├───Procfile           
│───plugins
│   └───my_mention.py                          #Diese Datei wird hauptsächlich verwendet.
│    └───__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 = 'Lasst uns die Mitglieder entscheiden!'
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

Zusammenfassung

Das ist ziemlich einfach. Lassen Sie uns Slackbot effektiv nutzen! !!

Recommended Posts

Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt
Die Geschichte der Erstellung von Botonyan, das den Inhalt von Google Text & Tabellen als Antwort auf ein bestimmtes Keyword in Slack zurückgibt
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
Erstellen Sie einen BOT, der die Anzahl der infizierten Personen in der neuen Corona anzeigt
[Python] Lassen Sie nur Elemente im Array, die mit einer bestimmten Zeichenfolge beginnen
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Die Geschichte der Erstellung einer Website, auf der die Veröffentlichungsdaten von Büchern aufgeführt sind
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Die Geschichte der Verarbeitung A von Blackjack (Python)
Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
Die Geschichte eines Parksensors in 10 Minuten mit dem GrovePi + Starter Kit
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Die Geschichte, wie ein Geschäft BOT (AI LINE BOT) nach Go To EAT in der Präfektur Chiba durchsucht (1)
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Kopieren Sie die Liste in Python
Die Geschichte des Lesens von HSPICE-Daten in Python
Diejenige, die den Fortschrittsbalken in Python anzeigt
[Python] Wirf eine Nachricht an den Slack-Kanal
Die Geschichte, die zur Installation von Pip passt
Eine Geschichte, die in 4 Monaten nach dem Start von AtCoder mit Python hellblau wurde
Rund um die Authentifizierung von PyDrive2, einem Paket zum Betreiben von Google Drive mit Python
Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist
Die Geschichte, einen Line Bot zu erstellen, der uns den Zeitplan für die Wettbewerbsprogrammierung erzählt
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Die Geschichte, wie ein Geschäft BOT (AI LINE BOT) nach Go To EAT in der Präfektur Chiba durchsucht (2) [Übersicht]
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
[Python] Ein Programm, das die Anzahl der Täler zählt
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
Einführung in das Buch "Erstellen einer profitablen KI mit Python", mit dem Sie in kürzester Zeit maschinelles Lernen erlernen können
[Python] Ein Programm, das die kürzeste Anzahl von Schritten in einem Spiel findet, das Wolken überquert
Erstellen Sie einen BOT, der die Discord-URL verkürzt
[Python] Ändern Sie die Textfarbe und Hintergrundfarbe eines bestimmten Schlüsselworts in der Druckausgabe
Ein Hinweis, der einen Job in Python implementiert, der eine GCS-Datei in BigQuery lädt
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Die Geschichte, eine harte Zeit mit der gemeinsamen Menge HTTP_PROXY = ~ zu haben
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Lambda-Ausdruck (Korrektur), der einen Index (Wörterbuch mit Mitgliedsschlüssel) der Mitglieder des Objekts erstellt, das in Python gesammelt wird
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
Eine Geschichte über den Versuch, Linter mitten in einem Python (Flask) -Projekt vorzustellen
Ein Memorandum über die Umsetzung von Empfehlungen in Python
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Fügen Sie eine Funktion hinzu, um dem Wetter heute mitzuteilen, dass der Bot locker ist (hergestellt von Python).
Ich bin gerade in Singapur. Eine Geschichte über das Erstellen eines LineBot und den Wunsch, einen unvergesslichen Job zu machen
Ein Server, der mit Flasche.py und OpenCV die Anzahl der Personen vor der Kamera zurückgibt
Erstellen Sie mit MeCab mit Discord einen Bot, der nur das Ergebnis der morphologischen Analyse zurückgibt
Die Geschichte der Schaffung eines "Geist- und Zeit-Chatrooms" exklusiv für Ingenieure im Unternehmen
Ruft den Wert eines bestimmten Schlüssels bis zum angegebenen Index der Wörterbuchliste in Python ab
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
[Hinweis] Ein Shell-Skript, das die CPU-Auslastung eines bestimmten Prozesses in einer while-Schleife überprüft.
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
[Python] Extrahiert Datenrahmen von Pandas, die einer bestimmten Spalte nicht mit anderen Datenrahmen entsprechen
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus