南山大学WebClass専用のDiscord通知チェッカーです。
3時間ごとに自動実行し、ID/パスワードでWebClassへログインして、次の条件だけDiscordへ通知します。
- 新しい課題を検出した
- 提出期限が変更された
- 提出期限まで24時間以内になった
- 未提出のまま提出期限当日になった(Bot所有者のDMのみ)
Discord上の通常メッセージには反応しません。
スラッシュコマンド用にBotを常時起動すると、次のコマンドも使えます。
/webclass-all: 現在検出できる課題を表示/webclass-unsubmitted: 未提出または未受験と判定できる課題だけ表示(所有者専用)/webclass-next: 提出期限が最も近い未提出課題を表示(所有者専用)/webclass-closest: 提出状況を問わず、提出期限が最も近い課題を表示/webclass-status: 自動巡回の最終成功時刻や連続失敗数を表示
/webclass-all の include-submitted オプションを False にすると、提出済み課題を除外できます。このオプションは所有者専用です。課題一覧は提出期限が近い順に表示されます。
npm install
npx playwright install chromium.env.example を参考に .env を作成します。.env はGitに含めません。
DISCORD_BOT_TOKEN=
DISCORD_CHANNEL_ID=
# 通常はDiscordアプリの所有者を自動取得します。自動取得できない場合のみ設定します。
# DISCORD_OWNER_USER_ID=
WEBCLASS_LOGIN_URL=https://webclass.nanzan-u.ac.jp/webclass/login.php
WEBCLASS_USER_ID=
WEBCLASS_PASSWORD=必要に応じて、WebClassの課題一覧ページURLを指定できます。
WEBCLASS_TARGET_URLS=https://webclass.nanzan-u.ac.jp/webclass/...npm run test:discord指定チャンネルにテストメッセージが出ればOKです。
npm run inspect:webclass取得できた課題候補をコンソールに出し、ログイン後ページのHTMLを debug/webclass.html に保存します。課題が検出されない場合は、WebClassで課題一覧ページを開き、そのURLを .env の WEBCLASS_TARGET_URLS に設定してください。
npm run check初回実行時は現在見つかった課題候補を data/state.json に記録します。以降の実行で差分と締切を通知します。
自動通知の条件は次の4種類です。
- 新しい課題が追加された
- 提出期限が変更された
- 提出期限まで24時間以内になった
- 未提出のまま提出期限当日になった(Bot所有者のDMのみ)
新規課題を検出した時点で既に24時間以内または締切当日だった場合、その課題について後続の24時間通知・当日通知は送りません。また、締切当日の未提出通知と24時間通知が同時に成立する場合は、当日通知だけを送ります。
24時間前の通知には提出済み・未提出の状態を表示しません。当日の未提出通知だけは共有チャンネルへ流さず、Bot所有者のDMへ送信します。
WebClass取得に失敗した場合は最大3回まで再試行します。定期巡回が3回連続で失敗するとDiscordへ障害通知を送り、成功時に連続失敗数をリセットします。同じ定期巡回が重複起動した場合は、後から始まった処理をスキップします。
Botを起動します。
npm run bot起動時に、DISCORD_CHANNEL_ID のチャンネルがあるサーバーへスラッシュコマンドを登録します。明示的にサーバーを指定したい場合は .env に DISCORD_GUILD_ID を追加してください。
Windowsログオン時にBotを常時起動したい場合は、別のタスクとして登録します。
npm run bot:schedule:windowsログは logs/bot-YYYY-MM-DD.log に日別で出力されます。
Windowsタスクスケジューラに登録します。
npm run schedule:windows登録後は、Windowsの「タスク スケジューラ」で WebClass Discord Notifier を確認できます。ログは logs/check-YYYY-MM-DD.log に日別で出力されます。
ログは標準で30日間保存します。.env の LOG_RETENTION_DAYS で変更できます。巡回状態は data/runtime-status.json に保存されます。