Lobby Bots API

Fragt ab, was die Bots in den Lobbys sehen: zum Beispiel den Ping eines Spielers aus der Tab-Liste.

Schnellstart: in einem anderen Projekt anzeigen

1. Im Dashboard unter „Discord & API“ einen Schlüssel erzeugen. 2. Diesen Code in dein Projekt kopieren und DEIN_SCHLÜSSEL ersetzen. Das funktioniert direkt im Browser (CORS ist freigegeben) und genauso in Node.js.

const API = 'http://127.0.0.1:8421/v1';
const KEY = 'DEIN_SCHLÜSSEL';

async function lobbyBots(path) {
  const res = await fetch(API + path, { headers: { 'x-api-key': KEY } });
  const data = await res.json();
  if (!res.ok) throw new Error(data.message);
  return data;
}

// Ping eines Spielers
const p = await lobbyBots('/ping/Notch');
console.log(`${p.name}: ${p.ping} ms in Lobby ${p.lobby}`);

// Die 20 zuletzt gesehenen Spieler, die gerade online sind
const { players } = await lobbyBots('/pings?online=1&limit=20');
for (const s of players) console.log(s.name, s.ping + ' ms');

// Ping-Verlauf (z. B. für ein Diagramm)
const { history } = await lobbyBots('/ping/Notch/history');
// [{ "time": 1793700000, "ping": 45 }, ...]

Zeiten sind Unix-Sekunden: new Date(time * 1000) macht daraus ein Datum.

Grundlagen

Basis-Adresse: http://127.0.0.1:8421 (nur von diesem Computer erreichbar)

Anmeldung: Im Dashboard unter „Discord & API“ einen Schlüssel erzeugen. Er wird entweder als Header oder als Parameter mitgeschickt:

x-api-key: DEIN_SCHLÜSSEL
GET /v1/ping/Notch?key=DEIN_SCHLÜSSEL

Voraussetzung: Das Dashboard muss entsperrt sein, sonst antwortet die API mit 503 locked.

Antworten: immer JSON. Fehler haben die Form {"error": "code", "message": "Text"}.

Daten: Die Bots kennen nur Spieler, die sie in der Tab-Liste einer Lobby gesehen haben, in der gerade ein Bot sitzt. Der Ping ist der Wert aus der Tab-Liste, kein eigener Messwert.

Endpunkte

GET /v1/ping/{name}

Ping eines Spielers.

curl -H "x-api-key: DEIN_SCHLÜSSEL" http://127.0.0.1:8421/v1/ping/Notch
{
  "name": "Notch",
  "ping": 45,
  "online": true,
  "lobby": 7,
  "last_seen": 1793654270,
  "age_seconds": 3
}
FeldBedeutung
pingPing in Millisekunden laut Tab-Liste (letzter bekannter Wert)
onlinetrue, wenn der Spieler gerade in einer Lobby mit Bot ist
lobbyBedWars-Lobby-Nummer, in der er zuletzt gesehen wurde
last_seenUnix-Zeit in Sekunden
age_secondsSekunden seit der letzten Sichtung

GET /v1/ping/{name}/history

Die letzten bis zu 30 Ping-Werte eines Spielers, älteste zuerst. Ein neuer Wert wird gespeichert, wenn sich der Ping um mindestens 10 ms ändert oder 5 Minuten seit dem letzten vergangen sind.

{
  "name": "Notch",
  "ping": 52,
  "history": [ { "time": 1793700000, "ping": 45 }, { "time": 1793700300, "ping": 52 } ]
}

GET /v1/pings

Zuletzt gesehene Spieler mit Ping, neueste zuerst.

ParameterBedeutung
limitWie viele (Standard 100, höchstens 1000)
sinceNur Sichtungen ab dieser Unix-Zeit
online=1Nur Spieler, die gerade in einer Lobby mit Bot sind
GET /v1/pings?online=1&limit=2
{
  "count": 2,
  "players": [
    { "name": "Notch", "ping": 45, "online": true, "lobby": 7, "last_seen": 1793700300, "age_seconds": 1 },
    { "name": "Steve", "ping": 88, "online": true, "lobby": 3, "last_seen": 1793700299, "age_seconds": 2 }
  ]
}

GET /v1/player/{name}

Wie ping, dazu uuid und tracked (steht der Spieler auf der Tracker-Liste?).

GET /v1/lobbies

Lobbys, in denen gerade ein Bot online ist, mit Spielerzahl.

{ "lobbies": [ { "bot": "MeinBot", "lobby": 7, "lobbyname": "bedwarslobby7", "players": 34 } ] }

GET /v1/tracked

Alle Spieler der Tracker-Liste mit Notiz und letzter Sichtung (seen ist null, wenn noch nie gesehen).

Fehlercodes

StatusCodeBedeutung
400bad_nameKein gültiger Minecraft-Name (1–16 Zeichen: Buchstaben, Zahlen, _)
401bad_keySchlüssel fehlt oder ist falsch
404not_seenDie Bots haben den Spieler noch nicht gesehen
503lockedDashboard ist gesperrt
503no_keyEs wurde noch kein API-Schlüssel erzeugt

Speicherung

Alle Pings liegen platzsparend in data/pings.txt, eine Zeile pro Spieler, alle 30 Sekunden gespeichert:

Notch 069a79f444e94726a5befca90e38aaf5 7 1793700300 52 300:45,0:52

Name, UUID ohne Striche, Lobby, zuletzt gesehen (Unix-Zeit), letzter Ping, dann der Verlauf als Sekunden-vorher:Ping.

Maschinenlesbar

Die Beschreibung im OpenAPI-Format: /openapi.json