✅通知を最大1日1回に抑える実装
こんな感じで実装する
http://www.plantuml.com/plantuml/uml/SoWkIImgAStDuG8pkBYAKWjI4qku51IiNZRCUZv_wUEcIK_xfpzkdFYqVzhZfcvhe4nIOd9sUM9HYjMpsLkUJTlmk77guwQUnutp7pVFUjoyvt7JZiVDgnutRtxSj3uc3wYzk0Ie_d7ZJ91kgF4AvHcPEQaA6i_xzpsTi-BPpAQd7RiVD_OO6LWP66XoGMrEoYzvtBWQxeeN2rSyNx8BP5dZRB1HQJdvYIMPUUaAUVabgGevgMabk1tKk2uc3-uga9SwfZ_hcGbnrEF61K3l0VsVNy3ba9gN0WmC0000 http://www.plantuml.com/plantuml/svg/SoWkIImgAStDuG8pkBYAKWjI4qku51IiNZRCUZv_wUEcIK_xfpzkdFYqVzhZfcvhe4nIOd9sUM9HYjMpsLkUJTlmk77guwQUnutp7pVFUjoyvt7JZiVDgnutRtxSj3uc3wYzk0Ie_d7ZJ91kgF4AvHcPEQaA6i_xzpsTi-BPpAQd7RiVD_OO6LWP66XoGMrEoYzvtBWQxeeN2rSyNx8BP5dZRB1HQJdvYIMPUUaAUVabgGevgMabk1tKk2uc3-uga9SwfZ_hcGbnrEF61K3l0VsVNy3ba9gN0WmC0000#.png
仕様
/icons/firebase.iconを使う
Cloud Functions
botのdeploy
cloud firestore
更新されたページのURLをStackする
訳わからないエラーに遭遇して限界が来たので、/icons/Google Apps Script.iconのScriptPropertiesをstorage代わりに使うことにした。
通知する時刻
20:00
通知するメッセージのフォーマット
code:post_message.txt
山岳部wiki更新情報
------------
本日は以下の記事が更新されました。
• $URL
• $URL
• ...
詳細は https://scrapbox.io/stream/tus-alpine/ を御覧ください
https://tus-alpine.slack.com/archives/C015ZL3GN8Z は山岳部のSlack workspaceにある更新通知用channelへのリンク
これはStreamでもいいかなあ
pro
誰でも確認できる
con
/icons/Slack.iconを使ってくれなくなる
使っていないのに誘導される方がうざい
しかもlog inしていなければ開けないからめんどくさいったりゃありゃしない
Streamにしよう。
開発
masterからbranchを切る
use-firebase
環境の設定までやる
sangaku1(あっと)ed.tus.ac.jpで/icons/firebase.iconprojectを作成する
project name: scrapbox-notification-bot
feature-stack
一日一回に通知頻度を減らす実装をする
開発log
まずは/icons/firebase.iconにlog inする
sangaku1(あっと)ed.tus.ac.jpをつかう
やること
/icons/done.icon16:20:38 LINE ACCESS TOKENの取得
/icons/Scrapbox.iconからweb hook URLを削除
/icons/done.iconGAS projectの削除
14:24:41開始takker.icon
14:34:38 何故かGAS projectが開けなくなっている?
https://gyazo.com/2aa0c6b7e6c8fb44030770d76f702bdd
自分のアカウントに切り替えても開けない
21:36:53 おそらく複数のアカウントでログインしっぱなしだったことが原因
仕方ないので、LINE ACCESS TOKENもろとも闇に葬ることにする
GAS projectを削除する
14:37:02 削除した
14:37:08 LINE Notifyに登録していたのは自分のアカウントだった
sangaku1(あっと)ed.tus.ac.jpではなかったのか
まあいいや。ACCESS TOKENくらい後から変えられるし
16:19:16 別のことやってた……Orz
復帰する
16:23:12 /icons/firebase.iconproject作成中
https://gyazo.com/51859c5de7dcc529f4d90072f72444ad
16:23:34 できた
16:27:30 repoにfirebaseをinstallする
16:37:55 git clone
yarn add firebase-tools
yarn -s run firebase login
表示されたURLに飛んでログインする
yarn -s run firebase init
16:42:29 FirestoreとFunctionsを選んだ
https://gyazo.com/ed66ee5590af867e8fc324b9d4733674
Create a new projectを選択。unique project idはrepository nameと同じにした
https://gyazo.com/85c9100023b5759b5cc04fe4478c9e0b
16:45:31なんか色々怒られた
scrapbox-notification-botはもうあるぞ!
select an extisting projectってそういうことだったんだtakker.icon
Firestoreの権限がない!
web siteの方で指定しないとダメなのかtakker.icon
16:54:21 wizardを先に進められた
https://gyazo.com/47735ed9c84670e2f40700e86e586381
https://gyazo.com/5e6bc24e39dc61325b528e5cce274e13
Functionsの設定もあった(スクショ撮り忘れた)
/icons/javascript.iconか/icons/typescript.iconか
tslintを使うかどうか
18:22:13 どうにもうまく動かないので、projectをまっさらにして作り直す
18:32:15 だめかあtakker.icon
https://gyazo.com/72da3ff7acc0be52661f8864d6c991d4
yarnの仮想環境にfirebaseとtypescritpをインストールしているのが問題?
globalに変更するしかないかな?
20:43:51疲れた
/icons/firebase.iconは一旦やめよう
動くとわかっている/icons/Google Apps Script.iconに戻す
21:11:07 もどした
/icons/Google Drive.iconをcacheに使おう
21:44:23 web hookの設定をし直した
web applicationとして発行
とりあえずいくつかページと適当に作ってみた。通知が行くか確認する
修正して確認
21:51:00 新しく追加したcacheURL.tsが悪さしているのかな?
21:53:23 やっぱそうみたい
21:55:23 変数名があっていなかっただけ?
21:57:55 あっていなかっただけだった
21:58:06 LINEのOGPはLINE Notifyだと展開されないっぽい?
https://gyazo.com/cf33a3ade689e569cd565b9be2c7f365
他のドメインで確認してみたけど、やはり展開されないようだ
LINE Message APIを使えば展開される?
22:12:20 わかってはいたが、scriptに書いたglobal変数はcacheにはならないな
resetされる
ScriptPropertiesをcache代わりに使ってみるか
22:29:21 実装終了
/icons/done.icon通知テスト
title_linkからページタイトルを取得するか
が_に変換されているから、ScriptPropertiesに 区切りで格納することが出来る
,区切りだと、タイトルに,が入ったときに困る
23:29:58 /icons/LINE.iconのシステム上、,が入るとそこでURLが切れてしまうようだ
https://gyazo.com/8e2c6abe207bc30ba411d3870268abac
うーん、別にいいかなあ
目的は更新があることを知ってほしいだけだし
詳しいことを知りたければStreamに誘導させればいい
23:17:46 実装終了
うまくいくかな?
23:42:47 cacheが保存されていることを確認する
これが終わったら次の段階だ
/icons/done.icon23:48:38 完了
プロジェクトのプロパティから見るとエンコードされちゃっているけど、/icons/LINE.iconにはちゃんとデコードされて表示されるから問題ないっぽい
https://gyazo.com/b8d23685dd25d224fb4b09104f322faa
一旦commit&pushする
00:05:33 出来たーtakker.icon
00:34:22 バグとり完了
この文面を入れる
通知を最大1日1回に抑える実装#5f4892cb1280f00000bad040
00:39:02 した
通知スタックにタイトルが一つしかないと、
空文字
タイトル
に分割されてしまうようだ。
空文字が入るとこうなっちゃう
https://gyazo.com/3199be6951f6b723b7ad93c423d63b9e
最初に https://scrapbox.io/tus-alpine/ が入ってしまう
空文字の場合は削除するようにする。
/icons/done.icon00:41:30 した
/icons/done.icon00:50:02 テスト完了
commitを分割するの忘れてた……takker.icon
今更しょうがないな
一日一回に通知を抑える機能の実装は別branchにしよう
一日一回に通知を抑える機能を実装する
これ実装したら他のmemberを招待する
/icons/done.icon01:23:31 できたーtakker.icon
時間手動型triggerの作成で参考にした
Google Apps Script で毎日決まった時間にスクリプトを実行するトリガー設定
Google Apps Scriptで呼び出したトリガーを削除する方法
01:36:18 deploy終了
PRは後で送る
2020-09-01 13:41:48 めんどいのでmasterに直接mergeしちゃったtakker.icon
マネはしないように!
01:46:11 ちゃんと更新がPOSTされていることを確認
部員を招待する
深夜だけど、まあいいか
01:49:53 招待した
終了!
素晴らしい機能です!coke.icon