[GAS][slack]営業日カウントダウンbotを作っている途中 その2

これの続き


Twitterやslackでぶつくさ言ってたら、みんなスッとURL送ってくれたりコメントくださったりして、GAS界隈の優しさに瞳を潤しています。
本当にありがとうございます!!!

自分が理解できなくて、すげー悔しくてムカついて凹みますが、時間と物量こなしてレベルアップできればなあ。

今気になっていること

・botアイコン変えたい
・ログが二回出るのをどうにかしたい(大事なことだから?
・isWorkday 判定処理を関数化、部品化したい
・クラス化したい


botアイコン変える


参考資料


あと、過去noteにもちっと書いてたなそういや。

1.まずはslack APIの設定画面から変えてみる

Settings → Basic Information の下の方のDisplay Informationから。
画像はflat-icon-designさんから拝借。


2.GASで変えてみる

ふむふむ、GASで書いたものが上書きされるんだな。

※テストのため土曜になってます。

コード概要

  const iconImage = "http://flat-icon-design.com/f/f_business_23/s256_f_business_23_0bg.png";
  const options = {
    // channelId: slackUserID, //チャンネル名
    botUserName: "GASdeName", //投稿するbotの名前
    // message: statusMessage, //投稿するメッセージ
    bot_icon: iconImage //投稿時に表示されるアイコン
  };

  console.log(options.botUserName);
  //SlackAppオブジェクトのpostMessageメソッドでボット投稿を行う
  slackApp.postMessage(channelId, message, { username: options.botUserName, icon_url: options.bot_icon });

この辺の絵文字コードでもどうにかしたら出来そうだけど、未調査。
https://www.webfx.com/tools/emoji-cheat-sheet/

isWorkday 判定処理を関数化、部品化

関数化

ログが二回出る問題があるが、こっちをやって、見通しよくして検証するかあ。
この辺りはそーちゃんが記事書いてくれました。

https://twitter.com/etau0422/status/1515230218570833921?s=20&t=TPr1o6oZOKlhvS4YiwwE5A


めちゃ見通し良くなった!kあく

ログ二回でる問題

各関数に分けたら、ログふたつ出る問題も解決した。なんだったんだ。

と思ったらやっぱまだ二回ログ出てた。




え〜〜〜う〜〜ん〜〜〜

えええ、ドユコト…。

globalでtodayを定義してるじゃん?
const today = new Date('2022/04/15');

mainでそれ引数に渡してるじゃん?

function main() {
  //平日のみslackに投稿する用の日付判定用の別関数呼び出し、土日祝ならここで処理終了
  if (isWorkday(today) == false) { return; };

  //平日のみslackに投稿する用の日付判定用の別関数呼び出し、営業日ならslackに投稿
  if (isWorkday(today) == true) { postSlackbot() };
}

ああそゆこと?2回 isWorkday(today) 呼び出してるからか?

じゃあこうすればいい?

あ〜そいういうことかあ〜。

クラス化していく

クラスの基本おさらい

きた、クラス。うーん、ちょっとまずはテストで書いてみますよ。

こんな感じで、ニューなお猫様が生成=インスタンスが生成された。
クラスというもので苦手感、何か特別感を抱いていたが、やってることとしては関数に引数入れて呼び出してる感じだよなあ(異論は認める)

クラス名(引数1、引数2)で、クラスで定義されたconstructorとかなんかからニューされてる、よね???

この生成されるインスタンス(オブジェクト)の特性を定義しているのがクラス。で、クラスにはメソッド(関数)も持たせられる。

メソッドを持たせてみる

function cat() {
  class Cat {
    constructor(name, age) {
      this.name = name;
      this.age = age;
    }

    meow() {
      console.log('Meow!')
    }

    //5以上なら true
    isAdalt() {
      return this.age >= 5;
    }
  }

  const test1 = new Cat('チビ', 5);
  test1.meow();
  console.log(test1.isAdalt());

  const test2 = new Cat('たま', 3);
  test2.meow();
  console.log(test2.isAdalt());

  console.log({ test1 });
  console.log({ test2 });

  console.log(typeof test1);//object
  console.log(typeof test2);//object


  console.log(`等値演算子 ==  : ${test1 == test2}`); //false
  console.log(`同値演算子 === : ${test1 === test2}`); //false

  console.log(`等値演算子 ==  : ${test1.value == test2.value}`); //false
  console.log(`同値演算子 === : ${test1.value === test2.value}`); //false
}


  const test2 = new Cat('たま', 3);
  test2.age += 5; //age8
  test2.meow();
  console.log(test2.isAdalt());//true

こんな感じでインスタンスのメンバの変更もできる。

meow();

これを後から追加変更したいときはどうすれば???
あかん、わからん。


あ、隣ITにクラスの記事あった…さすがや…

instance

うううう、今日はこの辺までかな…
もうちょっとでクラスを掴めそうな、うーんどうかな

#ノンプロ研
#GAS
#slack
#クラス

いただいたサポートで、書籍代や勉強費用にしたり、美味しいもの食べたりします!