Biblioteca
Estado y eventos
room.state y todos los eventos tipados de BonkRoom.
BonkRoom extiende EventEmitter3 con el mapa de eventos BonkRoomEvents. Todos los eventos están tipados: TypeScript te avisa si te equivocas en el nombre o en el tipo del argumento.
Estado actual: room.state
ts
const state = room.state;
state.myId; // ID numérico del bot (null antes de entrar)
state.hostId; // ID del host actual
state.players; // Map<id, PlayerData>
state.inGame; // true durante una partida
state.teamsLocked; // true si los equipos están bloqueadosPlayerData
| Campo | Descripción |
|---|---|
id | ID numérico en la sala |
peerID | ID de la conexión WebRTC (útil para asociar los frames de input) |
userName, guest, level | Identidad del jugador |
team | 0 spec · 1 ffa · 2 rojo · 3 azul · 4 verde · 5 amarillo |
ready, tabbed | Marcado como listo / pestaña en segundo plano |
ping, xp, balance | Latencia, XP estimado y balance de la partida |
Cómo escuchar
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('nueva URL:', link));Tabla de eventos
| Evento | Payload | Cuándo |
|---|---|---|
room-created | RoomCreatedPacket | El bot creó la sala |
room-join | RoomJoinPacket | El bot entró en una sala |
player-join | PlayerJoinPacket | Entró un jugador |
player-leave | PlayerLeavePacket | Salió un jugador |
host-leave | HostLeavePacket | Salió el host (newHostId = -1: sala cerrada) |
team-change | TeamChangePacket | Un jugador cambió de equipo |
ready-change | ReadyChangePacket | Marcado/desmarcado como listo |
tabbed | TabbedPacket | Salió de / volvió a la pestaña |
username-change | UsernameChangePacket | Cambió de nombre |
player-pings | PlayerPingsPacket | Ping de todos los jugadores |
game-start | GameStartPacket | Empezó la partida |
game-end | GameEndPacket | Terminó la partida |
all-ready-reset | AllReadyResetPacket | Se reinició el "listo" de todos |
chat-message | ChatMessagePacket | Mensaje de chat |
player-kick | PlayerKickPacket | Un jugador fue expulsado |
countdown / abort-countdown | CountdownPacket / AbortCountdownPacket | Cuenta atrás |
teamlock-toggle | TeamlockTogglePacket | Equipos bloqueados/desbloqueados |
gamemode-change | GamemodeChangePacket | Cambió el modo de juego |
change-rounds | ChangeRoundsPacket | Cambiaron los rounds |
map-switch | MapSwitchPacket | Cambió el mapa |
balance-set | BalanceSetPacket | Cambió el balance de un jugador |
player-level-up | PlayerLevelUpPacket | Un jugador subió de nivel |
room-name-update / room-password-update | paquetes | Cambió el nombre/contraseña de la sala |
status-message | StatusMessagePacket | Aviso del servidor (errores, límites de tasa) |
share-link | ShareLinkPacket | Enlace de la sala disponible |
room-dead | RoomDeadReason | La sala cayó (con reintento o terminal) |
room-rebuilt | string | La sala fue recreada (enlace nuevo) |
raw-packet | IncomingPacket | UnknownPacket | Todos los paquetes crudos, incluidos los no mapeados |
Eventos añadidos por el anti-AFK
| Evento | Payload | Cuándo |
|---|---|---|
peer-input | { playerId, peerID, data } | Frame de input recibido por WebRTC de un jugador |
player-afk | playerId | El jugador estuvo inactivo (sin input y sin chat) durante el tiempo límite |
player-back | playerId | Un jugador AFK volvió a moverse o a escribir |
Consulta Anti-AFK.