概要
Slack Bot と Google Apps Script を用いて素数日を通知する機能を実装する.
詳細
今日2020年4月29日は素数日(20200429は素数)らしい.そこで,今回は
- Google Apps Script で素数日判定を行う
- 素数日ならば Slack Bot に通知を送る
という機能を作る.
Slack Bot の作成
以前にも Slack Bot を作ったが,Slack API のページに変更があったため,説明を変更している.
- https://api.slack.com/apps にアクセスし Create New App をクリック
- アプリ名とワークスペースを設定し Create App をクリック
- 左側のメニューから OAuth & Permissions をクリック
- Bot Token Scopes にある Add an OAuth Scope をクリックし,chat:write を追加
- 左側のメニューから App Home をクリック
- Your App’s Presence in Slack にある Edit をクリックし,Display Name (Bot Name) と Default username を追加
- 再び左側のメニューから OAuth & Permissions をクリックし,ページ上部にある Install App to Workspace をクリック
- アプリがワークスペースへのアクセス権限をリクエストしてくるので,許可する
- 表示される Bot User OAuth Access Token をメモしておく
GAS でのコーディング
- Google ドライブ上に "Google Apps Script" を新規作成する
- エディタ画面の リソース>ライブラリ からこちらのライブラリを追加する
- 次のコードを入力して保存する
コード.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);
}
テスト
- スクリプトエディタの画面で 実行ボタン をクリック
- Google アカウントへのアクセスをリクエストされるので,許可する1
- スクリプトが実行され,Slack Bot に通知が来たら成功
運用開始
- スクリプトエディタの画面で 編集>現在のプロジェクトのトリガー をクリック
- トリガーを追加 をクリック
- イベントのソースを 時間主導型 にし,トリガーのタイプを 日付ベースのタイマー にして時刻を選択する
素数日であれば,下記のように通知がなされる.
参考
- Google Apps Script で Slack Botを作ってみた。(お勉強編) - Qiita
- 素数判定いろいろ - シンプルな判定と、素数の分布 - Qiita
- GoogleAppsScriptで現在日時の取得
-
「このアプリは確認されていません」という画面が出たら「詳細」をクリックした後「~(安全ではないページ)に移動」をクリックすると先に進める. ↩