OverTimee

OTtaruih

// ==UserScript==
// @name         OverTimee
// @version      0.2
// @description  OTtaruih
// @author       You
// @match        https://www.erepublik.com/en/economy/myCompanies
// @icon         https://www.google.com/s2/favicons?sz=64&domain=erepublik.com
// @grant        none
// @namespace https://greasyfork.org/users/1144622
// ==/UserScript==
(function() {
    'use strict';

    const _token = csrfToken;
    const interval = 3615000;

    async function mainFunction() {
        const captcha = checkSessionValidationExists();
        const next = checkLocalStorage();
        const now = getCurrentUnixTimestamp();

        if (!captcha) {
            if (next < now) {
                const job = await fetchData(`https://www.erepublik.com/en/main/job-data`);
                if (job) {
                    const worked = job.alreadyWorked;
                    const nextOT = job.overTime.nextOverTime;

                    const payload = payloadOT();
                    await delay(5000);
                    await OT(payload);


                    if (next < nextOT) {
                        editLocalStorage(nextOT);
                    }
                    console.log(worked);
                    console.log(nextOT);

                    const time = msToHMS(nextOT);
                    const newT = getCurrentUnixTimestamp();
                    const delayT = (nextOT - newT + 2) * 1000;

                    console.log(time);
                    await delay(delayT);
                    redirectToErepublik();

                }
            }

        }
    }

    //end of line
    // Call the main function when the page loads
    window.addEventListener('load', mainFunction);


    function msToHMS(unixTimestamp) {
        const date = new Date(unixTimestamp * 1000);
        const hours = String(date.getHours()).padStart(2, '0');
        const minutes = String(date.getMinutes()).padStart(2, '0');
        const seconds = String(date.getSeconds()).padStart(2, '0');
        return `${hours}:${minutes}:${seconds}`;
      }

    function checkLocalStorage() {

        const checkData = localStorage.getItem("OT");
        if (checkData) {

            return parseInt(checkData, 10);
        } else {
            const zero = 0;
            localStorage.setItem("OT", zero.toString());
            return zero;
        }
    }

    function editLocalStorage(newValue) {
        const checkData = checkLocalStorage();
        const currentTime = getCurrentUnixTimestamp();

        if (currentTime > checkData || (currentTime < newValue && newValue < checkData)) {
            localStorage.setItem("OT", newValue.toString());
        }
    }

    function checkSessionValidationExists() {
        if (typeof SERVER_DATA !== 'undefined' && SERVER_DATA.sessionValidation !== undefined) {
            return true;
        } else {
            return false;
        }
    }

    function getCurrentUnixTimestamp() {
        const currentTime = new Date();
        const unixTimestamp = Math.floor(currentTime.getTime() / 1000); // Convert milliseconds to seconds
        return unixTimestamp;
    }

    function delay(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }

    async function fetchData(url) {
        try {
            const response = await fetch(url);
            if (!response.ok) {
                throw new Error(`HTTP error! Status: ${response.status}`);
            }
            const data = await response.json();
            return data;
        } catch (error) {
            throw new Error(`Failed to fetch data from ${url}: ${error.message}`);
        }
    }

    // Function to construct the payload from variables
    function payloadOT() {
        const action_type = "workOvertime";

        return {
            action_type,
            _token
        };
    }

    // Function to send the payload using POST request
    async function OT(payload) {
        const url = "https://www.erepublik.com/en/economy/workOvertime";

        try {
            const response = await fetch(url, {
                method: "POST",
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded"
                },
                body: Object.keys(payload)
                    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(payload[key])}`)
                    .join('&')
            });

            const responseData = await response.json();
            return responseData;
        } catch (error) {
            console.error("Error:", error);
            return null;
        }
    }

    function redirectToErepublik() {
        window.location.href = "https://www.erepublik.com/en/economy/myCompanies";
    }
})();