Dieses Tutorial führt dich durch das Erzeugen eines Noxyr-Server-API-Schlüssels, den Aufruf der sechs Endpunkte aus Node.js und dem Browser und das Anzeigen von Live-Discord-Daten auf einer öffentlichen Seite. Wenn du schon immer einen echten Mitgliederzähler auf deiner Website wolltest, der sich ohne Bot-Verbindung aktualisiert, dann ist das genau das Richtige.
Schritt 1: Den Schlüssel erzeugen
Öffne das Noxyr-Dashboard, wähle deinen Server und geh zu API-Zugriff. Klicke auf API-Schlüssel erzeugen. Der Schlüssel (beginnt mit nxr_) wird nur einmal angezeigt. Kopiere ihn sofort in eine Umgebungsvariable. Serverseitig wird nur ein SHA-256-Hash gespeichert, ein verlorener Schlüssel muss also neu erzeugt werden.
Schritt 2: Die Scopes festlegen
Unter dem Schlüssel steuern sechs Schalter, was der Schlüssel lesen darf: Server-Übersicht, Tickets, Aktivität, Rechnungen, Bewertungen, Gewinnspiele. Schalte alles aus, was du nicht brauchst. Ein deaktivierter Scope liefert sofort 403 zurück, ein geleakter Schlüssel kann also keine Scopes lesen, die du nie aktiviert hast.
Schritt 3: Curl-Schnelltest
curl https://noxyrbot.com/api/v1/server \
-H "Authorization: Bearer nxr_YOUR_KEY"
Du solltest JSON sehen mit der ID deines Servers, dem Namen, der Icon-URL, der Mitgliederzahl, der Anzahl Online-Mitglieder und den Boosts.
Schritt 4: Aufruf aus 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);
Schritt 5: Aufruf aus dem Browser
CORS ist offen, du kannst also direkt von einer statischen Seite abrufen. Bette den Schlüssel nicht in clientseitigen Code ein, der an echte Nutzer ausgeliefert wird: Jeder, der die Entwicklertools öffnet, würde ihn sehen. Zwei sichere Muster:
- Öffentliches Dashboard hinter einem Proxy: Eine kleine Serverless-Funktion auf deiner Seite liest den Schlüssel aus einer Umgebungsvariable, ruft Noxyr auf und leitet das JSON an den Browser weiter.
- Vertrauenswürdiges internes Tool: Schütze die Seite mit deiner eigenen Authentifizierung und gib den Schlüssel erst dann hinein.
// 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' }
});
}
};
Schritt 6: Darstellen
<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>
Rate-Limits und Caching
60 Anfragen pro Minute und Schlüssel. Echtzeit fühlt sich auf einem privaten Dashboard großartig an, ist auf einer öffentlichen Seite aber verschwenderisch. Speichere Antworten vom Upstream für 30 bis 60 Sekunden in deiner Proxy-Schicht zwischen, dann kommst du dem Limit nie nahe.
Fehlerantworten
401 unauthorized: Schlüssel fehlt oder ist ungültig.403 key_disabled: Schlüssel im Dashboard ausgeschaltet.403 scope_disabled: Der Scope des Endpunkts ist ausgeschaltet; im Dashboard beheben.404 guild_unavailable: Der Bot wurde von diesem Server entfernt.429 rate_limited: Werde langsamer.
Willst du wissen, warum die API so aufgebaut ist? API-Design-Prinzipien für Discord-Bots.