Ce tutoriel explique comment générer une clé d'API serveur Noxyr, appeler les six points d'accès depuis Node.js et le navigateur, et afficher des données Discord en direct sur une page publique. Si vous avez déjà voulu afficher un vrai compteur de membres sur votre site, qui se met à jour sans connexion de bot, c'est exactement ce qu'il vous faut.

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

Étape 1 : générer la clé

Ouvrez le tableau de bord Noxyr, choisissez votre serveur et allez dans Accès API. Cliquez sur Générer une clé API. La clé (qui commence par nxr_) n'est affichée qu'une seule fois : copiez-la immédiatement dans une variable d'environnement. Seul un hachage SHA-256 est stocké côté serveur. Une clé perdue doit donc être régénérée.

Étape 2 : définir les périmètres

Sous la clé, six interrupteurs contrôlent ce que la clé peut lire : Vue d'ensemble du serveur, Tickets, Activité, Factures, Avis, Concours. Désactivez tout ce dont vous n'avez pas besoin. Un périmètre désactivé renvoie immédiatement une erreur 403. Ainsi, une clé qui fuite ne peut pas lire les périmètres que vous n'avez jamais activés.

Étape 3 : test rapide avec curl

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

Vous devriez voir du JSON contenant l'identifiant, le nom, l'URL de l'icône, le nombre de membres, le nombre de membres en ligne et les boosts de votre serveur.

Étape 4 : l'appeler depuis 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);

Étape 5 : l'appeler depuis le navigateur

Le CORS est ouvert, vous pouvez donc effectuer la requête directement depuis un site statique. N'intégrez pas la clé dans du code côté client livré aux vrais utilisateurs : toute personne ouvrant les outils de développement la verrait. Deux schémas sûrs :

  • Tableau de bord public derrière un proxy : une petite fonction serverless de votre côté lit la clé depuis une variable d'environnement, appelle Noxyr et transmet le JSON au navigateur.
  • Outil interne de confiance : protégez la page par votre propre authentification, puis injectez la clé.
// 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' }
        });
    }
};

Étape 6 : l'afficher

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

Limites de requêtes et mise en cache

60 requêtes par minute et par clé. Le temps réel est agréable sur un tableau de bord privé, mais gaspilleur sur un site public. Mettez en cache les réponses amont pendant 30 à 60 secondes dans votre couche de proxy, et vous n'approcherez jamais la limite.

Réponses d'erreur

  • 401 unauthorized : clé absente ou incorrecte.
  • 403 key_disabled : clé désactivée sur le tableau de bord.
  • 403 scope_disabled : le périmètre du point d'accès est désactivé ; corrigez-le sur le tableau de bord.
  • 404 guild_unavailable : le bot a été retiré de ce serveur.
  • 429 rate_limited : ralentissez.

Vous voulez comprendre pourquoi l'API est conçue ainsi ? Lisez les principes de conception d'API pour les bots Discord.