Greasy Fork

MZ_Track_Youth_Exchange_Players

Persist player data from Youth Academy page when swapping or rejecting players — experiment

目前为 2024-05-05 提交的版本。查看 最新版本

// ==UserScript==
// @name         MZ_Track_Youth_Exchange_Players
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  Persist player data from Youth Academy page when swapping or rejecting players — experiment
// @author       You
// @match        *://www.managerzone.com/?p=youth_academy*
// @grant        GM_xmlhttpRequest
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    let username = '';
    let nationality = '';
    const youthExchangePlayerAge = 16;

    console.log("Will save youth exchange data to db.");

    const fetchNationality = (username) => {
        GM_xmlhttpRequest({
            method: "GET",
            url: `http://www.managerzone.com/xml/manager_data.php?sport_id=1&username=${username}`,
            onload: function (response) {
                const parser = new DOMParser();
                const xmlDoc = parser.parseFromString(response.responseText, "text/xml");
                const countryShortname = xmlDoc.querySelector('UserData') ? xmlDoc.querySelector('UserData').getAttribute('countryShortname') : 'Not found';
                getCountryFullName(countryShortname);
            },
            onerror: function () {
                console.log("Error fetching nationality.");
                setupRejectExchListeners();
            }
        });
    };

    const getCountryFullName = (shortName) => {
        GM_xmlhttpRequest({
            method: "GET",
            url: 'https://gist.githubusercontent.com/douglasdotv/ab34745e73c41fa612913e96a968fba9/raw/b21e8512e6a0ae2fb1f37d2fc547140435932b1d/countries.json',
            onload: function (response) {
                const countries = JSON.parse(response.responseText);
                const country = countries.find(c => c.code === shortName);
                nationality = country ? country.name : shortName;
                setupRejectExchListeners();
            },
            onerror: function () {
                console.log("Error fetching full country name.");
            }
        });
    };

    const sendDataToAzureFunction = (youthExchangeObj) => {
        console.log(youthExchangeObj);
        GM_xmlhttpRequest({
            method: "POST",
            url: "https://mziscool.azurewebsites.net/save",
            headers: {
                "Content-Type": "application/json"
            },
            data: JSON.stringify(youthExchangeObj),
            onload: function(response) {
                console.log(`Youth player data sent. Response code ${response.status}: ${response.responseText}`);
            },
            onerror: function(error) {
                console.log('Erro ao enviar dados:', error);
            }
        });
    };

    const extractSkillNameAndLevel = (skillString) => {
        const match = skillString.trim().match(/([HL])(\d+) (.+)/);
        return match ? { level: parseInt(match[2]), name: match[3] } : { level: 0, name: skillString.trim() };
    };

    const preparePlayerData = (playerData) => {
        const hpSkillsArray = playerData.hpSkills.split(",");
        const lpSkillsArray = playerData.lpSkills.split(",");

        const firstHpSkill = extractSkillNameAndLevel(hpSkillsArray[0]);
        const secondHpSkill = hpSkillsArray.length > 1 ? extractSkillNameAndLevel(hpSkillsArray[1]) : { level: 0, name: "" };

        const firstLpSkill = extractSkillNameAndLevel(lpSkillsArray[0]);
        const secondLpSkill = lpSkillsArray.length > 1 ? extractSkillNameAndLevel(lpSkillsArray[1]) : { level: 0, name: "" };

        return {
            partitionKey: playerData.totalSkillBalls + "Balls",
            rowKey: playerData.playerID,
            name: playerData.playerName,
            age: youthExchangePlayerAge,
            country: nationality,
            hp: firstHpSkill.level,
            firstHpSkill: firstHpSkill.name,
            secondHpSkill: secondHpSkill.name,
            lp: firstLpSkill.level,
            firstLpSkill: firstLpSkill.name,
            secondLpSkill: secondLpSkill.name,
            totalBalls: playerData.totalSkillBalls,
            owner: username
        };
    };

    const extractPlayerData = () => {
        const playerContainer = document.getElementById("thePlayers_x");
        if (!playerContainer) {
            console.log("Player container not found.");
            return;
        }

        try {
            const playerName = playerContainer.querySelector('.player_name').textContent || 'Unknown';
            const playerID = playerContainer.querySelector('.player_id_span').textContent || 'Unknown';
            const hpSkills = playerContainer.querySelector('[id^="GM_scout_"]').textContent.match(/\[H\d [^\]]+\]/) || ['H0 Unknown'];
            const lpSkills = playerContainer.querySelector('[id^="GM_scout_"]').textContent.match(/\[L\d [^\]]+\]/) || ['L0 Unknown'];
            const totalSkillBalls = playerContainer.querySelectorAll('tbody > tr')[6].querySelector('.bold').textContent || 'Unknown';

            const playerData = {
                playerID: playerID,
                playerName: playerName,
                hpSkills: hpSkills[0].replace(/\[|\]/g, ''),
                lpSkills: lpSkills[0].replace(/\[|\]/g, ''),
                totalSkillBalls: totalSkillBalls
            };

            const azureFuncObj = preparePlayerData(playerData);
            sendDataToAzureFunction(azureFuncObj);
        } catch (error) {
            console.error("Error extracting player data: ", error);
        }
    };


    const setupRejectExchListeners = () => {
        setInterval(() => {
            const rejectButton = document.querySelector('#discard_youth_button');
            const exchangeButton = document.querySelector('#exchange_button');
            if (rejectButton && !rejectButton.dataset.listenerAdded) {
                rejectButton.addEventListener('click', extractPlayerData);
                rejectButton.dataset.listenerAdded = true;
            }
            if (exchangeButton && !exchangeButton.dataset.listenerAdded) {
                exchangeButton.addEventListener('click', extractPlayerData);
                exchangeButton.dataset.listenerAdded = true;
            }
        }, 333);
    };

    window.addEventListener('load', () => {
        const usernameElement = document.getElementById('header-username');
        username = usernameElement ? usernameElement.textContent : 'Unknown';
        fetchNationality(username);
    });
})();