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 (!afk et 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

bash
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 dev

Le lien du salon apparaît dans le log (sala ativa).

Variables d'environnement

VariableDescription
BONK_USERNAME, BONK_PASSWORDLe compte bonk.io qui héberge le salon
BONK_GAMEMODEfootball (par défaut), classic, arrows, death arrows, grapple ou vtol
BONK_MAXTEAMSIZEJoueurs par équipe (1 = 1v1, 2 = 2v2...). Base de tous les calculs d'équipes.
BONK_ROUNDSRounds par partie
BONK_INITIAL_STATEIS blob de secours (voir Parties, IS blob et spectateurs)
BONK_BLOB_CACHE_PATHChemin du cache de blobs par carte
NODE_ENVdevelopment (logs formatés) ou production (JSON, idéal pour PM2)

Configuration du salon

bonk-room.json :

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

FichierRôle
src/index.tsLogger, configuration, BonkSession avec reconnexion
src/example-bot.tsExampleBot : relie les événements du salon au contrôleur
src/pick/PickController.tsÉquipes, capitaines, choix, rotation, AFK et commandes
src/config.tsValidation (zod) de la configuration et lecture de l'environnement
examples/antiAfk.tsAnti-AFK en ~10 lignes avec la seule bibliothèque

Tests

bash
pnpm --filter bonk-room test

En 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.