【Google Apps Script】DiscordのWebhookを使って行動を習慣化する

Code

はじまり

135ml
135ml

ああ、痛てて・・・

リサちゃん
リサちゃん

おう、おかえり

歯医者はどうだったよい?

135ml
135ml

今回は治療しなかったねえ。

なんか、この前治したところがまだ痛かったから行ったんだが、

135ml
135ml

どうやら、この虫歯の根本的な原因は、噛み合わせが悪い状態で
食事の時以外にも歯を閉じていることなんじゃないか?

135ml
135ml

みたいなことを医者に言われたわ

リサちゃん
リサちゃん

じゃあ、普段から歯を開きっぱなしにするように意識しなきゃ

いけないってことだね

135ml
135ml

そうだな、新しい行動を習慣にするために意識付けなきゃならない

135ml
135ml

そうと分かれば・・・

リサちゃん
リサちゃん

うん?

135ml
135ml

通知ツールを作るか

リサちゃん
リサちゃん

おおっ。

ツールの概要

今回は、DiscordのWebhookを使って、2時間おきにDiscordのチャンネルに通知するツールを作ります。

主な機能は、

  1. GASで時間主導型で動く関数を用意する
  2. その関数内で、指定した時間外の場合、通知しないようにする
  3. 時間内であれば、Discordチャンネルに通知する
  4. 通知する内容は、習慣化する行動と、意識できているかどうかを記録するシートのURL。

例えば、こんなのが送られてきて、

そこにあるシートのURLをタップして、シートに記入する感じです。

GASで時間主導型で動く関数を用意する

まずは、適当に関数を用意して、それが◯時間おきとかに作動するようにしましょう。

その関数内で、指定した時間外の場合、通知しないようにする

そして、寝ている間にこの意識付けの通知が送られてくるのは億劫なので、

通知が送られないようにする時間帯を設定します。以下の場合だと、AM3:00〜AM9:59の間は通知されてきませんね。

/**
 * @description Getting notification to send webhook requests.
 * @param {string} sheetName
 * @return {string[] || bool}
*/
function addRow(sheetName){
  let today = new Date();
  const hour = today.getHours();
  const overtimeStart = 3;
  const overtimeEnd = 10;
  if(hour >= overtimeStart && hour < overtimeEnd){
    return false;
  }

  const numColumns = 5;
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  let newRow = sheet.getLastRow() + 1;
  let range = sheet.getRange(newRow, 1, 1, numColumns);
  let newValues = [
    [
      newRow - 1
      , today
      , today
      , ""
      , ""
    ]
  ];
  range.setValues(newValues);
  return newValues;
}

時間内であれば、Discordチャンネルに通知する

上記の場合であれば、AM3:00〜AM9:59ではない場合に、Discordに通知を飛ばしたいと思います。

使用するDiscordのチャンネルを作ったりして、チャンネル設定でWebhookを作成しましょう。

通知する内容は、習慣化する行動と、意識できているかどうかを記録するシートのURL。

送る内容はこんな感じにします。

最初に習慣化する行動を書いて、その次に、記録用のシートのURLを埋め込みます。フッターにはGoogleスプシのロゴを入れてみたり。

/**
 * @description Getting notification to send webhook requests.
 * @return {string{}}
*/
function createHabitNotification(){
  const bucketUrl = URL_OF_STORAGE_FOR_WEBLIP;
  const folderOfImage = IMAGE_FOLDER_FOR_SERVICES;
  let imageFolderUrl = `${bucketUrl}/${folderOfImage}`;

  let content = "歯を開いて!";
  let urlOfSheet = URL_OF_SHEET;
  iconUrl = `${imageFolderUrl}/${IMAGE_FILE_FOR_SPREADSHEET}`;
  let embeds = [];
  embeds.push({
    "title": "シートに記入!"
    , "color": 4569935
    , "url": urlOfSheet
    , "footer": {
      "text": "GoogleSpreadsheet"
      , "icon_url": iconUrl
    }
  })
  
  let returnEmbeds = embeds;
  console.log(returnEmbeds);

  const payload = {
    "username": "歯を開かせるあゆ"
    , "content": content
    , "embeds": returnEmbeds
    // , "tts": true
  
  console.log(payload);

  return payload;
}

以上です!

おしまい

リサちゃん
リサちゃん

うわ、通知されてきた!

135ml
135ml

DiscordのWebhookを使ったツールは、

これで、ちゃんと行動が定着するかどうかを記録して習慣化していこう。

リサちゃん
リサちゃん

他にも何か作れないかなあ

以上になります!

コメント

タイトルとURLをコピーしました