👀
PythonでSlack APIを使ってPresenceを取得する
概要
決してサボっている人を検知したいのではなく、参考情報として取得したかったのでまとめました。
PresenceというのはSlackのアイコンの右下に出るアクティブとかの表示です。
準備編
Slack Appを作成し、対象のワークスペースに対して使用可能な状態にしておく。
必要なスコープはusers:read
となります。
開発環境
Pythonにslack_sdk
をインストールします。
pip install slack_sdk
今回試したのは下記環境です。
Python: 3.9.4
slack_sdk: 3.5.0
実装
とりあえずは動かしてみましょう。
下記の感じでコード書いたら動きます。環境変数にトークン入れるのが面倒な場合は、token=
のところに直接文字列で入れても動きます。
import os
from slack_sdk import WebClient
token = os.environ.get("SLACK_BOT_TOKEN")
client = WebClient(token=token)
response = client.users_list()
users = response["members"]
awayList = []
for user in users:
if user['is_bot'] == False and 'is_restricted' in user:
if user['is_restricted'] == False:
userPresence = client.users_getPresence(user=user['id'])
if userPresence['presence'] == 'away':
awayList.append([user['id'], user['name'], user['real_name']])
この実装が推奨されるのかはちょっとわからないので、頻繁に取得する場合は自己責任でお願いします。
ユーザー毎にgetPresence
しているので総ユーザー数が多いと実行に時間がかかります。
本当はforで回したくなかったんですけど、これ以外の方法が見つからなかったんです。
あとエラー処理等も全く入れてません。申し訳ないです。
定期実行したい場合は適宜エラー処理入れてください。
User presenceの仕様
公式のUsage guidesを見てみると、値としてはactive
またはaway
が返ってきます。
また、自動と手動の離席があり自動の離席についてはクライアントの仕様を見てねと書いてある気がします。
クライアントの仕様を見てみると、
デスクトップが 10 分間操作されなかった時
と書いてあります。
この仕様がよくわかっていなくて、OS上の操作であるのかクライアント上の操作であるのかが不明です。
誰か調べてもらえませんかね?
Discussion