Library
State and events
room.state and every typed event of BonkRoom.
BonkRoom extends EventEmitter3 with the BonkRoomEvents event map. Every event is typed: TypeScript warns you if you get the name or the argument type wrong.
Current state: room.state
ts
const state = room.state;
state.myId; // numeric ID of the bot (null before joining)
state.hostId; // current host ID
state.players; // Map<id, PlayerData>
state.inGame; // true during a match
state.teamsLocked; // true if teams are lockedPlayerData
| Field | Description |
|---|---|
id | Numeric ID in the room |
peerID | WebRTC connection ID (useful to map input frames) |
userName, guest, level | Player identity |
team | 0 spec · 1 ffa · 2 red · 3 blue · 4 green · 5 yellow |
ready, tabbed | Marked as ready / tab in the background |
ping, xp, balance | Latency, estimated XP and match balance |
How to listen
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('new URL:', link));Event table
| Event | Payload | When |
|---|---|---|
room-created | RoomCreatedPacket | The bot created the room |
room-join | RoomJoinPacket | The bot joined a room |
player-join | PlayerJoinPacket | A player joined |
player-leave | PlayerLeavePacket | A player left |
host-leave | HostLeavePacket | The host left (newHostId = -1: room closed) |
team-change | TeamChangePacket | A player changed team |
ready-change | ReadyChangePacket | Marked/unmarked ready |
tabbed | TabbedPacket | Switched away from / back to the tab |
username-change | UsernameChangePacket | Changed name |
player-pings | PlayerPingsPacket | Ping of every player |
game-start | GameStartPacket | Match started |
game-end | GameEndPacket | Match ended |
all-ready-reset | AllReadyResetPacket | Everyone's "ready" was reset |
chat-message | ChatMessagePacket | Chat message |
player-kick | PlayerKickPacket | A player was kicked |
countdown / abort-countdown | CountdownPacket / AbortCountdownPacket | Countdown |
teamlock-toggle | TeamlockTogglePacket | Teams locked/unlocked |
gamemode-change | GamemodeChangePacket | Game mode changed |
change-rounds | ChangeRoundsPacket | Rounds changed |
map-switch | MapSwitchPacket | Map changed |
balance-set | BalanceSetPacket | A player's balance changed |
player-level-up | PlayerLevelUpPacket | A player leveled up |
room-name-update / room-password-update | packets | Room name/password changed |
status-message | StatusMessagePacket | Server notice (errors, rate limits) |
share-link | ShareLinkPacket | Room link available |
room-dead | RoomDeadReason | The room went down (with retry or terminal) |
room-rebuilt | string | The room was recreated (new link) |
raw-packet | IncomingPacket | UnknownPacket | Every raw packet, including unmapped ones |
Events added by anti-AFK
| Event | Payload | When |
|---|---|---|
peer-input | { playerId, peerID, data } | Input frame received over WebRTC from a player |
player-afk | playerId | The player stayed idle (no input and no chat) for the time limit |
player-back | playerId | An AFK player moved or chatted again |
See Anti-AFK.