{"id":46632272,"url":"https://github.com/axel3rd/mpg-coach-bot","last_synced_at":"2026-03-08T00:11:45.108Z","repository":{"id":33263012,"uuid":"149507279","full_name":"axel3rd/mpg-coach-bot","owner":"axel3rd","description":"MPG (Mon Petit Gazon) coach bot, to automate and optimize weekly actions","archived":false,"fork":false,"pushed_at":"2026-03-04T22:44:19.000Z","size":6431,"stargazers_count":27,"open_issues_count":8,"forks_count":8,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-03-05T03:34:02.089Z","etag":null,"topics":["bot","java","mon-petit-gazon","mpg"],"latest_commit_sha":null,"homepage":"https://axel3rd.github.io/mpg-coach-bot/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/axel3rd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":"https://www.paypal.me/axel3rd"}},"created_at":"2018-09-19T20:17:17.000Z","updated_at":"2026-03-04T22:44:23.000Z","dependencies_parsed_at":"2024-09-08T19:58:20.243Z","dependency_job_id":"e1be5e5a-2e58-4824-98e8-c420ae883cb6","html_url":"https://github.com/axel3rd/mpg-coach-bot","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/axel3rd/mpg-coach-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axel3rd%2Fmpg-coach-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axel3rd%2Fmpg-coach-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axel3rd%2Fmpg-coach-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axel3rd%2Fmpg-coach-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/axel3rd","download_url":"https://codeload.github.com/axel3rd/mpg-coach-bot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axel3rd%2Fmpg-coach-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30238295,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T23:52:25.683Z","status":"ssl_error","status_checked_at":"2026-03-07T23:52:25.373Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bot","java","mon-petit-gazon","mpg"],"created_at":"2026-03-08T00:11:44.963Z","updated_at":"2026-03-08T00:11:45.094Z","avatar_url":"https://github.com/axel3rd.png","language":"Java","funding_links":["https://www.paypal.me/axel3rd"],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://github.com/axel3rd/mpg-coach-bot/workflows/Development%20Build/badge.svg)](https://github.com/axel3rd/mpg-coach-bot/actions?query=workflow%3A%22Development+Build%22) [![SonarCloud Status](https://sonarcloud.io/api/project_badges/measure?project=org.blondin%3Ampg-coach-bot\\\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=org.blondin%3Ampg-coach-bot)     [![Download](https://img.shields.io/github/v/release/axel3rd/mpg-coach-bot)](https://github.com/axel3rd/mpg-coach-bot/releases/latest)\n\n# mpg-coach-bot\n\nMPG (Mon Petit Gazon) coach bot, to automate and optimize weekly league actions\n\n\u003c!-- toc --\u003e\n\n* [Concept](#concept)\n* [Usage](#usage)\n* [Sample output](#sample-output)\n  * [Principal](#principal)\n  * [Team Update](#team-update)\n  * [Transaction proposal](#transaction-proposal)\n* [Usage (advanced)](#usage-advanced)\n  * [Configuration](#configuration)\n    * [Proxy http](#proxy-http)\n    * [Team update](#team-update)\n    * [Focus on recent efficiency](#focus-on-recent-efficiency)\n    * [Use bonus](#use-bonus)\n    * [Leagues inclusion / exclusion](#leagues-inclusion--exclusion)\n    * [Tactical substitutes](#tactical-substitutes)\n    * [Transactions proposal](#transactions-proposal)\n    * [Efficiency coefficient](#efficiency-coefficient)\n    * [SSL check](#ssl-check)\n    * [Requests successive wait time](#requests-successive-wait-time)\n    * [Authentications](#authentications)\n    * [Logs debug](#logs-debug)\n  * [Execution](#execution)\n* [Roadmap](#roadmap)\n  * [v1](#v1)\n  * [v2](#v2)\n  * [v3](#v3)\n* [Development process](#development-process)\n  * [Unit test execution](#unit-test-execution)\n  * [Build and release](#build-and-release)\n  * [Documentation format](#documentation-format)\n\n\u003c!-- tocstop --\u003e\n\n## Concept\n\nAutomate and optimize your [MPG](http://mpg.football/) weekly league actions, using external data like [mpgstats](https://www.mpgstats.fr) and [sportsgambler](https://www.sportsgambler.com/injuries/football/).\n\n**The common features are:**\n\n* Displaying your teams, line by line, ordered by players efficiency (with injured players)\n* Updating your team\n* Proposing some players to buy, better than the one you have (if option `transactions.proposal` is enabled and *MPG* expert mode is bought)\n* When league not started (aka: *mercato*), the best players to buy with good turn 1 auction (since v1.9) for your incoming team (since v1.10 long auction is used if season not started or current auction not representative)\n\n**NB:** Your tactical organization and selected bonus are not updated and let as configured (but selected if some will be lost or no captain).\n\nThe efficiency algorithm used to calculate players efficiency score is:\n\n```\nplayer.matchs / championshipDays * player.average * (1 + player.goals() * efficiency.coeff)\n```\n\n*With efficiency coeff : Attacker = 1.2 ; Midfielder = 1.05 ; Defender = 1.025 ; Goalkeeper = 1.*\n\nThis efficiency is focused on recent days (8 by default), current season notation can be used by disabling option `efficiency.recent.focus`.\n\n## Usage\n\n*Prerequisite: [java](https://www.java.com/fr/download/) should be installed and on your PATH (\u003e=21 since v1.14, \u003e=11 previously).*\n\nDownload package `mpg-coach-bot-X.Y.zip` file from [releases](https://github.com/axel3rd/mpg-coach-bot/releases) (or development SNAPSHOT from [packages](https://github.com/axel3rd/mpg-coach-bot/packages/)), extract ZIP files and update the given `mpg.properties` file with your *MPG* credentials and main options:\n\n```\nemail = firstName.lastName@gmail.com\npassword = foobar\n```\n\nDepending your environment system, run `mpg-coach-bot.bat` (Windows) or `mpg-coach-bot.sh` (Linux).\n\nTo fully automate update your weekly actions on your *MPG* leagues, you can use a Linux *crontab* (daily at 6pm, for sample).\n\n**Disclaimer**: *MPG* credentials are used to connect on *MPG* website API, to retrieve your leagues informations. These credentials are not stored outside the configuration file, but are in memory during the program execution.\n\n## Sample output\n\n### Principal\n\nThe main output is displaying:\n\n* Injured players, to remove of your team\n* Your team composition as remind\n* Your team line by line, ordered by efficiency score (*Eff.*), with the players quotation/prices (*Q.*):\n\n```\n========== Your league name (leagueId) ==========\nOut: Aouar Houssem (M - 34.88) - INJURY_ORANGE - Inconnu (depuis 12/11) - Inconnu\nOut: Ambroise Oyongo (D - 11.85) - INJURY_ORANGE - Blessure au genou (depuis 04/11) - Inconnu\n\nOptimized team (Compo: 343):\n+---+--------------------+-------+----+\n| P |    Player name     | Eff.  | Q. |\n+---+--------------------+-------+----+\n| G | Costil Benoit      |  5.58 | 20 |\n| G | Prior Jerome       |  0.00 | 7  |\n+---+--------------------+-------+----+\n| D | Le Tallec Damien   | 17.35 | 23 |\n| D | Meunier Thomas     | 13.13 | 24 |\n| D | Marquinhos         | 10.43 | 25 |\n| D | Kamara Boubacar    |  4.15 | 11 |\n| D | Dubois Léo         |  2.27 | 11 |\n+---+--------------------+-------+----+\n| M | Thauvin Florian    | 41.47 | 38 |\n| M | Tielemans Youri    | 17.73 | 13 |\n| M | Nkunku Christopher |  8.75 | 13 |\n| M | Lucas Evangelista  |  7.10 | 8  |\n| M | Luiz Gustavo       |  4.42 | 15 |\n| M | Lienard Dimitri    |  3.16 | 12 |\n+---+--------------------+-------+----+\n| A | Sala Emiliano      | 74.84 | 30 |\n| A | Neymar             | 73.48 | 52 |\n| A | Pepe Nicolas       | 65.61 | 36 |\n| A | Laborde Gaetan     | 44.12 | 24 |\n| A | Diony Lois         | 23.55 | 15 |\n| A | Ripart Renaud      | 18.19 | 17 |\n| A | Leya Iseka Aaron   | 11.38 | 10 |\n+---+--------------------+-------+----+\n```\n\n### Team Update\n\nWhen option `team.update` is enabled and *MPG* expert mode is bought, you will have in addition:\n\n```\nUpdating team ...\n```\n\n**NB**:  Injured players are not taken into account to compose your team during an update.\n\n### Transaction proposal\n\nWhen option `transactions.proposal` is enabled, you will have in addition:\n\n```\nTransactions proposal ...\nBudget: 2\nBudget if last players by line sold: 69\nPlayer(s) to buy (3 best choice by line):\n+---+----------------------------+-------+----+\n| P |        Player name         | Eff.  | Q. |\n+---+----------------------------+-------+----+\n| D | Badiashile Mukinayi Benoit |  9.62 | 9  |\n| D | Eboa Eboa Félix            |  5.89 | 11 |\n| D | Alakouch Sofiane           |  5.89 | 11 |\n| M | Lopez Maxime               | 11.27 | 15 |\n| M | Sarr Bouna                 | 10.64 | 14 |\n| M | Fulgini Angelo             | 10.64 | 13 |\n| A | Otero Juan Ferney          |  9.14 | 13 |\n| A | Kalifa Coulibaly           |  3.96 | 11 |\n| A | Skuletic Petar             |  3.50 | 12 |\n+---+----------------------------+-------+----+\n```\n\n## Usage (advanced)\n\n### Configuration\n\nEnvironments variable with `MPG_` and key name in upper case + '\\_' (ex: `MPG_EMAIL`, `MPG_PASSWORD`, ...) could be used (override configuration file in this case).\n\nThe `mpg.properties` file could be used to change the program behavior on multiple items. Here the option with default values for information (except for proxy).\n\n#### Proxy http\n\nIf you are using this program the Friday @work, you can have to configure the company proxy (since v1.1):\n\n```\n# Usage behind a company proxy\nproxy.uri = http://company.proxy.com:80\nproxy.user = foo\nproxy.password = bar\n```\n\n#### Team update\n\nTo update team automatically ('true' by default since v1.6):\n\n```\n# Enable auto-update team\nteam.update = true\n```\n\n#### Focus on recent efficiency\n\nTo focus on recent efficiency, about team proposal and buy transaction (since v1.3, 'true' by default since v1.6):\n\n```\n# Focus on recent efficiency\nefficiency.recent.focus = true\nefficiency.recent.days = 8\n```\n\n#### Use bonus\n\nTo use bonus if not already selected and some would be lost (since v1.6, captain selection since v1.8):\n\n```\n# Use bonus\nuse.bonus = true\n```\n\n#### Leagues inclusion / exclusion\n\nTo include only some leagues or remove some of them, leagues id separated by comma (since v1.5):\n\n```\n# Include/exclude leagues\nleagues.include = KX24XMUJ,KLGXSSUM\nleagues.exclude = LJT3FXDX\n```\n\n#### Tactical substitutes\n\nTo enable/disable and change default notes for tactical substitutes (since v1.1):\n\n```\n# Notes for tactical substitutes\ntactical.substitutes = true\ntactical.substitute.attacker = 6.0\ntactical.substitute.midfielder = 5.0\ntactical.substitute.defender = 5.0\n```\n\n#### Transactions proposal\n\nTo enable/disable and change default notes for proposal of selling players (since v1.2):\n\n```\n# Enable sell/buy players proposal\ntransactions.proposal = true\n\n# Notes for proposal of selling players\nefficiency.sell.attacker = 3.0\nefficiency.sell.midfielder= 3.0\nefficiency.sell.defender = 3.0\nefficiency.sell.goalkeeper = 3.0\n```\n\n#### Efficiency coefficient\n\nTo change default efficiency coefficient for players (since v1.2):\n\n```\n# Efficiency coefficient\nefficiency.coefficient.attacker = 1.2\nefficiency.coefficient.midfielder = 1.05\nefficiency.coefficient.defender = 1.025\nefficiency.coefficient.goalkeeper = 1.0\n```\n\n#### SSL check\n\nTo enable/disable SSL certificates check (since v1.7):\n\n```\n# Check SSL certificates of third part Website\nssl.certificates.check = true\n```\n\n#### Requests successive wait time\n\nTo avoid any temporary ban on some third-party websites, wait a little before between successive requests (since v1.7.1):\n\n```\n# Wait time (in seconds) for successive requests on URLs (list separated by comma)\nrequest.wait.urls=https://www.sportsgambler.com\nrequest.wait.time=1\n```\n\n#### Authentications\n\nTo customize authentications type (since v1.13):\n\n```\n# Authentications (simple = direct API signIn / oidc = Ligue1 website mechanism required for account created after February 2025)\nauthentications = simple,oidc\n```\n\n#### Logs debug\n\nTo add some debug logs about execution (since v1.2):\n\n```\n# Enable debug logs\nlogs.debug = false\n```\n\n### Execution\n\nYou can execute in command line:\n\n```\njava -jar mpg-coach-bot-x.y.z.jar your-mpg-config.properties\n```\n\nNote : If no file provided as parameter, a `mpg.properties` file will be used in working directory (if exist).\n\n## Roadmap\n\nDetails of working progress in [milestones](../../milestones) (and [issues](../../issues)).\n\n### v1\n\nSimple Java auto-executable batch (which jersey 2, jackson, ...), which include feature like:\n\n* List your league players by efficiency (titular's regularity, score, ...) for current formation, to establish the best team for next match\n* Propose changes to reach the probable best team\n* Update team automatically\n* Propose to sell and buy some players to optimize team\n* ...\n\n### v2\n\nWeb application with friendly UI (Spring boot, docker container, JS Frontend, ...) to facilitate usage.\n\n### v3\n\nData mining on media resources to optimize team (injuries, coach announcements, ...).\n\n## Development process\n\n### Unit test execution\n\nJRE VM argument should be (in Eclipse, ...):\n\n```\n-ea -Xshare:off -javaagent:C:/[...]/.m2/repository/org/mockito/mockito-core/5.[version]/mockito-core-5.[version].jar\n```\n\n### Build and release\n\nThis project is using [Maven](https://maven.apache.org/) as integration tool.\n\nFor development/SNAPSHOT build, use:\n\n```\nmvn package\n```\n\nLocally on your computer, you can improve end2end tests by providing file `src/test/resources/mpg.properties` file (which is not a symlink!) with *real* data (see `mpg.properties.here` file in directory for details):\n\n```\nemail = firstName.lastName@gmail.com\npassword = foobar\n```\n\nFor release build, use:\n\n```\ngit reset --hard origin/master \ngit branch -m next-version \nmvn -B clean release:clean release:prepare -Dusername=yourGitHubLogin -Dpassword=yourGitHubPasswordOrToken\n```\n\nAfter that, you would have to create pull-request from 'next-version' branch and rebase it on master for next version development.\n\n### Documentation format\n\nThis project is using [NPM](https://docs.npmjs.com/) as complementary tool for documentation formatting.\n\nFor format documentation, use (see [package.json](./package.json) for details):\n\n```\nnpm run format-all\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxel3rd%2Fmpg-coach-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxel3rd%2Fmpg-coach-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxel3rd%2Fmpg-coach-bot/lists"}