Questo tutorial ti guida nella generazione di una chiave API del server di Noxyr, nelle chiamate ai sei endpoint da Node.js e dal browser, e nella visualizzazione di dati Discord in tempo reale su una pagina pubblica. Se hai sempre voluto un vero contatore di membri sul tuo sito che si aggiorni senza una connessione al bot, è proprio questo.

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

Passo 1: genera la chiave

Apri la dashboard di Noxyr, scegli il tuo server e vai su Accesso API. Clicca su Genera chiave API. La chiave (inizia con nxr_) viene mostrata una sola volta: copiala subito in una variabile d'ambiente. Sul server viene salvato solo un hash SHA-256, quindi se perdi la chiave devi generarne una nuova.

Passo 2: imposta gli scope

Sotto la chiave, sei interruttori controllano ciò che la chiave può leggere: Panoramica del server, Ticket, Attività, Fatture, Recensioni, Giveaway. Disattiva tutto ciò che non ti serve: uno scope disattivato restituisce subito 403, così una chiave trapelata non può comunque leggere gli scope che non hai mai attivato.

Passo 3: test rapido con curl

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

Dovresti vedere un JSON con l'id, il nome, l'URL dell'icona, il numero di membri, il numero di utenti online e i boost del tuo server.

Passo 4: chiamala da 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);

Passo 5: chiamala dal browser

Il CORS è aperto, quindi puoi fare fetch direttamente da un sito statico. Non inserire la chiave nel codice lato client che arriva agli utenti reali: chiunque apra gli strumenti per sviluppatori la vedrebbe. Due schemi sicuri:

  • Dashboard pubblica dietro un proxy: una piccola funzione serverless sul tuo lato legge la chiave da una variabile d'ambiente, chiama Noxyr e inoltra il JSON al browser.
  • Strumento interno fidato: proteggi la pagina con la tua autenticazione, poi inserisci la chiave.
// 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' }
        });
    }
};

Passo 6: visualizzalo

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

Limiti di richiesta e cache

60 richieste al minuto per chiave. Il tempo reale è ottimo su una dashboard privata, ma spreca risorse su un sito pubblico: metti in cache le risposte dell'upstream per 30–60 secondi nel tuo livello proxy e non ti avvicinerai mai al limite.

Risposte di errore

  • 401 unauthorized: chiave mancante o non valida.
  • 403 key_disabled: chiave disattivata nella dashboard.
  • 403 scope_disabled: lo scope dell'endpoint è disattivato; correggilo nella dashboard.
  • 404 guild_unavailable: il bot è stato rimosso da quel server.
  • 429 rate_limited: rallenta.

Vuoi sapere perché l'API è strutturata in questo modo? Principi di progettazione delle API per i bot Discord.