Comment ça marche ?
Guide rapide pour démarrer sur TCG Battle, que tu sois joueur, organisateur ou en charge d'une communauté.
Joueurs
Trouve un tournoi, inscris-toi, joue tes matchs.
- 1
Crée ton compte
Connexion via Google, Discord ou email/mot de passe. La connexion Discord permet en plus de recevoir les MP du BOT (matchups, rappels, check-in).
📷 Screenshot à venir :
/screenshots/howto-players-signup.png - 2
Lie ton Discord (optionnel mais recommandé)
Si tu t'es connecté par Google/email, tu peux ajouter ton ID Discord dans /profile → onglet Discord. Sinon le BOT ne pourra pas te DM.
- 3
Trouve un tournoi
Va sur /tournaments pour voir les tournois à venir / en cours / passés. Filtre par ligue si tu veux te limiter à une communauté.
📷 Screenshot à venir :
/screenshots/howto-players-tournaments-list.png - 4
Inscris-toi et soumets une decklist
Sur la page d'un tournoi, clique « S'inscrire ». Si le tournoi exige une decklist, sélectionne-la depuis ton dashboard ou crée-la depuis /decklists/new (import direct PTCG Live par copier-coller).
📷 Screenshot à venir :
/screenshots/howto-players-decklist-import.png - 5
Fais ton check-in tournoi
La fenêtre de check-in s'ouvre X minutes avant le scheduledAt (configurable par l'orga, par défaut 60 min). Tu reçois un MP Discord et une notification in-app. Si tu ne check-in pas à l'heure, tu es automatiquement marqué « no-show ».
- 6
Joue tes matchs
Au démarrage de chaque ronde, tu reçois un MP Discord « Check-in match » + un MP « Matchup » avec ton adversaire et ton numéro de table. Check-in match (1 clic) puis joue ta partie sur PTCG Live.
- 7
Déclare ton résultat
Deux options : depuis le site (page de match) ou depuis le MP Discord (boutons Win/Tie/Lose pré-remplis). Si ton adversaire déclare la même chose, le résultat est auto-validé. Sinon, un arbitre tranche.
📷 Screenshot à venir :
/screenshots/howto-players-declare-result.png - 8
Top cut et fin de tournoi
Si tu es dans le top cut, tu joues le bracket éliminatoire (BO3). À la fin du tournoi, le podium est annoncé sur Discord et tu retrouves ton historique complet dans ton profil.
Organisateurs
Crée et lance un tournoi communautaire.
- 1
Tout user peut créer un tournoi hors-ligue
Depuis le sprint 48, n'importe quel utilisateur connecté peut créer un tournoi via /tournaments → « Nouveau tournoi ». Sans rattachement à une ligue, le tournoi est marqué hors-ligue (countsForLeaderboard=false) — il ne pollue pas le classement global. Pour créer un tournoi RATTACHÉ à une ligue, tu dois être Judge, Admin ou Owner de cette ligue (voir section Rôles & permissions).
- 2
Crée le tournoi
Sur /tournaments → « Nouveau tournoi ». Renseigne : nom, date, type (Challenge ≥ 4 joueurs / Cup ≥ 8), match format (BO1, BO3, BO1_THEN_BO3 — top cut force BO3 même si Suisse en BO1), timer, fenêtre check-in, top cut size, visibilité des decklists (OPEN ou HIDDEN), ligue de rattachement (optionnel — utile pour le classement).
📷 Screenshot à venir :
/screenshots/howto-organizers-create-tournament.png - 3
Ouvre les inscriptions et communique
Clique « Ouvrir les inscriptions ». Les rappels Discord 24h/12h/1h partent automatiquement via le cron. Tu peux aussi déclencher un « Rappel Discord » manuel à tout moment depuis la sidebar.
- 4
Lance le tournoi
À l'heure du scheduledAt, clique « Démarrer ». Les joueurs no-show (pas check-in dans la fenêtre) sont auto-droppés. Les rondes Suisse sont générées automatiquement selon le nombre de joueurs présents.
- 5
Gère les rondes et les arbitrages
Sur
/tournaments/[id]/pairings, suis les déclarations live. Les conflits (joueurs déclarent des scores incompatibles) et les appels arbitre apparaissent sur /judge — vue globale ou par tournoi. Outils : late check-in (R1-R2 seulement), drop manuel, résolution de match (victoire/défaite/double-loss/égalité).📷 Screenshot à venir :
/screenshots/howto-organizers-pairings.png - 6
Lance le top cut puis termine
Quand les rondes Suisse sont terminées, le bouton « Lancer le top cut » apparait (taille configurable : Top 4/8/16). Le bracket éliminatoire s'enchaine en BO3. À la fin, clique « Terminer » : le podium est posté sur Discord et le tournoi passe à FINISHED.
Communautés (ligues)
Crée et anime ta propre ligue.
- 1
Crée ta ligue
Sur /communities → « Créer une ligue ». Choisis un slug (URL :
/c/[slug]), un nom, et un mode d'adhésion : PUBLIC (chacun peut rejoindre), INVITE (sur invitation), CLOSED (seul un admin ajoute).📷 Screenshot à venir :
/screenshots/howto-leagues-create.png - 2
Configure le branding
Sur
/c/[slug]/admin/branding, upload un logo, écris une présentation HTML (sanitisée), choisis ta couleur d'accent. Affichage public sur/c/[slug].📷 Screenshot à venir :
/screenshots/howto-leagues-branding.png - 3
Invite des membres
Selon le mode d'adhésion : partage le lien public, génère une invitation à usage unique, ou ajoute manuellement les emails. Tu peux promouvoir un membre admin ligue depuis
/c/[slug]/admin/members. - 4
Lie ton Discord
Sur
/c/[slug]/admin/discord, deux options : (a) webhook channel (URL collée — annonces seulement) ou (b) BOT TCG Battle invité sur ton serveur (rôles ligue auto, channels par tournoi). Si rien n'est configuré, le webhook global DISCORD_GLOBAL_WEBHOOK_URL s'applique. - 5
Crée des tournois rattachés
Quand tu crées un tournoi, sélectionne ta ligue dans le champ « Ligue ». Le tournoi compte alors dans le classement de la ligue (en plus du classement global, sauf si countsForLeaderboard=false).
- 6
Active les tournois récurrents
Sur
/c/[slug]/admin/recurring, crée un template (hebdomadaire, mensuel, custom cron). Un cron quotidien à 5h CET génère les instances 7 jours à l'avance. Idéal pour les « tournois du jeudi » qui reviennent chaque semaine sans intervention.
Rôles & permissions
Depuis le sprint 48, le système de rôles distingue les rôles globaux (cumulables) et les rôles de ligue. Voici qui peut faire quoi.
- 1
Joueur (PLAYER, défaut)
Tout utilisateur connecté est Joueur par défaut. Tu peux : t'inscrire à des tournois, soumettre des decklists, créer des tournois hors-ligue (countsForLeaderboard=false), gérer ton profil et ton avatar. Tu n'as PAS accès aux pages /admin ou /judge globales. Pour juger ou administrer une ligue, demande à un Owner de te promouvoir.
- 2
Judge Ligue (rôle de ligue)
Promu par l'Owner ou l'Admin d'une ligue depuis
/c/[slug]/admin/members. Te permet de juger les tournois DE CETTE LIGUE via la page /judge (filtrée à la ligue). Tu peux aussi créer des tournois rattachés à cette ligue (avec countsForLeaderboard=true automatique). Pas d'accès au branding ni à la gestion des membres. - 3
Admin Ligue (rôle de ligue)
Promu par l'Owner de la ligue. Hérite des droits du Judge Ligue + peut gérer les membres (approve/reject/kick), éditer le branding (logo, bannière, couleur, présentation HTML), configurer le Discord de la ligue, créer des templates de tournois récurrents. Ne peut pas céder l'ownership de la ligue.
- 4
League Owner (rôle de ligue)
Le créateur de la ligue. Hérite des droits d'Admin Ligue + peut promouvoir/rétrograder les autres membres (Judge, Admin) + peut TRANSFÉRER la propriété à un autre membre actif (avec confirmation par retape exacte du nom de la ligue). L'ancien Owner devient alors Admin Ligue. Une ligue a toujours exactement un Owner.
- 5
Head Judge (rôle GLOBAL)
Rôle global attribué par un Admin platform depuis /admin/users. Peut juger TOUS les tournois (toutes ligues confondues + tournois hors-ligue) via la page /judge globale. N'a pas accès à /admin et ne peut pas administrer les ligues — juste juger.
- 6
Admin platform (rôle GLOBAL)
Accès complet : /admin pour gérer les utilisateurs (promote/demote tous rôles), les sets de cartes (sync TCGdex), les overrides Pokémon (sprites, slugs), les ligues. Peut administrer N'IMPORTE QUELLE ligue (override des permissions de ligue). À réserver à 1-2 personnes max pour la sécurité.
- 7
Multi-rôles globaux
Un utilisateur peut cumuler plusieurs rôles globaux (ex : Admin + Head Judge). Les rôles de ligue sont indépendants et s'appliquent par ligue (tu peux être Owner d'une ligue ET simple Joueur dans une autre).
Prêt à commencer ?
Parcours les tournois à venir ou crée ta première decklist en 1 min.