Bibliothèque

État et événements

room.state et tous les événements typés de BonkRoom.

BonkRoom étend EventEmitter3 avec la table d'événements BonkRoomEvents. Tous les événements sont typés : TypeScript vous prévient si vous vous trompez de nom ou de type d'argument.

État actuel : room.state

ts
const state = room.state;
state.myId;         // ID numérique du bot (null avant d'entrer)
state.hostId;       // ID de l'hôte actuel
state.players;      // Map<id, PlayerData>
state.inGame;       // true pendant une partie
state.teamsLocked;  // true si les équipes sont verrouillées

PlayerData

ChampDescription
idID numérique dans le salon
peerIDID de la connexion WebRTC (utile pour associer les frames d'input)
userName, guest, levelIdentité du joueur
team0 spec · 1 ffa · 2 rouge · 3 bleu · 4 vert · 5 jaune
ready, tabbedMarqué prêt / onglet en arrière-plan
ping, xp, balanceLatence, XP estimée et équilibre de la partie

Comment écouter

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('nouvelle URL :', link));

Tableau des événements

ÉvénementPayloadQuand
room-createdRoomCreatedPacketLe bot a créé le salon
room-joinRoomJoinPacketLe bot a rejoint un salon
player-joinPlayerJoinPacketUn joueur est entré
player-leavePlayerLeavePacketUn joueur est parti
host-leaveHostLeavePacketL'hôte est parti (newHostId = -1 : salon fermé)
team-changeTeamChangePacketUn joueur a changé d'équipe
ready-changeReadyChangePacketMarqué/démarqué prêt
tabbedTabbedPacketA quitté / est revenu sur l'onglet
username-changeUsernameChangePacketA changé de nom
player-pingsPlayerPingsPacketPing de tous les joueurs
game-startGameStartPacketLa partie a démarré
game-endGameEndPacketLa partie s'est terminée
all-ready-resetAllReadyResetPacketLe « prêt » de tous a été réinitialisé
chat-messageChatMessagePacketMessage de chat
player-kickPlayerKickPacketUn joueur a été expulsé
countdown / abort-countdownCountdownPacket / AbortCountdownPacketCompte à rebours
teamlock-toggleTeamlockTogglePacketÉquipes verrouillées/déverrouillées
gamemode-changeGamemodeChangePacketLe mode de jeu a changé
change-roundsChangeRoundsPacketLes rounds ont changé
map-switchMapSwitchPacketLa carte a changé
balance-setBalanceSetPacketL'équilibre d'un joueur a changé
player-level-upPlayerLevelUpPacketUn joueur a gagné un niveau
room-name-update / room-password-updatepaquetsLe nom/mot de passe du salon a changé
status-messageStatusMessagePacketAvis du serveur (erreurs, limites de débit)
share-linkShareLinkPacketLien du salon disponible
room-deadRoomDeadReasonLe salon est tombé (avec nouvelle tentative ou terminal)
room-rebuiltstringLe salon a été recréé (nouveau lien)
raw-packetIncomingPacket | UnknownPacketTous les paquets bruts, y compris non mappés

Événements ajoutés par l'anti-AFK

ÉvénementPayloadQuand
peer-input{ playerId, peerID, data }Frame d'input reçue par WebRTC d'un joueur
player-afkplayerIdLe joueur est resté inactif (sans input ni chat) pendant le délai limite
player-backplayerIdUn joueur AFK a bougé ou écrit de nouveau

Voir Anti-AFK.