scrapbox-stream-notify
現状:Scrapboxの変更をDiscordに通知するWebHook機能が用意されている 問題点:90s間隔で通知されるので結構うるさい
解決策:送信間隔を制御して通知する
要件
n分間隔でDiscordへ通知できる
変更のあったページ名を表示する
https://gyazo.com/265eed98b620ce37121884780ff7ac7e
メッセージのフロー
https://gyazo.com/340792f7b05be07249561adc5fe19f59
プロジェクト名
略称:ssn
システム構成
ssn WebhookURLの形式
https://{DenoDeployプロジェクト名}/api/webhooks/{webhookId}/slack
{webhookId}:Discord WebHookと1:1の関係
他の人から推測できないようにしたい。そのためSHA-256を元に生成する。 Scrapboxにはhttps://{DenoDeployプロジェクト名}/api/webhooks/{webhookId}/までを登録する
更新があったものはページ単位で格納する
Discordへ通知したデータはKV上から削除する
操作
追加:スキーマどおりの値を挿入
削除:keyのうちprojectName, プロジェクト名が一致するものを削除
更新:authorが異なるとき複数登録。updatedAtが異なるとき最新に上書き
現状、Keyが長い?ため遅い!5秒ほどかかるため非同期処理
なんとかしたい
スキーマ
Key
[webHookId, ウェブフックID, projectName, プロジェクト名, pageName, ページ名]
Value
code:new-value.ts
{
projectName: string;
name: string;
link: string;
authors: string[];
updatedAt: string;
}
設定ファイルsecrets.json
ssnサーバのWebhookとDiscordサーバのWebhookを対応付ける。また、送信頻度を定義する
code:settings.ts
{
name: string; // 日本語不可だった
cronSchedule: string; // Cron式
webhookId: string; // 手動発行
discordWebhookURL: string; // Discordで発行したWebhook URLを貼り付け
}[]
追加機能:GETするとWebhookURLを取得できる
Webhook関連の参考文献
改修案
Discord Webhook単位で設定する。Discord Webhookに複数のCosenseプロジェクトが紐づいているイメージ
Cronの実行もDiscord Webhook単位となる。
SSNでの許可設定
Discord Webhookを登録する
設定手順のイメージ
1. Discord Webhookを発行する
2. SSNに該当のWebhookを許可設定、および送出頻度を設定する
設定ファイルに記載してdeployctlで送信する(できればGitHub Actionsでデプロイできるようにしたい)
3. 発行されたSSN Webhook URLをCosenseプロジェクトに登録する
https://gyazo.com/e35a05914063099cc5477f31820926c0
public.icon