积分记录

记录积分变化

目前为 2023-05-04 提交的版本,查看 最新版本

// ==UserScript==
// @name         积分记录
// @namespace    http://tampermonkey.net/
// @version      0.2.2
// @description  记录积分变化
// @author       You
// @match        https://www.gamemale.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=gamemale.com
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==
this.$ = this.jQuery = jQuery.noConflict(true);

(function () {
    'use strict';
    //进入帖子时更新
    if(window.location.href.slice(25,31)=="thread"){
        console.log("脚本已生效");
        checkCredits()
        showCredits()
        showReply()
        var button = document.querySelector("#fastpostsubmit")
        button.addEventListener("click", function(){
            setTimeout(() => {
                replycount()
                updateShow()
            }, 3000);
        });
    }
})();
function replycount(){
    let reply=JSON.parse(localStorage.getItem("reply"))
    reply.count++;
    localStorage.setItem("reply", JSON.stringify(reply));
}

function showReply(){
    let reply=JSON.parse(localStorage.getItem("reply"))
    let today=new Date().toLocaleDateString()
    if(reply==null||reply==undefined||reply.date!=today){
        reply={   
            "date": today,
            "count":0
        }
        console.log("reply init");
    }
    localStorage.setItem("reply", JSON.stringify(reply));

    if(document.getElementsByClassName("showReply")[0]!=null||document.getElementsByClassName("showReply")[0]!=undefined){
        document.getElementsByClassName("showReply")[0].remove()
    }
    let div=document.createElement("div")
    div.setAttribute('class','showReply')
    div.innerHTML="【累计回帖】:"+reply.count
    let e=document.querySelector(`#fastpostform > table > tbody > tr > td.plc`)
    e.appendChild(div)
}

function updateShow(){
    document.getElementsByClassName("showCredits")[0].remove()
    document.getElementsByClassName("showCredits")[0].remove()
    document.getElementsByClassName("showReply")[0].remove()
    checkCredits()
    showReply()
    showCredits()

}
function showCredits(){
    let change = JSON.parse(localStorage.getItem("change"))
    let sum = JSON.parse(localStorage.getItem("sum"))
    delete change.日期
    delete sum.日期

    let e=document.querySelector(`#fastpostform > table > tbody > tr > td.plc`)
    if(e!=null||e!=undefined){
        let div1=document.createElement("div")
        div1.innerHTML="【积分变动】:"+JSON.stringify(change)
        div1.setAttribute('class','showCredits')
        e.appendChild(div1)
        let div2=document.createElement("div")
        div2.innerHTML="【当日累积】:"+JSON.stringify(sum)
        div2.setAttribute('class','showCredits')
        e.appendChild(div2)
    }else{
        console.log("【积分变动】:"+JSON.stringify(change),"【当日累积】:"+JSON.stringify(sum));
    }

}


//上一次积分变动:change-{}
function checkCredits() {
    let old = JSON.parse(localStorage.getItem("latest"))
    if (old == null || old == undefined) {
        console.log("初始化积分信息");
        creditsDataInit();
    } else {
        let latest = getRecord()
        //遍历对象属性
        let change = shallowEqual(old, latest)
        if (change == true) {
            console.log("积分未发生变动");
            //清空change?
        } else {
            localStorage.setItem("change", JSON.stringify(change))
            let sum = sumCredits()//需要用到change
            localStorage.setItem("sum", JSON.stringify(sum))
            console.log("积分存在变动,change:", change, "累积变动:", sum);

            localStorage.setItem("latest", JSON.stringify(latest))
            console.log("更新当前积分:", latest);
        }
    }

}
function creditsDataInit() {
    let latest = getRecord()
    localStorage.setItem("latest", JSON.stringify(latest))
    let change = latest
    let keys = Object.keys(change);
    for (let index = 0; index < keys.length; index++) {
        if (keys[index] != "日期") {
            change[keys[index]] = 0
        }
    }
    localStorage.setItem("change", JSON.stringify(change))
    localStorage.setItem("sum", JSON.stringify(change))
}

//累积积分变动
function sumCredits() {
    let sum = JSON.parse(localStorage.getItem("sum"));
    let change = JSON.parse(localStorage.getItem("change"));
    let keys = Object.keys(change);
    //sum的日期(sum["日期"])与今天不同时,初始化
    let dateStr = new Date().toLocaleDateString()
    if (sum["日期"] != dateStr) {
        sum = getRecord()
        for (let index = 0; index < keys.length; index++) {
            if (keys[index] != "日期") {
                sum[keys[index]] = 0
            }
        }
        console.log("变化累积不是当日的,初始化:", sum);
    }
    //change累加到sum
    for (let index = 0; index < keys.length; index++) {
        if (keys[index] != "日期") {
            sum[keys[index]] = sum[keys[index]] + change[keys[index]]
        }
    }
    console.log("sum:", sum);
    return sum;
}

function shallowEqual(old, latest) {
    let equal = true;
    const keys1 = Object.keys(old);
    const keys2 = Object.keys(latest);
    if (keys1.length !== keys2.length) {
        equal = false;
    } else {
        for (let index = 0; index < keys1.length; index++) {
            const val1 = old[keys1[index]];
            const val2 = latest[keys2[index]];
            if (val1 !== val2) {
                equal = false;
                break;
            }
        }
    }
    if (equal == true) {
        return true;
    } else {
        let result = old
        for (let index = 0; index < keys1.length; index++) {
            if (keys1[index] != "日期") {
                result[keys1[index]] = latest[keys2[index]] - old[keys1[index]]
            } else {
                result[keys1[index]] = latest[keys2[index]]
            }
        }
        return result;
    }
}

//【同步】网络请求并本地存储
function getRecord() {
    let result = null;
    let re = /\d+/g//g:查询多次,而不是查询第一个符合
    $.ajax({
        type: "get",
        url: "https://www.gamemale.com/home.php?mod=spacecp&ac=credit&showcredit=1&inajax=1&ajaxtarget=extcreditmenu_menu",
        cache: false,
        async: false,//同步请求
        dataType: "text",
        success: function (data) {   // data是形参名,代表返回的数据
            var dom = document.createElement('div');
            dom.innerHTML = data;
            let lis = dom.firstElementChild.firstElementChild.children;
            let credits = {};
            let dateString = new Date().toLocaleDateString()// =>2023/5/4.
            credits["日期"] = dateString;
            for (let i = 0; i < lis.length; i++) {
                let credit = Number(lis[i].children[1].innerHTML.match(re)[0])
                switch (i) {
                    case 0:
                        credits["旅程"] = credit
                        break;
                    case 1:
                        credits["金币"] = credit
                        break;
                    case 2:
                        credits["血液"] = credit
                        break;
                    case 3:
                        credits["追随"] = credit
                        break;
                    case 4:
                        credits["咒术"] = credit
                        break;
                    case 5:
                        credits["知识"] = credit
                        break;
                    case 6:
                        credits["灵魂"] = credit
                        break;
                    case 7:
                        credits["堕落"] = credit
                        break;
                    default:
                        break;
                }
            }
            result = credits;
            // window.localStorage.setItem("record", data)
        },
        error: function (error) {
            console.log(error);
            result = error
        }
    });
    return result;
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址