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 travados

PlayerData

CampoDescrição
idID numérico na sala
peerIDID de conexão WebRTC (útil para mapear frames de input)
userName, guest, levelIdentidade do jogador
team0 spec · 1 ffa · 2 vermelho · 3 azul · 4 verde · 5 amarelo
ready, tabbedMarcado como pronto / com a aba em segundo plano
ping, xp, balanceLatê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

EventoPayloadQuando
room-createdRoomCreatedPacketO bot criou a sala
room-joinRoomJoinPacketO bot entrou em uma sala
player-joinPlayerJoinPacketUm jogador entrou
player-leavePlayerLeavePacketUm jogador saiu
host-leaveHostLeavePacketO host saiu (newHostId = -1: sala fechada)
team-changeTeamChangePacketUm jogador mudou de time
ready-changeReadyChangePacketMarcou/desmarcou pronto
tabbedTabbedPacketTrocou/voltou de aba
username-changeUsernameChangePacketMudou de nome
player-pingsPlayerPingsPacketPing de todos os jogadores
game-startGameStartPacketPartida iniciada
game-endGameEndPacketPartida encerrada
all-ready-resetAllReadyResetPacketTodos os "prontos" foram resetados
chat-messageChatMessagePacketMensagem de chat
player-kickPlayerKickPacketUm jogador foi expulso
countdown / abort-countdownCountdownPacket / AbortCountdownPacketContagem regressiva
teamlock-toggleTeamlockTogglePacketTimes travados/destravados
gamemode-changeGamemodeChangePacketModo de jogo alterado
change-roundsChangeRoundsPacketRounds alterados
map-switchMapSwitchPacketMapa trocado
balance-setBalanceSetPacketBalance de um jogador alterado
player-level-upPlayerLevelUpPacketUm jogador subiu de nível
room-name-update / room-password-updatepacotesNome/senha da sala alterados
status-messageStatusMessagePacketAviso do servidor (erros, rate limits)
share-linkShareLinkPacketLink da sala disponível
room-deadRoomDeadReasonA sala caiu (com retry ou de forma terminal)
room-rebuiltstringA sala foi recriada (novo link)
raw-packetIncomingPacket | UnknownPacketTodo packet bruto, inclusive os não mapeados

Eventos adicionados pelo anti-AFK

EventoPayloadQuando
peer-input{ playerId, peerID, data }Frame de input recebido via WebRTC de um jogador
player-afkplayerIdO jogador ficou parado (sem input e sem chat) pelo tempo limite
player-backplayerIdUm jogador AFK voltou a se mexer ou falar

Veja Anti-AFK.