您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Displays revive requests inside Torn
当前为
// ==UserScript== // @name Revive Notifications // @namespace http://tampermonkey.net/ // @version 3.0 // @description Displays revive requests inside Torn // @match https://www.torn.com/* // @connect api.no1irishstig.co.uk // @run-at document-end // ==/UserScript== "use strict"; console.log("Revive Notifications script loaded"); (function() { fetchRevives(); setInterval(fetchRevives, 5000); // 5 seconds interval document.addEventListener("visibilitychange", () => { console.log("Visibility changed, fetching revives..."); fetchRevives(); }); function fetchRevives() { console.log("Fetching revives..."); const apiKey = localStorage.getItem("api_key"); if (!apiKey) { console.log("No API key found"); promptForApiKey(); displayMessage("Please provide an API key to link - click the \"Setup API Key\" button."); return; } function promptForApiKey() { const apiKey = prompt("Please enter your API key:"); if (apiKey) { localStorage.setItem("api_key", apiKey); fetchRevives(); } else { displayMessage("Please provide an API key to link - refresh the page to try again."); } } const requestOptions = { method: "GET", headers: { "Content-Type": "application/json", }, }; const url = `https://api.no1irishstig.co.uk/fetch?key=${apiKey}&vendor=The%20Wolverines%20Script%201.0&source=Script&type=revive`; fetch(url, requestOptions) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => handleApiResponse({ status: 200, responseText: JSON.stringify(data) })) .catch(error => { console.error("Fetch error:", error); displayMessage(`Fetch error: ${error.message}`); }); } function handleApiResponse(response) { console.log("Handling API response", response); if (response.status && response.status !== 200) { displayMessage(`Error: ${response.status}`); return; } const data = JSON.parse(response.responseText); console.log("API data received", data); const randoms = []; const contracts = []; data.forEach(item => { if (item.contract) { contracts.push(item); } else { randoms.push(item); } }); displayRevives("revives-randoms", randoms, "Revive Requests", "rev-blue"); displayRevives("revives-contracts", contracts, "Contract Requests", "rev-red"); } function displayRevives(elementId, revives, title, colorClass) { console.log(`Displaying revives in ${elementId}`, revives); const container = ensureContainer(elementId, title, colorClass); if (!container) return; let html = ""; if (revives.length === 0) { container.innerHTML = "None"; } else { revives.forEach(user => { html += ` <a href="https://www.torn.com/profiles.php?XID=${user.id}"> ${user.name} [${user.id}] </a> | `; }); container.innerHTML = html.slice(0, -2); // Remove the last ' | ' } } function displayMessage(message) { console.log("Displaying message:", message); const contractsContainer = ensureContainer("revives-contracts", "Contract Requests", "rev-red"); const randomsContainer = ensureContainer("revives-randoms", "Revive Requests", "rev-blue"); if (contractsContainer) contractsContainer.innerHTML = message; if (randomsContainer) randomsContainer.innerHTML = message; } function ensureContainer(id, title, colorClass) { let container = document.getElementById(id); if (!container) { const div = document.createElement("div"); div.className = `info-msg-cont ${colorClass} border-round m-top10`; div.innerHTML = ` <div class="info-msg border-round"> <div class="delimiter"> <div class="msg right-round" tabindex="0" style="width: unset;"> ${title}: <span id="${id}">Loading</span> </div> </div> </div> `; const targetElement = document.querySelector(".content-wrapper.spring[role='main']"); if (targetElement) { targetElement.insertAdjacentElement('afterbegin', div); container = document.getElementById(id); } } return container; } // Add custom styles for colors const style = document.createElement("style"); style.innerHTML = ` .rev-blue, .rev-red { background: linear-gradient(to bottom, #1d9da8 0%, #1da89a 100%) !important; margin: 10px 0; padding: 1px; } .rev-red { background: linear-gradient(to bottom, #a81d34 0%, #821729 100%) !important; } .info-msg-cont { width: calc(100% - 40px); margin-left: 20px; margin-right: 20px; } `; document.head.appendChild(style); })();