31
28

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 5 years have passed since last update.

酒井研究室Advent Calendar 2015

Day 1

研究室でコーヒー飲んだ回数をSlackのコマンドで記録する

Last updated at Posted at 2015-12-02

研究室のコーヒーマシン

私の研究室では1杯50円でコーヒーを飲むことができます。(ラボリーダーに感謝。)
その都度、50円払ってもいいのですが、各自責任を持って飲んだ回数を覚えておくことで後でまとめて精算できたら楽ですね。

8CD45721-56A5-44EE-91A9-39475F9349D7.png

記録手段としての Slack

研究室ではSlackを使っていたので、SlackのOutgoing WebHooksを使うことにしました。記録先としてはGoogle Spreadsheetに記録します。usernameの欄と各ユーザネームに対応した数字を記録する欄を作っておきます。

コマンド

g coffee add

とSlackで入力することで入力したユーザーに対応する数字の欄の数字を1つ増やすことにします。(いつ飲んだかなどの情報は後から一切わからない仕様です汗)

Google Apps Script (GAS) の doPost(e) 関数

GASではdoGet関数やdoPost関数を定義することでウェブアプリとして公開することができます。且つ、Google Spreadsheetを操作するクラスなどが使えるため、Google Drive上のファイルを操作するBotなどを作るには非常に便利です。

SlackのOutgoing WebHooksのポスト先としてGASで公開したアプリのURLを指定し、doPost関数内でGoogle Spreadsheetを操作することで上記のコマンドを実装しました。

(追記 12/4)
今はExecution APIというのがあるのですね。。

パラメータ

SlackでOutgoing WebHooksを設定する時のトークンを使うことでSlack以外からのアクセスを無視できます。

function doPost(e) {
  if(e.parameter.token != SLACK_OUTGOING_TOKEN) return null;
  
  var username = e.parameters.user_name[0];
  var channel = e.parameters.channel_name[0];
  var command = e.parameters.text[0].split(" ");
  
  if (command[0] != "g") return null;
  
  switch(command[1]) {
  
    case "coffee":
      /*
       * spreadsheet上の username の飲んだ回数を1増やす
       */
      break;
  }
}

GASのGoogle Spreadsheetの操作に関しては

など色々あります。

:eyes: おまけ

g coffee allコマンドでみんなの飲んだ回数を棒グラフで返してくれる機能も実装しました。

AA78AA74-6CE4-4618-BA1E-7FA0EF2FAD04.png

:construction_worker: 参考

以下の記事を非常に参考にさせていただきました <(_ _)>

31
28
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
31
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?