- JavaScript 55.2%
- Python 36%
- HTML 8.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| static | ||
| .gitignore | ||
| app.py | ||
| README.md | ||
| requirements.txt | ||
| test_app.py | ||
| test_timeline.js | ||
kasucord
Discord のサーバー・DM・チャンネル・会話を操作できる軽量な Web クライアントです。DEFAULT_TOKEN を設定すると、ホームに公開のサーバー横断タイムラインを表示します。FastAPI が Discord API との通信を中継し、画面は追加のビルドなしで動きます。
起動
プロジェクトディレクトリで実行します。
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
uvicorn app:app --host 0.0.0.0 --port 8000
公開タイムラインを使う場合は、起動前に環境変数を設定します。
export DEFAULT_TOKEN='Discordのトークン'
export DEFAULT_TOKEN_KIND='user' # Bot トークンなら bot
uvicorn app:app --host 0.0.0.0 --port 8000
DEFAULT_TOKEN はタイムラインの読み取り専用 API にだけ使われます。最初にホームのタイムラインを表示し、ログイン確認を待たずに読み込みを開始し、最大 3 サーバーを並列で取得します。チャンネルごとに取得できたメッセージから順次表示します。閲覧可能なテキストチャンネルからメッセージを取得し、タイムライン全体で最新の 100 件を表示します。メッセージの送信や編集には、画面のログインボタンから別途トークンを入力します。ログイン画面やチャンネル画面からは「タイムラインへ戻る」でホームに戻れます。
キャッシュ
1 KB 以上のレスポンスは、対応ブラウザに gzip 圧縮して転送します。画面外のアバターとサーバーアイコンは遅延読み込みします。
トップページと /static/app.js、/static/style.css の成功レスポンスには 10 分のキャッシュヘッダーを返します。/api/timeline/* の全レスポンス(エラーを含む)には、リクエストごとに 540~600 秒からランダムに選んだ値を Cache-Control: public, max-age=... と CDN-Cache-Control: max-age=... の両方に設定します。その他のエラーと操作用 API は Cache-Control: no-store のままです。
Cloudflare で JSON API とエラー応答をキャッシュする場合は、/api/timeline/ から始まるパスだけを対象にした Cache Rule で Eligible for cache を指定し、Edge TTL はオリジンのキャッシュヘッダーを尊重する設定にしてください。Status Code TTL や固定の Edge TTL を設定すると、応答ごとのランダムな値が上書きされます。Cloudflare は GET 以外をキャッシュしません。詳しくは Cloudflare の Cache Rule 設定を参照してください。
同じ端末では http://127.0.0.1:8000、別の端末では http://<サーバーのIP>:8000 を開き、トークンの種類を選んで入力します。0.0.0.0 は全ネットワークインターフェースで待ち受けるための指定で、ブラウザの接続先には使いません。Bot トークンを使う場合は、Bot をサーバーに追加し、必要なチャンネル閲覧・メッセージ権限を与えてください。メッセージ本文を読むには Bot の Message Content Intent も必要な場合があります。Bot のサーバー一覧や DM 一覧が取得できない場合は、左の + からサーバー ID を入力できます。
操作
- サーバー・DM・チャンネルの閲覧
- 直近 50 件のメッセージ表示と過去ログの追加読み込み
- メッセージ送信、自己メッセージの編集・削除、リアクション
- 12 秒間隔の更新と手動更新
DEFAULT_TOKEN の値はサーバーからブラウザへ返しません。ただし、タイムラインの内容とサーバー名は、サイトにアクセスできる全員に公開されます。操作用トークンはサーバープロセスのメモリにのみ保持し、ブラウザにはセッション Cookie のみ保存します。ログアウトまたはサーバーの再起動で破棄されます。ネットワーク越しの利用では、トークンを送る通信を保護するため HTTPS のリバースプロキシや Cloudflare Tunnel を使ってください。0.0.0.0 で起動すると LAN からも接続できます。
注意: ユーザートークン利用は Discord の公式 Bot/OAuth2 フローではありません。Discord は通常のユーザーアカウントの自動操作を禁止しています。利用条件を確認し、公式にサポートされる方法が必要なら Bot トークンを選んでください。Bot には一般ユーザーの DM 一覧など、一部使えない機能があります。