Ten samouczek przeprowadzi cię przez wygenerowanie klucza API serwera Noxyr, wywoływanie sześciu endpointów z Node.js i przeglądarki oraz wyświetlanie danych z Discorda na żywo na publicznej stronie. Jeśli kiedykolwiek chciałeś mieć na swojej stronie prawdziwy licznik członków, który aktualizuje się bez połączenia z botem, to właśnie to.

A key is generated, a curl request is sent, and the JSON response renders as live text on a page. 1 nxr_••••••••• 2 curl /api/v1/server 3 { memberCount: 812 } 812 members online

Krok 1: wygeneruj klucz

Otwórz panel Noxyr, wybierz swój serwer i przejdź do Dostęp do API. Kliknij Wygeneruj klucz API. Klucz (zaczyna się od nxr_) jest pokazywany tylko raz, więc od razu skopiuj go do zmiennej środowiskowej. Po stronie serwera przechowywany jest wyłącznie hash SHA-256, więc zgubiony klucz oznacza konieczność wygenerowania nowego.

Krok 2: ustaw zakresy

Pod kluczem sześć przełączników określa, co klucz może odczytać: Przegląd serwera, Tickety, Aktywność, Faktury, Recenzje, Giveaway. Wyłącz wszystko, czego nie potrzebujesz - wyłączony zakres zwraca od razu 403, więc nawet wyciekły klucz nie odczyta zakresów, których nigdy nie włączyłeś.

Krok 3: test curl

curl https://noxyrbot.com/api/v1/server \
  -H "Authorization: Bearer nxr_YOUR_KEY"

Powinieneś zobaczyć JSON z identyfikatorem serwera, nazwą, adresem URL ikony, liczbą członków, liczbą osób online i boostami.

Krok 4: wywołaj z 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);

Krok 5: wywołaj z przeglądarki

CORS jest otwarty, więc możesz pobierać dane bezpośrednio ze statycznej strony. Nie osadzaj klucza w kodzie po stronie klienta, który trafia do prawdziwych użytkowników: każdy, kto otworzy DevTools, go zobaczy. Dwa bezpieczne wzorce:

  • Publiczny panel za proxy: niewielka funkcja serverless po twojej stronie odczytuje klucz ze zmiennej środowiskowej, wywołuje Noxyr i przekazuje JSON do przeglądarki.
  • Zaufane narzędzie wewnętrzne: zabezpiecz stronę własnym uwierzytelnianiem, a dopiero potem wstaw klucz.
// 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' }
        });
    }
};

Krok 6: wyrenderuj dane

<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>

Limity żądań i cache

60 żądań na minutę na klucz. Odświeżanie w czasie rzeczywistym dobrze wygląda na prywatnym panelu, ale na publicznej stronie jest marnotrawstwem - buforuj odpowiedzi z upstreamu przez 30–60 sekund w warstwie proxy, a nigdy nie zbliżysz się do limitu.

Odpowiedzi z błędami

  • 401 unauthorized: brakujący lub nieprawidłowy klucz.
  • 403 key_disabled: klucz wyłączony w panelu.
  • 403 scope_disabled: zakres tego endpointu jest wyłączony; napraw to w panelu.
  • 404 guild_unavailable: bot został usunięty z tego serwera.
  • 429 rate_limited: zwolnij.

Chcesz wiedzieć, dlaczego API ma taki kształt? Zasady projektowania API dla botów Discord.