0
0

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.

GAS を利用して素数日をお知らせしてくれる Slack Bot を作ってみた

Last updated at Posted at 2020-04-29

概要

Slack Bot と Google Apps Script を用いて素数日を通知する機能を実装する.

詳細

今日2020年4月29日は素数日(20200429は素数)らしい.そこで,今回は

  1. Google Apps Script で素数日判定を行う
  2. 素数日ならば Slack Bot に通知を送る

という機能を作る.

Slack Bot の作成

以前にも Slack Bot を作ったが,Slack API のページに変更があったため,説明を変更している.

  1. https://api.slack.com/apps にアクセスし Create New App をクリック
  2. アプリ名とワークスペースを設定し Create App をクリック
  3. 左側のメニューから OAuth & Permissions をクリック
  4. Bot Token Scopes にある Add an OAuth Scope をクリックし,chat:write を追加
  5. 左側のメニューから App Home をクリック
  6. Your App’s Presence in Slack にある Edit をクリックし,Display Name (Bot Name)Default username を追加
  7. 再び左側のメニューから OAuth & Permissions をクリックし,ページ上部にある Install App to Workspace をクリック
  8. アプリがワークスペースへのアクセス権限をリクエストしてくるので,許可する
  9. 表示される Bot User OAuth Access Token をメモしておく

GAS でのコーディング

  1. Google ドライブ上に "Google Apps Script" を新規作成する
  2. エディタ画面の リソース>ライブラリ からこちらのライブラリを追加する
  3. 次のコードを入力して保存する
コード.gs
function myFunction() {
  // 今日の日付を取得
  var todayobj = new Date();
  var today = Utilities.formatDate(todayobj, 'Asia/Tokyo', 'yyyyMMdd');
  var year = Utilities.formatDate(todayobj, 'Asia/Tokyo', 'yyyy');
  var month = Utilities.formatDate(todayobj, 'Asia/Tokyo', 'MM');
  var day = Utilities.formatDate(todayobj, 'Asia/Tokyo', 'dd');
  
  // 素数かどうか判定する関数
  function is_prime(n) {
    var result = true;
    for(let i = 2; i <= Math.ceil(Math.sqrt(n)); i ++) {
      if(n % i == 0) {
        result = false;
        break;
      }
    }
    return result;
  }
  
  // Slack API でメッセージを送信する準備
  var slack_token = "xoxb-..."; // Bot User OAuth Access Token
  var slackApp = SlackApp.create(slack_token);
  var channelId = "ABCDEF12345"; // 作成したアプリのチャンネルID
  var message = "本日【" + year + "" + month + "" + day + "日】は素数日です!";
  var result = "Not Posted";
  
  // 素数日ならばメッセージ送信
  if(is_prime(today)) {
    result = slackApp.chatPostMessage(channelId, message, {});
  }
  
  Logger.log(result);
}

テスト

  1. スクリプトエディタの画面で 実行ボタン をクリック
  2. Google アカウントへのアクセスをリクエストされるので,許可する1
  3. スクリプトが実行され,Slack Bot に通知が来たら成功

運用開始

  1. スクリプトエディタの画面で 編集>現在のプロジェクトのトリガー をクリック
  2. トリガーを追加 をクリック
  3. イベントのソースを 時間主導型 にし,トリガーのタイプを 日付ベースのタイマー にして時刻を選択する

素数日であれば,下記のように通知がなされる.

素数日通知の画像

参考

  1. 「このアプリは確認されていません」という画面が出たら「詳細」をクリックした後「~(安全ではないページ)に移動」をクリックすると先に進める.

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?