教室アナウンス API w/ Discord 🥂 for @iputapp
Environments | Languages | Linters | Frameworks | Libraries | Testing | CI/CD | PaaS |
---|---|---|---|---|---|---|---|
node = ">=22"
pnpm = ">=10"
Tip
詳細は.prototools
およびpackage.json
のengines|packageManager
を参照する。
NODE_ENV=development
API_ENDPOINT_URL=https://your_api_endpoint_url
API_ENDPOINT_SECRET=your_generated_secret
DISCORD_TOKEN=your_discord_token
DISCORD_APPLICATION_ID=your_discord_application_id
DISCORD_PUBLIC_KEY=your_discord_public_key
DISCORD_CHANNEL_ID=your_channel_id
GOOGLE_CLIENT_EMAIL=your_google_client_email
GOOGLE_PRIVATE_KEY=your_google_private_key
SPREADSHEET_ID=your_spreadsheet_id
Tip
詳細は.env.example
を参照する。
pnpm i
Important
初回インストールの後(保存時のフォーマットが動作しない場合)は、VS Code (IDE)を再起動する。
pnpm dev
pnpm dev
pnpm start
ngrokを使用してlocalhost:8787
をパブリックに公開する。
Important
ngrok - Setup & Installationから環境に合わせてngrok
を導入する。
Windows はDownload for Windows (64-Bit)
でダウンロードおよび解凍した exe ファイルを、レポジトリのルートディレクトリに置く。
Tip
テスト用 Discord App INTERACTIONS ENDPOINT URL
の設定に利用する。
pnpm lint
pnpm format
pnpm deploy:mini
pnpm register
Tip
スラッシュコマンドの一覧はsrc/constants/discord.ts
のDISCORD_COMMANDS
を参照する。
pnpm gen:secret
Important
生成したキーは環境変数 API_ENDPOINT_SECRET
に設定する。
POST /v1/discord/interaction
Discord App INTERACTIONS ENDPOINT URL
の設定に利用する。
GET /v1/google/sheets/room
Google Sheets から教室情報を取得する。
クエリパラメータ | 値 | 必須 |
---|---|---|
period | today または week | ❌ |
例: 今週の教室 /v1/google/sheets/room?period=week
Tip
period
は省略できる。デフォルトはperiod=today
になる。
POST /v1/cron
定期アナウンスの Cron に設定する。
センシティブな API エンドポイントは認証を設けている。
認証付きのパスは以下:
async function makeAuthenticatedRequest(path: string) {
const timestamp = Date.now().toString();
const apiKey = "your_secure_random_string"; // API_ENDPOINT_SECRETと同じ値
// 署名の生成
const payload = timestamp + path;
const signature = await generateHMAC(payload, apiKey);
const response = await fetch(`https://your-api.com${path}`, {
headers: {
"X-Request-Timestamp": timestamp,
"X-Signature": signature,
},
});
return response;
}
Note
generateHMAC()
の内容はsrc/utils/crypto.ts
を参照する。
wrangler.toml
のcrons
を変更する。
Tip
cron のタイムゾーンはUTC
のため、日本時間(JST)-9時間
を設定する。