Biblioteca
Estado e eventos
room.state e todos os eventos tipados do BonkRoom.
BonkRoom estende EventEmitter3 com o mapa de eventos BonkRoomEvents. Todos os eventos são tipados: o TypeScript avisa se você errar o nome ou o tipo do argumento.
Estado atual: room.state
ts
const state = room.state;
state.myId; // ID numérico do bot (null antes de entrar)
state.hostId; // ID do host atual
state.players; // Map<id, PlayerData>
state.inGame; // true durante uma partida
state.teamsLocked; // true se os times estão travadosPlayerData
| Campo | Descrição |
|---|---|
id | ID numérico na sala |
peerID | ID de conexão WebRTC (útil para mapear frames de input) |
userName, guest, level | Identidade do jogador |
team | 0 spec · 1 ffa · 2 vermelho · 3 azul · 4 verde · 5 amarelo |
ready, tabbed | Marcado como pronto / com a aba em segundo plano |
ping, xp, balance | Latência, XP estimado e balance da partida |
Como ouvir
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('nova URL:', link));Tabela de eventos
| Evento | Payload | Quando |
|---|---|---|
room-created | RoomCreatedPacket | O bot criou a sala |
room-join | RoomJoinPacket | O bot entrou em uma sala |
player-join | PlayerJoinPacket | Um jogador entrou |
player-leave | PlayerLeavePacket | Um jogador saiu |
host-leave | HostLeavePacket | O host saiu (newHostId = -1: sala fechada) |
team-change | TeamChangePacket | Um jogador mudou de time |
ready-change | ReadyChangePacket | Marcou/desmarcou pronto |
tabbed | TabbedPacket | Trocou/voltou de aba |
username-change | UsernameChangePacket | Mudou de nome |
player-pings | PlayerPingsPacket | Ping de todos os jogadores |
game-start | GameStartPacket | Partida iniciada |
game-end | GameEndPacket | Partida encerrada |
all-ready-reset | AllReadyResetPacket | Todos os "prontos" foram resetados |
chat-message | ChatMessagePacket | Mensagem de chat |
player-kick | PlayerKickPacket | Um jogador foi expulso |
countdown / abort-countdown | CountdownPacket / AbortCountdownPacket | Contagem regressiva |
teamlock-toggle | TeamlockTogglePacket | Times travados/destravados |
gamemode-change | GamemodeChangePacket | Modo de jogo alterado |
change-rounds | ChangeRoundsPacket | Rounds alterados |
map-switch | MapSwitchPacket | Mapa trocado |
balance-set | BalanceSetPacket | Balance de um jogador alterado |
player-level-up | PlayerLevelUpPacket | Um jogador subiu de nível |
room-name-update / room-password-update | pacotes | Nome/senha da sala alterados |
status-message | StatusMessagePacket | Aviso do servidor (erros, rate limits) |
share-link | ShareLinkPacket | Link da sala disponível |
room-dead | RoomDeadReason | A sala caiu (com retry ou de forma terminal) |
room-rebuilt | string | A sala foi recriada (novo link) |
raw-packet | IncomingPacket | UnknownPacket | Todo packet bruto, inclusive os não mapeados |
Eventos adicionados pelo anti-AFK
| Evento | Payload | Quando |
|---|---|---|
peer-input | { playerId, peerID, data } | Frame de input recebido via WebRTC de um jogador |
player-afk | playerId | O jogador ficou parado (sem input e sem chat) pelo tempo limite |
player-back | playerId | Um jogador AFK voltou a se mexer ou falar |
Veja Anti-AFK.