// ==UserScript== // @name AGNT.Hub Task Automation // @namespace http://tampermonkey.net/ // @version 0.1 // @description Automate AGNT.Hub tasks using current page's Cookie and Headers // @author Jack // @match https://quests.agnthub.ai/* // @grant GM_xmlhttpRequest // @connect hub-api.agnthub.ai // @connect quests.agnthub.ai // ==/UserScript== (function () { "use strict"; const executeButton = document.createElement("button"); executeButton.textContent = "恶魔城,启动!!"; button.style.position = "fixed"; button.style.top = "10%"; button.style.left = "2%"; button.style.transform = "translateY(-50%)"; button.style.padding = "3px 8px"; button.style.fontSize = "10px"; button.style.backgroundColor = "#007baf"; button.style.color = "#fff"; button.style.border = "none"; button.style.borderRadius = "5px"; button.style.cursor = "pointer"; button.style.zIndex = "10000"; executeButton.addEventListener("click", function () { const currentCookie = document.cookie; const responses = []; const tasks = [ { url: "https://hub-api.agnthub.ai/api/daily-rewards/claim", headers: { accept: "application/json, text/plain, */*", "accept-encoding": "gzip, deflate, br, zstd", "accept-language": "zh-CN,zh;q=0.9", "content-length": "0", cookie: currentCookie, origin: "https://quests.agnthub.ai", priority: "u=1, i", referer: "https://quests.agnthub.ai/", "sec-ch-ua": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-site", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36", }, }, { url: "https://hub-api.agnthub.ai/api/tasks/make-ai-laugh/34ecad1e-94df-48ba-b5f4-242fdd9d6546", headers: { accept: "application/json, text/plain, */*", "accept-encoding": "gzip, deflate, br, zstd", "accept-language": "zh-CN,zh;q=0.9", "content-length": "0", cookie: currentCookie, origin: "https://quests.agnthub.ai", priority: "u=1, i", referer: "https://quests.agnthub.ai/", "sec-ch-ua": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-site", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36", }, }, ]; const tasksList = [ "6813de78-f821-4a84-8e8c-3aa89c15b2aa", "fce2e806-a6c7-4de2-abc2-260d13bcfb2f", "0bcb7d19-7c63-4933-96b0-00141ce54dbe", "2f3241c5-29a0-4f47-acf3-9370baf94e74", "d2b35062-40c1-48b8-bca5-c48779ccc66d", "ab2fd158-b894-47bc-aadb-645259b46cc0", "3861cd8e-5393-4285-b6ee-29a5ee301ee5", "1a75844a-a108-4fbd-bfc3-c7476b26b73d", "217e2f67-c110-4ef7-a636-8ac0623df3e8", "49c1db40-8ecf-4454-af0a-fcc81b222135", "2e6ff98c-132b-4886-8f38-6c89d1a7b02a", "9fc278e8-4045-4130-9f52-6ce3b713318c", "4f913da3-58b6-4636-a2c2-912fb01c73d4", "6216f4e1-eafb-4442-a5d4-5b1830f89655", "ebbba0a4-96d9-4fa4-85f9-6fb07fbc282a", "5172f361-d28e-4aa2-a3ba-2adfe5057539", "f81146e9-9ef9-4979-b0a0-437ea5c3e1bb", "22301ec3-3a75-4758-a886-ab768312ffe5", "6debaef3-844e-40f3-be6d-d99a6fd9f2a1", "932d0c29-22ad-4be5-92b4-fc3a2e13aaed", "05027b13-88a3-42a4-992a-0ce2a53068d4", "9e0addfa-51fd-4f3b-a6f2-8dbe301265aa", "4a42ba64-7822-469c-8899-bc07b5dd5d69", "516d941e-b006-4744-a190-6c3207750854", "bf9e7362-5eed-4110-bbe3-1289722a36b3", "7eed7668-e71a-42ed-98ac-a0ded8bc0296", "2cac41ba-36dd-4389-91b6-f8ee840083db", "6f888d49-2b59-4ba9-a7be-199dceff45ab", ]; console.log("开始执行任务列表"); function checkAllRequestsCompleted() { if (responses.length === tasks.length + tasksList.length) { showResultDialog(responses); } } tasks.forEach((task) => { GM_xmlhttpRequest({ method: "POST", url: task.url, headers: task.headers, onload: function (response) { try { const responseJson = JSON.parse(response.responseText); responses.push(responseJson.message); console.log(responseJson.message); } catch (error) { responses.push(`解析响应出错: ${error.message}`); console.error("解析响应出错:", error); } checkAllRequestsCompleted(); }, onerror: function (error) { console.error("请求失败:", error); responses.push(`请求失败:${error.status}`); checkAllRequestsCompleted(); }, }); }); console.log("零碎任务"); tasksList.forEach((taskId) => { const url = "https://hub-api.agnthub.ai/api/tasks/start/" + taskId; const headers = { Accept: "application/json, text/plain, */*", "Accept-Encoding": "gzip, deflate, br, zstd", "Accept-Language": "zh-CN,zh;q=0.9", "Content-Length": "0", Cookie: currentCookie, Origin: "https://quests.agnthub.ai", Priority: "u=1, i", Referer: "https://quests.agnthub.ai/", "Sec-CH-UA": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', "Sec-CH-UA-Mobile": "?0", "Sec-CH-UA-Platform": '"Windows"', "Sec-Fetch-Dest": "empty", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Site": "same-site", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36", }; function retryRequest(retryCount) { if (retryCount > 3) { responses.push(`请求 ${url} 失败,达到最大重试次数`); checkAllRequestsCompleted(); return; } GM_xmlhttpRequest({ method: "POST", url: url, headers: headers, onload: function (response) { try { if (response.status === 201) { const responseJson = JSON.parse(response.responseText); responses.push(responseJson.description); console.log(responseJson.description); } else { const responseJson = JSON.parse(response.responseText); console.log(`请求失败: ${responseJson.message}`); responses.push(`请求失败,状态码:${response.status}`); retryRequest(retryCount + 1); } } catch (error) { responses.push(`解析响应出错: ${error.message}`); console.error("解析响应出错:", error); retryRequest(retryCount + 1); } checkAllRequestsCompleted(); }, onerror: function (error) { console.error("请求失败:", error); responses.push(`出现错误:${error.status},重试...`); retryRequest(retryCount + 1); }, }); } retryRequest(1); }); }); function showResultDialog(responses) { const dialog = document.createElement("div"); dialog.style.position = "fixed"; dialog.style.top = "50%"; dialog.style.left = "50%"; dialog.style.transform = "translate(-50%, -50%)"; dialog.style.padding = "20px"; dialog.style.backgroundColor = "#f9f9f9"; dialog.style.border = "1px solid #ddd"; dialog.style.borderRadius = "10px"; dialog.style.boxShadow = "0 4px 10px rgba(0, 0, 0, 0.1)"; dialog.style.zIndex = "10001"; dialog.style.width = "800px"; dialog.style.textAlign = "center"; dialog.style.maxHeight = "80vh"; dialog.style.overflowY = "auto"; const title = document.createElement("h3"); title.textContent = "操作完成"; title.style.color = "#333"; title.style.marginBottom = "10px"; dialog.appendChild(title); const resultText = document.createElement("pre"); resultText.textContent = responses.join("\n\n"); resultText.style.whiteSpace = "pre-wrap"; resultText.style.overflowX = "auto"; resultText.style.maxHeight = "300px"; resultText.style.marginBottom = "15px"; resultText.style.padding = "10px"; resultText.style.border = "1px solid #eee"; resultText.style.borderRadius = "5px"; resultText.style.backgroundColor = "#fff"; resultText.style.width = "100%"; dialog.appendChild(resultText); const buttonContainer = document.createElement("div"); buttonContainer.style.display = "flex"; buttonContainer.style.justifyContent = "center"; buttonContainer.style.gap = "10px"; buttonContainer.style.marginTop = "15px"; dialog.appendChild(buttonContainer); const refreshButton = document.createElement("button"); refreshButton.textContent = "刷新"; refreshButton.style.padding = "8px 16px"; refreshButton.style.backgroundColor = "#007bff"; refreshButton.style.color = "#fff"; refreshButton.style.border = "none"; refreshButton.style.borderRadius = "5px"; refreshButton.style.cursor = "pointer"; refreshButton.addEventListener("click", function () { location.reload(); }); buttonContainer.appendChild(refreshButton); const cancelButton = document.createElement("button"); cancelButton.textContent = "取消"; cancelButton.style.padding = "8px 16px"; cancelButton.style.backgroundColor = "#ccc"; cancelButton.style.color = "#333"; cancelButton.style.border = "none"; cancelButton.style.borderRadius = "5px"; cancelButton.style.cursor = "pointer"; cancelButton.addEventListener("click", function () { dialog.remove(); }); buttonContainer.appendChild(cancelButton); document.body.appendChild(dialog); } document.body.appendChild(executeButton); })();