このチュートリアルでは、Noxyrサーバー APIキーの生成、Node.jsとブラウザからの6つのエンドポイントの呼び出し、そして公開ページへのライブのDiscordデータの表示を説明します。ボットに接続しなくても更新される、本物のメンバーカウンターをWebサイトに置きたいと思ったことがあるなら、これがその方法です。
手順1:キーを生成する
Noxyrのダッシュボードを開き、サーバーを選んでAPI Accessに進みます。Generate API Keyをクリックします。キー(nxr_ で始まります)は一度だけ表示されるので、今すぐ環境変数にコピーしてください。サーバー側に保存されるのはSHA-256のハッシュだけなので、キーを紛失した場合は再生成が必要になります。
手順2:スコープを設定する
キーの下にある6つのトグルで、キーが読み取れる内容を制御します。サーバー概要、チケット、アクティビティ、インボイス、レビュー、ギブアウェイです。不要なものはオフにしてください。無効にされたスコープには即座に403が返るので、キーが漏えいしても、有効にしていないスコープは読み取られません。
手順3:curlで動作確認する
curl https://noxyrbot.com/api/v1/server \
-H "Authorization: Bearer nxr_YOUR_KEY"
サーバーのID、名前、アイコンのURL、メンバー数、オンライン数、ブーストを含むJSONが表示されるはずです。
手順4:Node.jsから呼び出す
const KEY = process.env.NOXYR_API_KEY;
async function getStats() {
const [server, tickets, activity] = await Promise.all([
fetch('https://noxyrbot.com/api/v1/server', { headers: { Authorization: `Bearer ${KEY}` } }),
fetch('https://noxyrbot.com/api/v1/tickets', { headers: { Authorization: `Bearer ${KEY}` } }),
fetch('https://noxyrbot.com/api/v1/activity?days=7', { headers: { Authorization: `Bearer ${KEY}` } })
]);
return {
server: await server.json(),
tickets: await tickets.json(),
activity: await activity.json()
};
}
getStats().then(console.log);
手順5:ブラウザから呼び出す
CORSは開放されているので、静的サイトから直接fetchできます。実際のユーザーに配信するクライアント側のコードにキーを埋め込まないでください。DevToolsを開いた人なら誰でもキーを見られてしまいます。安全なパターンは2つあります。
- プロキシの裏にある公開ダッシュボード:お使いのサーバー側にある小さなサーバーレス関数が、環境変数からキーを読み取り、Noxyrを呼び出して、そのJSONをブラウザに転送します。
- 信頼できる内部ツール:ページを自分の認証で保護してから、キーを渡します。
// Cloudflare Worker / Vercel Edge - key stays on the server
export default {
async fetch(request, env) {
const upstream = await fetch('https://noxyrbot.com/api/v1/server', {
headers: { Authorization: `Bearer ${env.NOXYR_API_KEY}` }
});
return new Response(await upstream.text(), {
headers: { 'content-type': 'application/json', 'cache-control': 'public, max-age=60' }
});
}
};
手順6:表示する
<div id="members">…</div>
<script>
fetch('/api/live-server-stats')
.then((r) => r.json())
.then((data) => {
document.getElementById('members').textContent =
`${data.memberCount.toLocaleString()} members · ${data.onlineCount} online`;
});
</script>
レート制限とキャッシュ
キーごとに1分あたり60リクエストです。プライベートなダッシュボードではリアルタイムが快適ですが、公開サイトでは無駄になります。プロキシ層で上流のレスポンスを30〜60秒キャッシュすれば、上限にはまず近づきません。
エラーレスポンス
401 unauthorized:キーがない、または不正です。403 key_disabled:ダッシュボードでキーがオフになっています。403 scope_disabled:そのエンドポイントのスコープがオフになっています。ダッシュボードで修正してください。404 guild_unavailable:ボットがそのサーバーから削除されています。429 rate_limited:リクエストの速度を落としてください。
APIがこの形をしている理由を知りたい場合は、Discordボットの API設計の原則をご覧ください。