13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ハンズラボAdvent Calendar 2020

Day 4

社内Slackパワプロ化計画

Last updated at Posted at 2020-12-03

この記事は、ハンズラボ Advent Calendar 2020 4日目の記事です :snowman:

自己紹介

ハンズラボ2年目でPOSチームに所属しています!!

最近読んだ漫画はブルーロック
最近ハマっているゲームは APEX と パワプロ2020

去年に引き続き アドベントカレンダー に参加しました!
去年のやつ

はじまり

記事ネタを考えていたある日、別のチームが今日のコンディションを毎朝聞き取りしていることを知った。

スクリーンショット 2020-12-01 19.15.48.png

リアクションを確認しないと人がわからないため、Slackステータスに反映すればパッと見でわかるようになるなと思った。
(多くの人がやってくれればパワプロみたいになるなとも思った)

なので今回は特定のリアクションを押した時にステータスに反映させてみます。(2年連続Slackステータスネタ:rolling_eyes:

gas

スプレッドシートはシンプルに以下のようにしました。
ユーザーIDはなんとなく隠しておきました。

スクリーンショット 2020-12-03 18.42.20.png

スプレッドシートの変更時にgasが実行されるようにトリガーを設定

スクリーンショット 2020-12-03 19.04.09.png

実行されるものが↓で、シンプルにスプレッドシートの値を取得してステータス更新するだけです。

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のトークンは機密っぽいのでプロジェクトのプロパティに設定しておきます。
※うまく動作しない不具合が発生しているようなので、その場合はベタ書きで:cry:
https://auto-worker.com/blog/?p=1708

スクリーンショット 2020-12-02 12.14.20.png


const TOKEN = SLACK_TOKEN;

Slack

ワークフローのトリガーは絵文字リアクションにします。
MAXが5個なのでちょうど良かったです。(休息不十分があるけど)

スクリーンショット 2020-12-03 18.33.03.png

次のステップはスプレッドシートへの値の追加です。
変数を使って値を渡します。

スクリーンショット 2020-12-03 18.39.13.png

お試し

あとはチャンネルでリアクションを押すだけです。

スクリーンショット 2020-12-03 19.07.08.png
スクリーンショット 2020-12-03 19.07.49.png

できた。

感想

いまいちなところ

  • ワークフローの変数にリアクション押した日時的なものが無いためスプレッドシートに記録するのは一手間必要そうな点
    • (gas実行時にスプレッドシートに時間を記入したら無限に実行されちゃうのかな?)
  • ワークフローのみだと特定のチャンネルの全メッセージが対象になってしまうため、普通にリアクションしたい時にステータスが変更されちゃう点
    • 僕のtimesでのリアクションはお気をつけください!!!!

よかったところ

  • ステータスの消滅?時間を9時間後にしてあるので、ステータスが消えたら退勤するって感じで使える点
    • 他人から見てもわかりやすいかも?(ちゃんと朝イチでやる前提)
  • 使ってくれる人が増えるとSlackの画面が楽しそうな点
    • パワプロになる!!

改良したいところ

  • リアクション探すの少しめんどくさいのでリアクション付きのメッセージを朝投稿されるようにしたい
  • スプレッドシートに記録したのをみて健康管理したい

というわけでしばらく自分で使ってみたいと思います。おわり。

13
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?