Bibliothek
Zustand und Events
room.state und alle typisierten Events von BonkRoom.
BonkRoom erweitert EventEmitter3 um die Event-Map BonkRoomEvents. Jedes Event ist typisiert: TypeScript warnt dich, wenn Name oder Argumenttyp nicht stimmen.
Aktueller Zustand: room.state
ts
const state = room.state;
state.myId; // numerische ID des Bots (null vor dem Beitritt)
state.hostId; // ID des aktuellen Hosts
state.players; // Map<id, PlayerData>
state.inGame; // true während einer Partie
state.teamsLocked; // true, wenn die Teams gesperrt sindPlayerData
| Feld | Beschreibung |
|---|---|
id | Numerische ID im Raum |
peerID | ID der WebRTC-Verbindung (nützlich, um Input-Frames zuzuordnen) |
userName, guest, level | Identität des Spielers |
team | 0 spec · 1 ffa · 2 rot · 3 blau · 4 grün · 5 gelb |
ready, tabbed | Als bereit markiert / Tab im Hintergrund |
ping, xp, balance | Latenz, geschätzte XP und Partie-Balance |
So hörst du zu
ts
room.on('player-join', (p) => console.log(p.userName, p.id, p.level));
room.on('chat-message', (p) => {
const nome = room.state.players.get(p.id)?.userName;
console.log(`[${nome}]: ${p.message}`);
});
room.on('room-dead', (reason) => {
// reason.kind: 'socket-disconnect' | 'status-banned' | 'status-room_full' | 'max-retries-exceeded'
});
room.on('room-rebuilt', (link) => console.log('neue URL:', link));Event-Tabelle
| Event | Payload | Wann |
|---|---|---|
room-created | RoomCreatedPacket | Der Bot hat den Raum erstellt |
room-join | RoomJoinPacket | Der Bot ist einem Raum beigetreten |
player-join | PlayerJoinPacket | Ein Spieler ist beigetreten |
player-leave | PlayerLeavePacket | Ein Spieler ist gegangen |
host-leave | HostLeavePacket | Der Host ist gegangen (newHostId = -1: Raum geschlossen) |
team-change | TeamChangePacket | Ein Spieler hat das Team gewechselt |
ready-change | ReadyChangePacket | Als bereit markiert/entmarkiert |
tabbed | TabbedPacket | Hat den Tab verlassen / ist zurückgekehrt |
username-change | UsernameChangePacket | Name geändert |
player-pings | PlayerPingsPacket | Ping aller Spieler |
game-start | GameStartPacket | Partie gestartet |
game-end | GameEndPacket | Partie beendet |
all-ready-reset | AllReadyResetPacket | Das „Bereit“ aller wurde zurückgesetzt |
chat-message | ChatMessagePacket | Chat-Nachricht |
player-kick | PlayerKickPacket | Ein Spieler wurde rausgeworfen |
countdown / abort-countdown | CountdownPacket / AbortCountdownPacket | Countdown |
teamlock-toggle | TeamlockTogglePacket | Teams gesperrt/entsperrt |
gamemode-change | GamemodeChangePacket | Spielmodus geändert |
change-rounds | ChangeRoundsPacket | Runden geändert |
map-switch | MapSwitchPacket | Karte gewechselt |
balance-set | BalanceSetPacket | Balance eines Spielers geändert |
player-level-up | PlayerLevelUpPacket | Ein Spieler ist aufgestiegen |
room-name-update / room-password-update | Pakete | Raumname/-passwort geändert |
status-message | StatusMessagePacket | Server-Hinweis (Fehler, Ratenlimits) |
share-link | ShareLinkPacket | Raumlink verfügbar |
room-dead | RoomDeadReason | Der Raum ist ausgefallen (mit Wiederholung oder endgültig) |
room-rebuilt | string | Der Raum wurde neu erstellt (neuer Link) |
raw-packet | IncomingPacket | UnknownPacket | Jedes Rohpaket, auch nicht zugeordnete |
Von Anti-AFK hinzugefügte Events
| Event | Payload | Wann |
|---|---|---|
peer-input | { playerId, peerID, data } | Über WebRTC empfangener Input-Frame eines Spielers |
player-afk | playerId | Der Spieler war für die Zeitgrenze inaktiv (ohne Input und ohne Chat) |
player-back | playerId | Ein AFK-Spieler hat sich wieder bewegt oder geschrieben |
Siehe Anti-AFK.