[GC] - Underwater Fishing Data Logger

Fishing rewards logging.

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

// ==UserScript==
// @name        [GC] - Underwater Fishing Data Logger
// @namespace   Grundo's Cafe
// @match       https://www.grundos.cafe/water/fishing/
// @grant       none
// @version     1.2.1
// @license     MIT
// @author      Cupkait
// @icon        https://i.imgur.com/4Hm2e6z.png
// @description Fishing rewards logging.
// ==/UserScript==

const getPetLevelsAsync = fetch("/quickref/")
    .then(response => {
        if (!response.ok) {
            throw new Error(`Network response was not ok: ${response.statusText}`);
        }
        return response.text();
    })
    .then(async html => {
        const node = await new DOMParser().parseFromString(html, "text/html");
        const pageEventElement = node.getElementById('page_event');

                                                        //Credit to Twiggies and Devi for the RE handle portion of this code!
        if (pageEventElement.innerHTML.trim() !== '') {
            const existingPageEvent = document.getElementById('page_event');
            existingPageEvent.innerHTML += pageEventElement.innerHTML;
        }

        return node;
    })
    .catch(error => {
        // Handle errors here
        console.error('Error:', error);
    })

    .then(node => {
        const petList = node.querySelector('#quickref_petlist').children;

        const petLevels = {};

        $(petList).each(function () {
            const petrefName = $(this).find('a').eq(0).attr('href').match(/_name=(.*?)$/)[1];
            const petFishingLevel = $(this).find('span').eq(12).text().match(/Fishing : (.*?)$/)[1];
            petLevels[petrefName] = petFishingLevel;
        });


        return petLevels;
    })
    .catch(error => {
        console.error(error);
    });

let confirmResults = document.createElement("div");
confirmResults.innerHTML = "Pending...";
confirmResults.id = "confirmResults";
confirmResults.style.cssText = "color: green; text-align: center; link-color:green; font-size:14px; font-weight:bold;";
let getAvatar = ' ';

getPetLevelsAsync.then(petLevels => {
    const fishContent = document.querySelector('div#page_content > main');
    const welcomeText = fishContent.children[1].innerText;
    const patientText = fishContent.children[2].innerText;
    const petCount = document.querySelectorAll('main > div > div');
    const petName = document.querySelector('div#userinfo > a').href;
    let opts = {
        mode: "no-cors",
        referrer: "no-referrer",
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        }
    };

    function avatarCheck() {
        const avatarContainer = document.querySelector('div#page_event');
        if (
            !avatarContainer.innerText.includes("Let's Get This Bread") &&
            !avatarContainer.innerText.includes("Fishing - Titanic Squid")
        ) {
            getAvatar = '';
            console.log("No avatar detected.");
        } else {
            console.log("Avatar detected.");
            if (avatarContainer.innerText.includes("Fishing - Titanic Squid")) {
                getAvatar = 'Skeith - Fishing - Titanic Squid';
            } else if (avatarContainer.innerText.includes("Let's Get This Bread")) {
                getAvatar = 'Let\'s Get This Bread';
            }
            console.log(`Avatar:`, getAvatar);
        }
    }
            let freeOne = $("#userinfo a").eq(2).text();

if ((welcomeText.startsWith('Welcome to the') || patientText.startsWith('Nothing!') || patientText.startsWith('Looks like')) && freeOne === null) {
    console.log("Nothing to log here... it looks like no one went fishing.");
} else {
        if (petCount.length === 0) { // One Pet
            const content = $("#page_content");
            const userName = /user=(.*?)"/g.exec(document.body.innerHTML)[1];
            const petName = $("#userinfo a").eq(2).text();
            const coolDown = content.find("strong").eq(0).text();
            const itemName = fishContent.querySelector("img").alt;

            let petLevel = petLevels[petName] || ' ';
            let levelUp = '';

            try {
                levelUp = content.find("p").eq(2).text().match(/to (.*?)!/)[1];
                petLevel = !isNaN(levelUp) ? parseInt(levelUp, 10) - 1 : petLevel;
            } catch (error) {
                // DO NOTHING
            }
            fishContent.insertAdjacentElement('beforebegin', confirmResults);
            confirmResults.innerHTML = `Your fishing results have been <a href="https://lookerstudio.google.com/reporting/ec18c798-ee62-4a7d-8315-5569c8de5ef6" target="_blank">submitted</a>.`
            const logResponse = `https://docs.google.com/forms/d/e/1FAIpQLSdBhJS1NSxHCmy32BqH0DEdQRJci1IVPOWUFcaothsiZjXu-w/formResponse?usp=pp_url&entry.886049257=${userName}&entry.343654154=${petName}&entry.1922136733=${petLevel}&entry.693447328=${levelUp}&entry.881968876=${itemName}&entry.303510013=${coolDown}&entry.1110645895=${getAvatar}`;
            fetch(logResponse, opts);
        } else {
            $(".flex.center-items.big-gap").each(function () {
                const userName = /user=(.*?)"/g.exec(document.body.innerHTML)[1];
                const petName = $(this).find("strong").eq(0).text();
                const itemURL = $(this).find("img").eq(1).attr("src");
                const coolDown = $(this).find("strong").eq(1).text();
                const itemName = $(this).find("p").eq(0).text().match(/ a (.*?)!/)[1];

                let petLevel = petLevels[petName] || '';
                let levelUp = '';

                try {
                    levelUp = $(this).find("p").eq(1).text().match(/to (.*?)!/)[1];
                    petLevel = !isNaN(levelUp) ? parseInt(levelUp, 10) - 1 : petLevel;
                } catch (error) {
                    // DO NOTHING
                }
                fishContent.insertAdjacentElement('beforebegin', confirmResults);
                confirmResults.innerHTML = `Your fishing results have been <a href="https://lookerstudio.google.com/reporting/ec18c798-ee62-4a7d-8315-5569c8de5ef6" target="_blank">submitted</a>.`
                const logResponse = `https://docs.google.com/forms/d/e/1FAIpQLSdBhJS1NSxHCmy32BqH0DEdQRJci1IVPOWUFcaothsiZjXu-w/formResponse?usp=pp_url&entry.886049257=${userName}&entry.343654154=${petName}&entry.1922136733=${petLevel}&entry.693447328=${levelUp}&entry.881968876=${itemName}&entry.303510013=${coolDown}&entry.1110645895=${getAvatar}`;
                fetch(logResponse, opts);
            });
        }
    }
});