Bibliothek

Räume erstellen und beitreten

createRoom, joinRoom und alle Konfigurationsoptionen.

Einen Raum erstellen: createRoom()

Gibt einen BonkRoom zurück, der bereits verbunden und aktiv ist. Wird erst aufgelöst, nachdem der Raumlink vom Server eingetroffen ist.

ts
import { createRoom } from 'bonktools';

const room = await createRoom({
  auth: { type: 'registered', username: '...', password: '...' },
  desiredState: {
    roomName: 'Mein Raum',
    password: '',      // leerer String = kein Passwort
    maxPlayers: 6,
    mode: 'b',
    rounds: 3,
  },
  hidden: false,       // erscheint in der öffentlichen Liste
  timeoutMs: 10_000,   // lehnt mit RoomCreationTimeoutError ab, wenn es länger dauert
});

console.log(room.shareLink); // https://bonk.io/123456abcde

Optionen von createRoom()

FeldTypStandardBeschreibung
authAuthOptionsAuthentifizierungsstrategie (erforderlich)
desiredStateDesiredRoomStateRaumkonfiguration (erforderlich)
hiddenbooleanfalseBlendet den Raum in der öffentlichen Liste aus
minLevelnumber0Mindestlevel für den Beitritt
maxLevelnumber999Höchstlevel für den Beitritt
timeoutMsnumber10000Maximale Zeit bis zum Empfang des Raumlinks
protocolVersionnumber49bonk.io-Protokollversion
reconnectPolicyReconnectPolicyOptionsStandardwerteReconnect-Richtlinie (siehe 24/7-Sitzungen)

DesiredRoomState

ts
interface DesiredRoomState {
  roomName: string;
  password: string;       // '' = kein Passwort
  maxPlayers: number;     // 1–8
  mode: string | number;  // 'b', 'ar', 'ard', 'sp', 'v', 'f'...
  engine?: string;        // 'b', 'f'...
  rounds: number;
  map?: string | null;    // LZ-String-Blob der Karte
}

Der Link hat die Form https://bonk.io/<6-stellige ID><Bypass>. Die Bibliothek füllt die ID mit führenden Nullen auf (IDs unter 100000 ergeben Links wie 006813vnxpi).

Einem Raum beitreten: joinRoom()

ts
import { joinRoom } from 'bonktools';

const room = await joinRoom('https://bonk.io/123456abcde', {
  auth: { type: 'registered', username: '...', password: '...' },
  role: 'host',     // 'host' (Team 1) oder 'spectator' (Team 0)
  password: '',     // Raumpasswort, falls vorhanden
});

Die Bibliothek zerlegt die URL, ermittelt den Server über autojoin.php und verbindet sich. Sie wird nach Erhalt des Raumzustands aufgelöst oder lehnt mit RoomJoinTimeoutError ab.

Sie akzeptiert auch eine bereits aufgelöste Adresse, ohne HTTP-Aufruf:

ts
const room = await joinRoom(
  { server: 'b2seattle1', joinId: '...', bypass: 'abcde' },
  { auth, role: 'spectator' },
);

Fehler

ts
import { RoomCreationTimeoutError, RoomJoinTimeoutError } from 'bonktools';

try {
  const room = await createRoom({ auth, desiredState });
} catch (err) {
  if (err instanceof RoomCreationTimeoutError) {
    // der Raumlink kam nicht innerhalb von timeoutMs an
  }
}

Siehe auch Fehler und Fehlerbehebung.