Salon 24h/24
Salon 24h/24 de référence
Le bot de football complet, construit uniquement avec la bibliothèque. Servez-vous-en comme base pour le vôtre.
Le dépôt inclut apps/bonk-room, un bot de football qui tourne 24 heures sur 24. Il a été fait uniquement avec la bibliothèque bonktools, il sert donc d'exemple pratique de tout ce qu'elle offre : session avec reconnexion, événements, équipes, verrou, anti-AFK et synchronisation de partie.
Ce qu'il fait
- Crée et maintient un salon de football, en le recréant s'il tombe.
- Forme les équipes automatiquement, toujours à taille égale.
- Choisit des capitaines et laisse le capitaine choisir les joueurs en tapant le numéro dans le chat.
- Fait tourner le champion à la fin de chaque partie : le vainqueur reste en bleu.
- Gère l'AFK (
!afket détection par inactivité) et ne choisit jamais un joueur AFK. - Verrouille les équipes : seul le bot déplace les joueurs.
- Montre la partie à ceux qui arrivent après, sans la redémarrer.
Les règles complètes sont dans Équipes, capitaines et choix.
Comment le lancer
git clone https://github.com/brenoluizdev/BonkTools-Core-repo.git
cd BonkTools-Core-repo
pnpm install
pnpm --filter @bonktools/core build
cd apps/bonk-room
cp .env.example .env # renseignez BONK_USERNAME et BONK_PASSWORD
cp bonk-room.example.json bonk-room.json # réglez le nom, le mode et les rounds du salon
pnpm devLe lien du salon apparaît dans le log (sala ativa).
Variables d'environnement
| Variable | Description |
|---|---|
BONK_USERNAME, BONK_PASSWORD | Le compte bonk.io qui héberge le salon |
BONK_GAMEMODE | football (par défaut), classic, arrows, death arrows, grapple ou vtol |
BONK_MAXTEAMSIZE | Joueurs par équipe (1 = 1v1, 2 = 2v2...). Base de tous les calculs d'équipes. |
BONK_ROUNDS | Rounds par partie |
BONK_INITIAL_STATE | IS blob de secours (voir Parties, IS blob et spectateurs) |
BONK_BLOB_CACHE_PATH | Chemin du cache de blobs par carte |
NODE_ENV | development (logs formatés) ou production (JSON, idéal pour PM2) |
Configuration du salon
bonk-room.json :
{
"room": {
"id": "my-room",
"name": "My Bonk Room",
"password": "",
"maxPlayers": 6,
"mode": "b",
"rounds": 3,
"hidden": true,
"map": "<blob LZ-String de la carte>"
},
"throttle": {
"maxConcurrentRooms": 1,
"roomCreationDelayMs": 3000,
"roomCreationJitterMs": 2000
},
"initialStates": { "2": "<IS blob 1v1>", "4": "<IS blob 2v2>" }
}Structure du code
| Fichier | Rôle |
|---|---|
src/index.ts | Logger, configuration, BonkSession avec reconnexion |
src/example-bot.ts | ExampleBot : relie les événements du salon au contrôleur |
src/pick/PickController.ts | Équipes, capitaines, choix, rotation, AFK et commandes |
src/config.ts | Validation (zod) de la configuration et lecture de l'environnement |
examples/antiAfk.ts | Anti-AFK en ~10 lignes avec la seule bibliothèque |
Tests
pnpm --filter bonk-room testEn plus des scénarios du flux d'équipes et de l'AFK, il y a un fuzz avec des centaines de séquences aléatoires d'arrivées, départs, AFK et choix. À chaque partie démarrée, il vérifie que les équipes ont la même taille, ne dépassent jamais maxTeamSize et n'ont personne d'AFK sur le terrain.
Production
Lancez avec NODE_ENV=production pour des logs JSON et utilisez un gestionnaire de processus (PM2, systemd ou un conteneur) pour redémarrer le processus s'il meurt. BonkSession s'occupe déjà de recréer le salon quand il tombe ; le gestionnaire s'occupe du processus.