🏠 Home 

Fast_Trade_In

优化回收流程

// ==UserScript==
// @name:zh-CN      DIG批量回收
// @name            Fast_Trade_In
// @namespace       https://blog.chrxw.com
// @supportURL      https://blog.chrxw.com/scripts.html
// @contributionURL https://afdian.com/@chr233
// @version         1.2
// @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 r###lt = await makeTradeIn(href);
if (r###lt === 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 r###lt = await makeTradeIn(link.data);
if (r###lt === 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;
}
`);