Ce script Python permet de gérer les tournois sur Challonge via leur API.
Avec ce script vous pouvez :
- créer un tournoi en single (winner only) ou double elimination (winner + loser brackets)
- ajouter des participants en paramètre et/ou depuis une plage d'une feuille Google Sheet
- supprimer tous les participants d'un tournoi
- supprimer des tournois
- lister vos tournois
- mélanger la liste des participants d'un tournoi
- voir le détail d'un tournoi
Avec ce script vous pouvez facilement envisager d'automatiser votre gestion de tournois jusqu'à programmer des touches de Stream Deck.
- Python 3.8 ou supérieur (Python 3.12 recommandé)
- pipenv
-
Installez Python depuis python.org
- préférez la version 3.12 qui est la version testée sinon vous devrez ajuster le fichier
Pipfile
avec la version qui vous utilisez
- préférez la version 3.12 qui est la version testée sinon vous devrez ajuster le fichier
-
Ouvrez PowerShell et exécutez :
pip install pipenv
Avec WSL2 vous pouvez tourner une VM de type Linux Ubuntu qui monte vos lecteurs Windows C:\
(qui sera disponible en tant que /mnt/c/
)... afin de rendre accessible vos fichiers Windows dans un contexte d'execution Linux. L'environnement Linux devient alors accessible dans votre terminal Powershell qui vous proposera d'ouvrir soit un terminal Powershell soit un terminal au sein de la VM Linux.
- Installez WSL2 via PowerShell :
- Appuyer sur Windows + S pour ouvrir la barre de recherche
- Taper "Turn Windows features on or off"
- Parcourir les résultats de recherche et aller sur "Windows Subsystem for Linux (WSL)"
- Cliquer sur Ok
- Ouvrir un terminal Powershell en tant qu'administrateur
- Taper
wsl --install
- Taper ensuite
wsl --set-default-version 2
- Installer une distribution Linux pour WSL2
- Ouvrir le store Microsoft
- Chercher "Ubuntu" et cliquer sur Install
- Lancer ensuite un terminal en choisissant un terminal de type Ubuntu
- Au premier lancement vous serez invité à créer un compte au sein du Linux
Maintenant que WSL2 et Ubuntu sont dispo, il vous suffit d'ouvrir un terminal Ubuntu pour avoir votre environnement qui démarre automatiquement.
Ensuite les instructions sont les mêmes que pour Linux (voir ci-dessous).
-
Installez Python et pip avec votre gestionnaire de paquets. Par exemple, sur Ubuntu :
sudo apt update sudo apt install python3 python3-pip
-
Installez pipenv :
pip3 install pipenv
-
Installez Homebrew si ce n'est pas déjà fait :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
Installez Python et pipenv :
brew install python pip3 install pipenv
-
Clonez ce dépôt ou téléchargez le script
-
Dans le répertoire du script, créez l'environnement virtuel :
pipenv install
- Connectez-vous à votre compte Challonge
- Allez dans les paramètres de votre compte
- Dans la section "Developer API", copiez la Clé API (v1)
- Activer Google Sheets API:
- Aller sur Google Cloud Console.
- Créer un nouveau projet ou sélectionner un projet existant selon besoin.
- Naviguer dans "APIs & Services" > "Bibliothèque".
- Rechercher "Google Sheets API" et l'activer.
- Créer un compte d'accès :
- Aller dans "APIs & Services" > "Identités".
- Cliquer "Créer une identité" et choisir "Compte de service".
- Définir un nom et un identifiant unique de compte de service et cliquer sur Ok.
- Une fois créé, aller dans la liste des comptes de service puis cliquer sur votre compte de service pour accéder à ses propriétés
- Se rendre dans l'onglet Clés et créer une clé au format JSON. Une fois créée il vous faudra immédiatement télécharger le fichier
.json
et l'ajouter dans le dossier du projet.- c'est ce fichier JSON qu'il faudra renseigner dans le fichier
env.txt
.
- c'est ce fichier JSON qu'il faudra renseigner dans le fichier
- Partagez votre Google Sheet:
- Ouvrir Google Sheet.
- Cliquez sur "Partage" et ajoutez l'email associé au compte de service nouvellement créé (vous pouvez le retrouver dans le fichier JSON) avec le rôle Lecteur (pas besoin de plus).
Voilà, vous avez créé un accès en lecture à votre Google Sheet via API pour que le script puisse faire une lecture de la plage à récupérer pour la fonction --import-gsheet
.
-
Créez un fichier
env.txt
dans le même répertoire que le script- vous pouvez aussi par simplicité, dupliquer le fichier exemple
env.dist
enenv.txt
et éditer les valeurs dansenv.txt
- attention ne pas y mettre de caractères accentués dans le fichier
env.txt
car le module python-dotenv utilisé pour lire le fichierenv.txt
ne le supporte pas sous Windows.
- vous pouvez aussi par simplicité, dupliquer le fichier exemple
-
Ajoutez votre clé API dans ce fichier :
CHALLONGE_API_KEY=votre_clé_api_ici
-
(optionnel) Vous changez également la Timezone dans laquelle vous voulez la sortie des dates/heures en ajoutant dans
env.txt
:TIMEZONE=Europe/Paris
-
(optionnel) si vous souhaitez faire un import depuis un Google Sheet et que vous avez créer votre compte de service, ajoutez les éléments suivants dans le fichier
env.txt
:GOOGLE_APPLICATION_CREDENTIALS=nom_fichier_credential_service_account.json # pour un document d'url https://docs.google.com/spreadsheets/d/{{GOOGLE_SHEET_ID}}/edit?gid=0#gid=0 GOOGLE_SHEET_ID={{GOOGLE_SHEET_ID}} GOOGLE_SHEET_WORKSHEET=feuille_dans_spreadsheet GOOGLE_SHEET_RANGE=plage_colonne_au_format_A2:A33
Exécutez le script avec la commande souhaitée.
Avant toute exécution, il faut :
- soit se mettre dans l'environnement pipenv créé avec
pipenv shell
depuis le dossier du projet pour lancer directement des commandes./challonge <command> [options]
- soit préfixer par
pipenv run
(méthode ici documentée et recommandée surtout pour des appels depuis d'autres programmes)
Pour voir toutes les commandes disponibles :
pipenv run challonge --help
# usage: challonge list [-h] [--start_date START_DATE] [--end_date END_DATE] [--participants_count PARTICIPANTS_COUNT] [--short] [--full_url] [--json] [--full_json] [--last]
# Lister les tournois
pipenv run challonge list
╒══════════╤═════════╤════════════════════╤══════════════════════════╤══════════════════════╕ │ url │ title │ tournament_type │ created_at │ participants_count │ ╞══════════╪═════════╪════════════════════╪══════════════════════════╪══════════════════════╡ │ pl888gdr │ double │ double elimination │ 2024-10-12 14:25:26 CEST │ 0 │ ├──────────┼─────────┼────────────────────┼──────────────────────────┼──────────────────────┤ │ sf901z3a │ single │ single elimination │ 2024-10-12 14:21:30 CEST │ 0 │ ╘══════════╧═════════╧════════════════════╧══════════════════════════╧══════════════════════╛
# Liste les tournois au format JSON
pipenv run challonge list --json
[ { "url": "bbkdcbam", "full_url": "https://challonge.com/bbkdcbam", "title": "Test 01", "tournament_type": "single elimination", "created_at": "2024-10-10T14:37:33.902000+02:00", "participants_count": 3 }, { "url": "41bhwup4", "full_url": "https://challonge.com/41bhwup4", "title": "Test 12 teams", "tournament_type": "single elimination", "created_at": "2024-10-10T15:23:50.829000+02:00", "participants_count": 0 } ]
# Liste les tournois au format JSON
pipenv run challonge list --json --full_json
[ { "url": "bbkdcbam", "full_url": "https://challonge.com/bbkdcbam", "title": "Test 01", "tournament_type": "single elimination", "created_at": "2024-10-10T14:37:33.902000+02:00", "participants_count": 3, "participants": [ { "name": "Player1 x Player2", "seed": 1 }, { "name": "Player3 x Player4", "seed": 2 }, { "name": "Player5 x Player6", "seed": 3 } ] }, { "url": "41bhwup4", "full_url": "https://challonge.com/41bhwup4", "title": "Test 12 teams", "tournament_type": "single elimination", "created_at": "2024-10-10T15:23:50.829000+02:00", "participants_count": 0, "participants": [] } ]
# Lister les tournois
pipenv run challonge list --full_url
╒══════════╤═════════╤════════════════════╤══════════════════════════╤══════════════════════╤════════════════════════════════╕ │ url │ title │ tournament_type │ created_at │ participants_count │ full_url │ ╞══════════╪═════════╪════════════════════╪══════════════════════════╪══════════════════════╪════════════════════════════════╡ │ sm52p3gu │ double │ double elimination │ 2024-10-12 08:53:33 CEST │ 0 │ https://challonge.com/sm52p3gu │ ├──────────┼─────────┼────────────────────┼──────────────────────────┼──────────────────────┼────────────────────────────────┤ │ 3wz3067p │ double │ double elimination │ 2024-10-12 08:53:31 CEST │ 0 │ https://challonge.com/3wz3067p │ ├──────────┼─────────┼────────────────────┼──────────────────────────┼──────────────────────┼────────────────────────────────┤ │ zqtm4ysb │ double │ double elimination │ 2024-10-12 08:53:29 CEST │ 0 │ https://challonge.com/zqtm4ysb │ ├──────────┼─────────┼────────────────────┼──────────────────────────┼──────────────────────┼────────────────────────────────┤ │ b390sf18 │ double │ double elimination │ 2024-10-12 08:53:26 CEST │ 0 │ https://challonge.com/b390sf18 │ ├──────────┼─────────┼────────────────────┼──────────────────────────┼──────────────────────┼────────────────────────────────┤ │ gb3fmyy9 │ double │ double elimination │ 2024-10-12 08:53:24 CEST │ 0 │ https://challonge.com/gb3fmyy9 │ ├──────────┼─────────┼────────────────────┼──────────────────────────┼──────────────────────┼────────────────────────────────┤ │ jirous70 │ double │ double elimination │ 2024-10-12 08:53:23 CEST │ 0 │ https://challonge.com/jirous70 │ ├──────────┼─────────┼────────────────────┼──────────────────────────┼──────────────────────┼────────────────────────────────┤ │ k0fkklld │ double │ double elimination │ 2024-10-12 08:38:29 CEST │ 0 │ https://challonge.com/k0fkklld │ ├──────────┼─────────┼────────────────────┼──────────────────────────┼──────────────────────┼────────────────────────────────┤ │ gp527d34 │ test │ single elimination │ 2024-10-11 22:21:44 CEST │ 0 │ https://challonge.com/gp527d34 │ ╘══════════╧═════════╧════════════════════╧══════════════════════════╧══════════════════════╧════════════════════════════════╛
# Lister les tournois depuis une date
pipenv run challonge list --start_date 2024-09-01
╒══════════╤═════════╤════════════════════╤══════════════════════════╤══════════════════════╕ │ url │ title │ tournament_type │ created_at │ participants_count │ ╞══════════╪═════════╪════════════════════╪══════════════════════════╪══════════════════════╡ │ sf901z3a │ single │ single elimination │ 2024-10-12 14:21:30 CEST │ 0 │ ╘══════════╧═════════╧════════════════════╧══════════════════════════╧══════════════════════╛
pipenv run challonge list --short --start_date 2024-09-01
bbkdcbam
# usage: challonge delete [-h] (--urls URLS [URLS ...] | --start_date START_DATE) [--end_date END_DATE]
# Tous les tournois à partir d'une date
pipenv run challonge delete --start_date 2024-09-01
8 tournois supprimés avec succès.
# Les tournois spécifiés par leur fin d'url
pipenv run challonge delete --urls bbkdcbam
# usage: challonge create_single [-h] --name NAME [--generate_participants GENERATE_PARTICIPANTS]
pipenv run challonge create_single --name "Switcharoo"
Tournoi créé : https://challonge.com/bbkdcbam Labels de tour personnalisés ajoutés.
pipenv run challonge create_single --name "Test 12 teams" --generate_participants 12
Tournoi créé : https://challonge.com/41bhwup4 Labels de tour personnalisés ajoutés.
# usage: challonge create_double [-h] --name NAME [--generate_participants GENERATE_PARTICIPANTS]
pipenv run challonge create_double --name "Switcharoo"
pipenv run challonge create_double --name "Test 8 teams" --generate_participants 8
# usage: challonge add_participants [-h] --url URL [--participants [PARTICIPANTS ...]] [--import-gsheet] [--generate_participants GENERATE_PARTICIPANTS]
## Ajout manuel des participants
pipenv run challonge add_participants --url bbkdcbam --participants "player1 x player2" "player3 x player4" "player5 x player6" "player7 x player8"
## Ajout automatique depuis le google Sheet référencé
pipenv run challonge add_participants --url bbkdcbam --import-gsheet
# Ajout de 12 équipes au format TeamXXX
pipenv run challonge add_participants --url yg1rl9df --generate_participants 12
Participants ajoutés avec succès.
# usage: challonge remove_participants [-h] (--url URL | --last) [--accept]
pipenv run challonge remove_participants --url bbkdcba
Tous les participants ont été supprimés.
# ou bien
pipenv run challonge remove_participants --last
┌────────────────────────┬────────────────────────────────┐ │ Champ │ Valeur │ ├────────────────────────┼────────────────────────────────┤ │ URL │ yg1rl9df │ │ Nom │ test add │ │ Type │ single elimination │ │ Jeu │ Call of Duty: Warzone │ │ Date de création │ 2024-10-15 14:37:50 CEST │ │ Nombre de participants │ 12 │ │ État │ pending │ │ URL complète │ https://challonge.com/yg1rl9df │ └────────────────────────┴────────────────────────────────┘ Participants: 1. Team001 2. Team002 3. Team003 4. Team004 5. Team005 6. Team006 7. Team007 8. Team008 9. Team009 10. Team010 11. Team011 12. Team012 Utilisez l'option --accept pour confirmer la suppression des participants.
# ou bien
pipenv run challonge remove_participants --last --accept
┌────────────────────────┬────────────────────────────────┐ │ Champ │ Valeur │ ├────────────────────────┼────────────────────────────────┤ │ URL │ yg1rl9df │ │ Nom │ test add │ │ Type │ single elimination │ │ Jeu │ Call of Duty: Warzone │ │ Date de création │ 2024-10-15 14:37:50 CEST │ │ Nombre de participants │ 12 │ │ État │ pending │ │ URL complète │ https://challonge.com/yg1rl9df │ └────────────────────────┴────────────────────────────────┘ Participants: 1. Team001 2. Team002 3. Team003 4. Team004 5. Team005 6. Team006 7. Team007 8. Team008 9. Team009 10. Team010 11. Team011 12. Team012 Tous les participants (12) ont été supprimés du tournoi yg1rl9df.
# usage: challonge toggle_type [-h] --url URL
pipenv run challonge toggle_type --url bbkdcbam
Le type du tournoi a été changé de single elimination à double elimination.
pipenv run challonge toggle_type --url bbkdcbam
Le type du tournoi a été changé de double elimination à single elimination.
# usage: challonge randomize [-h] --url URL
pipenv run challonge randomize --url bbkdcbam
Les participants du tournoi ont été mélangés aléatoirement.