Fast_Trade_In

优化回收流程

La data de 25-06-2024. Vezi ultima versiune.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name:zh-CN      DIG批量回收
// @name            Fast_Trade_In
// @namespace       https://blog.chrxw.com
// @supportURL      https://blog.chrxw.com/scripts.html
// @contributionURL https://afdian.net/@chr233
// @version         1.1
// @description     优化回收流程
// @description:zh-CN  添加删除按钮
// @author          Chr_
// @include         https://www.dailyindiegame.com/account_*.html
// @license         AGPL-3.0
// @icon            https://blog.chrxw.com/favicon.ico
// @grant           GM_addStyle
// ==/UserScript==

// 初始化
(() => {
    "use strict";

    initPanel();

    function initPanel() {
        function genChk(name, title, checked = false) {
            const l = document.createElement("label");
            const i = document.createElement("input");
            const s = document.createElement("span");
            s.textContent = name;
            i.title = title;
            i.type = "checkbox";
            i.checked = checked;
            l.title = title;
            l.className = "fti_chk";
            l.appendChild(i);
            l.appendChild(s);
            return [l, i];
        }
        function genBtn(text, title, onclick) {
            let btn = document.createElement("button");
            btn.textContent = text;
            btn.title = title;
            btn.className = "fti_btn";
            btn.addEventListener("click", onclick);
            return btn;
        }

        const [lblAlert, chkAlert] = genChk("直接回收", "回收前是否弹出提示框", false);
        const btnAllTradeIn = genBtn("全部回收", "回收所有选中的游戏", doTradeIn);

        const tradeInLinks = document.querySelectorAll("a[href^='account_buyback']");
        for (let link of tradeInLinks) {
            const href = link.href;
            link.href = "#";
            link.data = href;

            link.addEventListener("click", async (e) => {
                e.preventDefault();

                if (!chkAlert.checked && !confirm("确定要回收吗?")) {
                    return;
                }

                const result = await makeTradeIn(href);
                if (result === 200) {
                    link.style.textDecoration = "line-through";
                    link.disabled = true;
                }
            });
        }

        async function doTradeIn() {
            if (!chkAlert.checked && !confirm("确定要回收吗?")) {
                return;
            }

            for (let link of tradeInLinks) {
                if (link.disabled) {
                    continue;
                }

                const result = await makeTradeIn(link.data);
                if (result === 200) {
                    link.style.textDecoration = "line-through";
                    link.disabled = true;
                }
            }
        }

        if (tradeInLinks.length > 0) {
            document.body.appendChild(lblAlert);
            document.body.appendChild(btnAllTradeIn);
        }
    }

    function makeTradeIn(url) {
        return new Promise((resolve, reject) => {
            fetch(url, {
                method: "POST",
                credentials: "include",
                data: "send=Trade KEY",
            })
                .then(async (response) => {
                    if (response.ok) {
                        const text = await response.text();
                        resolve(200);
                    } else {
                        resolve(response.status);
                    }
                })
                .catch((err) => {
                    console.error(err);
                    resolve(-1);
                });
        });
    }
})();

GM_addStyle(`
  .fti_chk {
    color: orange;
  }
`);