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éesPlayerData
| Champ | Description |
|---|---|
id | ID numérique dans le salon |
peerID | ID de la connexion WebRTC (utile pour associer les frames d'input) |
userName, guest, level | Identité du joueur |
team | 0 spec · 1 ffa · 2 rouge · 3 bleu · 4 vert · 5 jaune |
ready, tabbed | Marqué prêt / onglet en arrière-plan |
ping, xp, balance | Latence, 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énement | Payload | Quand |
|---|---|---|
room-created | RoomCreatedPacket | Le bot a créé le salon |
room-join | RoomJoinPacket | Le bot a rejoint un salon |
player-join | PlayerJoinPacket | Un joueur est entré |
player-leave | PlayerLeavePacket | Un joueur est parti |
host-leave | HostLeavePacket | L'hôte est parti (newHostId = -1 : salon fermé) |
team-change | TeamChangePacket | Un joueur a changé d'équipe |
ready-change | ReadyChangePacket | Marqué/démarqué prêt |
tabbed | TabbedPacket | A quitté / est revenu sur l'onglet |
username-change | UsernameChangePacket | A changé de nom |
player-pings | PlayerPingsPacket | Ping de tous les joueurs |
game-start | GameStartPacket | La partie a démarré |
game-end | GameEndPacket | La partie s'est terminée |
all-ready-reset | AllReadyResetPacket | Le « prêt » de tous a été réinitialisé |
chat-message | ChatMessagePacket | Message de chat |
player-kick | PlayerKickPacket | Un joueur a été expulsé |
countdown / abort-countdown | CountdownPacket / AbortCountdownPacket | Compte à rebours |
teamlock-toggle | TeamlockTogglePacket | Équipes verrouillées/déverrouillées |
gamemode-change | GamemodeChangePacket | Le mode de jeu a changé |
change-rounds | ChangeRoundsPacket | Les rounds ont changé |
map-switch | MapSwitchPacket | La carte a changé |
balance-set | BalanceSetPacket | L'équilibre d'un joueur a changé |
player-level-up | PlayerLevelUpPacket | Un joueur a gagné un niveau |
room-name-update / room-password-update | paquets | Le nom/mot de passe du salon a changé |
status-message | StatusMessagePacket | Avis du serveur (erreurs, limites de débit) |
share-link | ShareLinkPacket | Lien du salon disponible |
room-dead | RoomDeadReason | Le salon est tombé (avec nouvelle tentative ou terminal) |
room-rebuilt | string | Le salon a été recréé (nouveau lien) |
raw-packet | IncomingPacket | UnknownPacket | Tous les paquets bruts, y compris non mappés |
Événements ajoutés par l'anti-AFK
| Événement | Payload | Quand |
|---|---|---|
peer-input | { playerId, peerID, data } | Frame d'input reçue par WebRTC d'un joueur |
player-afk | playerId | Le joueur est resté inactif (sans input ni chat) pendant le délai limite |
player-back | playerId | Un joueur AFK a bougé ou écrit de nouveau |
Voir Anti-AFK.