7
4

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.

試験日までをカウントダウンをしてくれるSlack botを作ってみたよ

Last updated at Posted at 2019-08-31

基本情報技術者試験が近づいてきたので試験日までカウントダウンしてくれるbotをGoogle Apps ScriptとSlackを使って作ってみました。カウントダウンツールやアプリはすでにもあると思いますが、よく使うSlackのワークスペースに通知を送るようにしたかったので勉強も兼ねて作成しました。

使うツール

  • Google Apps Script
  • Slack

作成するbotについて

一日一回「FE試験まであとXX日です」といったメッセージを送る

  • Google Apps Scriptに書いたプログラムを時限実行(毎日9時〜10時)
  • Slackとの連携 #countdown チャンネルにメッセージを送信

#手順

    1. SlackAppでbotを作成
    1. Google Apps Scriptを作成
    1. 時限実行の設定

各手順を箇条書きで説明していきます。

1. SlackAppでbotを作成

  • https://api.slack.com/apps にアクセスしCreate New Appをクリック

  • botの名前、ワークスペースを指定しCreate Appをクリック
    App Nameは後からでも変更可能。
    Development Slack Workspaceでbotを使いたいSlackのワークスペースを選択します。

createnewapp.png

  • 左メニューからOAuth & Permissionsをクリック

  • ScopesのSelect Permission Scopesを設定
    OAuth Access Tokenを取得する前に、Scopeを設定する必要があります。
    今回はメッセージを送信するだけなので
    Send messages as [botの名前] を選択し、Save Changesをクリック。

settingscope.png

  • OAuth Access Tokenを控える

    Scope設定後、Install App to Workspaceからbotの権限を設定するとOAuth Access Tokenと表示されるので控えておきます。

    ※ Google Apps Scriptで使います

2. Google Apps Scriptを作成

  • Google Apps Scriptを開きます
    GoogleアカウントにログインしGoogleドライブを開き、「+新規」をからGoogle Apps Scriptを開きます。ない場合は「+新規」>「その他」>「アプリを追加」より追加できます。

  • ライブラリの追加
    リソースライブラリ をクリック。
    ライブラリを追加にM3W5Ut3Q39AaIwLquryEPMwV62A3znfOOを入れて追加。
    バージョンは22にしました。

slackaddslibrary.png

  • プロパティの設定

    Google Apps Scriptのプロパティーにアクセストークンを設定しました。

    ファイルプロジェクトのプロパティスクリプトのプロパティ
    keyをSLACK_ACCESS_TOKENとしvalueに控えておいたOAuth Access Tokenを設定します

settingproperties.png

  • ソースを書く

    試験当日に0日となるように書いています。
var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN');
function countdown() {
  // Slackapp インスタンス生成
  var slackApp = SlackApp.create(token);
  // チャンネル
  var channelId = "#countdown";
  // 試験名
  var examName = 'FE試験';
  // 試験日
  var examDate = new Date('2019/10/20 23:59:59');
  // 本日日付
  var today = new Date();
  // 試験日までの日数を取得
  days = Math.floor((examDate - today) / (24*60*60*1000));

  // メッセージを送信する
  if(days >= 0){
    var message = examName + 'まであと' + days + '日です'; 
  
    var options = {
    }
    slackApp.postMessage(channelId, message, options);
  }
}

Google Apps Scriptはjavascriptをベースに作成されていますが、全てのjs関数が使える訳ではないそうです。

再生ボタンをクリックするとプログラムを実行できます。
警告文が表示されたら詳細安全ではないページに移動からリクエストを許可します。
programstarts.png

3. 時限実行の設定

  • タイマーボタンをクリック
    settingtimer.png

  • 毎日9〜10時に実行されるように設定
    settingtriger.png

#参考にさせていただきました

7
4
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
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?