[GAS][slack]営業日カウントダウンbotを作っている途中 その2
これの続き
Twitterやslackでぶつくさ言ってたら、みんなスッとURL送ってくれたりコメントくださったりして、GAS界隈の優しさに瞳を潤しています。
本当にありがとうございます!!!
自分が理解できなくて、すげー悔しくてムカついて凹みますが、時間と物量こなしてレベルアップできればなあ。
今気になっていること
・botアイコン変えたい
・ログが二回出るのをどうにかしたい(大事なことだから?
・isWorkday 判定処理を関数化、部品化したい
・クラス化したい
botアイコン変える
参考資料
slackのbotはあらかじめ、chat:write.customizeの権限を設定しておき、メッセージ投稿のリクエストに画像アドレスを設定しておけば、メッセージごとに画像設定できますよ!
— ヤマタケ-業務自動化とSEOを極め中 (@gas_seo) April 16, 2022
解説記事は用意していないですが、下記githubの101〜109行のようにコードを書くと実装できます。https://t.co/0WohoriGLZ
あと、過去noteにもちっと書いてたなそういや。
1.まずはslack APIの設定画面から変えてみる
Settings → Basic Information の下の方のDisplay Informationから。
画像はflat-icon-designさんから拝借。
![](https://assets.st-note.com/img/1650103233773-rhAx50L9Re.png)
![](https://assets.st-note.com/img/1650104388943-SCxMobb0IN.png)
2.GASで変えてみる
ふむふむ、GASで書いたものが上書きされるんだな。
![](https://assets.st-note.com/img/1650104298292-7Z2B4mwiEq.png)
コード概要
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
【更新】 (【GAS】手続き型関数をクラス化する~isWorkDay関数を例にして~) EXCELVBAとGASとゲーム - https://t.co/IY5c6OUsGA
— そーちゃん (@black777cat) April 15, 2022
めちゃ見通し良くなった!kあく
見通し良くなった!
— a03🌕 (@a03) April 16, 2022
あ〜こうすると、isCompanyHoliday はスプレッドシートから取ってくるでなく、ここで計算、定義したくなるな。
あ〜〜これもClass etauにあるのか、グギギギギ pic.twitter.com/sO2Wzctij3
ログ二回でる問題
各関数に分けたら、ログふたつ出る問題も解決した。なんだったんだ。
![](https://assets.st-note.com/img/1650106240749-h3tXzv5QaF.png?width=1200)
と思ったらやっぱまだ二回ログ出てた。
![](https://assets.st-note.com/img/1650109266115-AKZU0wDShI.png)
![](https://assets.st-note.com/img/1650106396719-aq8yqDdtpk.png)
![](https://assets.st-note.com/img/1650106427365-uoXD6iAkKf.png)
この名言を君に贈ろう。https://t.co/NdD42VMQPS
— etau (@etau0422) April 16, 2022
え〜〜〜う〜〜ん〜〜〜
![](https://assets.st-note.com/img/1650109509060-WYeJEoXE6a.png)
えええ、ドユコト…。
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) 呼び出してるからか?
じゃあこうすればいい?
![](https://assets.st-note.com/img/1650109861207-1dS0fuaHPS.png?width=1200)
あ〜そいういうことかあ〜。
クラス化していく
クラスの基本おさらい
きた、クラス。うーん、ちょっとまずはテストで書いてみますよ。
![](https://assets.st-note.com/img/1650106548876-887b8zWAIA.png)
こんな感じで、ニューなお猫様が生成=インスタンスが生成された。
クラスというもので苦手感、何か特別感を抱いていたが、やってることとしては関数に引数入れて呼び出してる感じだよなあ(異論は認める)
クラス名(引数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
}
![](https://assets.st-note.com/img/1650110087185-3gOTxcyU5o.png)
const test2 = new Cat('たま', 3);
test2.age += 5; //age8
test2.meow();
console.log(test2.isAdalt());//true
こんな感じでインスタンスのメンバの変更もできる。
meow();
これを後から追加変更したいときはどうすれば???
あかん、わからん。
あ、隣ITにクラスの記事あった…さすがや…
instance
![](https://assets.st-note.com/img/1650113098556-AF6zvXYqGh.png)
うううう、今日はこの辺までかな…
もうちょっとでクラスを掴めそうな、うーんどうかな
#ノンプロ研
#GAS
#slack
#クラス
いただいたサポートで、書籍代や勉強費用にしたり、美味しいもの食べたりします!