この記事は、ハンズラボ Advent Calendar 2020 4日目の記事です
自己紹介
ハンズラボ2年目でPOSチームに所属しています!!
最近読んだ漫画はブルーロック
最近ハマっているゲームは APEX と パワプロ2020
去年に引き続き アドベントカレンダー に参加しました!
去年のやつ
はじまり
記事ネタを考えていたある日、別のチームが今日のコンディションを毎朝聞き取りしていることを知った。
リアクションを確認しないと人がわからないため、Slackステータスに反映すればパッと見でわかるようになるなと思った。
(多くの人がやってくれればパワプロみたいになるなとも思った)
なので今回は特定のリアクションを押した時にステータスに反映させてみます。(2年連続Slackステータスネタ)
gas
スプレッドシートはシンプルに以下のようにしました。
ユーザーIDはなんとなく隠しておきました。
スプレッドシートの変更時にgasが実行されるようにトリガーを設定
実行されるものが↓で、シンプルにスプレッドシートの値を取得してステータス更新するだけです。
const main = () => {
// シートの最後の行の値を取得
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
// 絵文字
const emoji = sheet.getRange("A" + lastRow).getValue();
// ユーザー
const rowB = sheet.getRange("B" + lastRow).getValue();
const user = rowB.slice(2).slice(0, -1); // 先頭二文字と末尾一文字を削除
const TOKEN = SLACK_TOKEN;
const USER_ID = user;
const date = new Date();
const unixTime = Math.floor(date.getTime() / 1000);
const status = {
"profile": {
"status_emoji": emoji,
"status_expiration": unixTime + 32400 // 9時間後
}
};
const url = 'https://slack.com/api/users.profile.set';
const options = {
"method": 'POST',
"headers": {
"Authorization": "Bearer " + TOKEN,
"X-Slack-User": USER_ID,
"Content-Type": "application/json; charset=utf-8"
},
"payload": JSON.stringify(status)
};
UrlFetchApp.fetch(url, options);
};
Slackのトークンは機密っぽいのでプロジェクトのプロパティに設定しておきます。
※うまく動作しない不具合が発生しているようなので、その場合はベタ書きで
→ https://auto-worker.com/blog/?p=1708
const TOKEN = SLACK_TOKEN;
Slack
ワークフローのトリガーは絵文字リアクションにします。
MAXが5個なのでちょうど良かったです。(休息不十分があるけど)
次のステップはスプレッドシートへの値の追加です。
変数を使って値を渡します。
お試し
あとはチャンネルでリアクションを押すだけです。
できた。
感想
いまいちなところ
- ワークフローの変数に
リアクション押した日時
的なものが無いためスプレッドシートに記録するのは一手間必要そうな点- (gas実行時にスプレッドシートに時間を記入したら無限に実行されちゃうのかな?)
- ワークフローのみだと特定のチャンネルの全メッセージが対象になってしまうため、普通にリアクションしたい時にステータスが変更されちゃう点
- 僕のtimesでのリアクションはお気をつけください!!!!
よかったところ
- ステータスの消滅?時間を9時間後にしてあるので、ステータスが消えたら退勤するって感じで使える点
- 他人から見てもわかりやすいかも?(ちゃんと朝イチでやる前提)
- 使ってくれる人が増えるとSlackの画面が楽しそうな点
- パワプロになる!!
改良したいところ
- リアクション探すの少しめんどくさいのでリアクション付きのメッセージを朝投稿されるようにしたい
- スプレッドシートに記録したのをみて健康管理したい
というわけでしばらく自分で使ってみたいと思います。おわり。