GC - Fishing Logger

Beta version of a fishing reward logging script. Features coming soon: Webhooks!

目前為 2023-12-25 提交的版本,檢視 最新版本

// ==UserScript==
// @name        GC - Fishing Logger
// @namespace   Grundo's Cafe
// @match       https://www.grundos.cafe/water/fishing/
// @version     1
// @license     MIT
// @author      Cupkait
// @description Beta version of a fishing reward logging script. Features coming soon: Webhooks!
// ==/UserScript==

//Last updated: December 24, 2023


const getPetLevelsAsync = fetch("/quickref/")
    .then(response => {
        if (!response.ok) {
            throw new Error(`Network response was not ok: ${response.statusText}`);
        }
        return response.text();
    })
    .then(html => {
        const tempElement = document.createElement('div');
        tempElement.innerHTML = html;
        const petList = tempElement.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;";


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',
            }
        }

    if (welcomeText.startsWith('Welcome to the') || patientText.startsWith('Nothing!')) {
        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}`;
            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}`;
                fetch(logResponse, opts);
            });
        }
    }
});