您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button to request a revive from Midnight X
当前为
// ==UserScript== // @name Midnight X Revive Requests // @namespace http://tampermonkey.net/ // @version 1.2.001 // @description Adds a button to request a revive from Midnight X // @author Stig [2648238] // @match https://www.torn.com/* // @grant GM_addStyle // @grant GM.xmlHttpRequest // @grant GM_registerMenuCommand // @connect api.no1irishstig.co.uk // ==/UserScript== 'use strict'; const owner = "Midnight X"; const source = "Midnight X Script"; const buttonLabel = "NITE Revive Me"; const colour = "#61be3b"; const API_URL = 'https://api.no1irishstig.co.uk/request'; const ERRORS = { 401: `Request denied - Contact the ${owner} leadership.`, 429: `You have already submitted a request to be revived.`, 499: `Outdated Script - Please update.`, 500: `An unknown error has occurred - Please report this to ${owner} leadership.`, }; setInterval(checkButton, 500); GM_addStyle(` .revive-text { color: ${colour}; } .revive-icon { fill: ${colour} !important; } `); let btn; function getButton() { btn = document.createElement('a'); if (document.body.classList.contains('dark-mode')) { btn.classList.add('custom-dark-mode'); } btn.id = 'custom-btn'; btn.className = "custom-revive t-clear h c-pointer m-icon line-h24 right last" btn.innerHTML = ` <span class="icon-wrap svg-icon-wrap"> <span class="link-icon-svg"> ${icon} </span> </span> <span class="revive-text">${buttonLabel}</span> `; btn.href = '#custom-revive'; btn.addEventListener('click', submitRequest); btn.addEventListener("mouseenter", () => { document.getElementsByClassName("revive-text")[0].style.color = colour; document.getElementsByClassName("revive-icon")[0].setAttribute("style", `fill: ${colour} !important`); }); btn.addEventListener("mouseleave", () => { document.getElementsByClassName("revive-text")[0].style.color = null; document.getElementsByClassName("revive-icon")[0].removeAttribute("style"); }); return btn; } function checkButton() { if(inCloudflareChallenge()) return; const {hospital} = getSessionData(); const exists = document.getElementById('custom-btn'); if (!hospital) { if (btn) { btn.remove(); } return; } if (exists) { return; } const location = document.getElementById("top-page-links-list"); if (location != null) { const issues = document.getElementsByClassName("tt-revive"); if (issues.length !== 0) { issues[0].remove(); } location.children[location.children.length - 1].insertAdjacentElement('afterend', getButton()); } } function handleResponse(response) { if (response?.status && response.status !== 200) { console.log(response); alert(ERRORS[response.status] || ERRORS[500]); return; } let contract = false; try { contract = !!JSON.parse(response.responseText).contract; } catch (e) { } if (contract) { alert(`Contract request has been sent to ${owner}. Thank you!`) } else { alert(`Request has been sent to ${owner}. Please pay your reviver a Xanax or $1m. Thank you!`); } } function submitRequest(e) { e?.preventDefault(); const sessionData = getSessionData(); if (!sessionData.hospital) { alert('You are not in the hospital.'); return; } btn.setAttribute('disabled', true); btn.setAttribute('aria-pressed', true); GM.xmlHttpRequest({ method: 'POST', url: API_URL, headers: { 'Content-Type': 'application/json', }, data: JSON.stringify({ 'tornid': parseInt(sessionData.userID), 'username': '' + sessionData.userName, "vendor": `${source} ${GM_info.script.version}`, 'source': source, 'type': 'revive' }), onload: handleResponse, }); } function getSessionData() { const sidebar = Object.keys(sessionStorage).find((k) => /sidebarData\d+/.test(k)); const data = JSON.parse(sessionStorage.getItem(sidebar)); return { userID: data.user.userID, userName: data.user.name, hospital: data.statusIcons?.icons?.hospital, }; } function inCloudflareChallenge() { return document.getElementsByClassName('iAmUnderAttack').length; } GM_registerMenuCommand(`Request revive from ${owner}`, () => submitRequest()); const icon = ` <svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 20 20" id="svg3" > <path id="revive-icon" fill="none" class="revive-icon" d="M18.737,9.691h-5.462c-0.279,0-0.527,0.174-0.619,0.437l-1.444,4.104L8.984,3.195c-0.059-0.29-0.307-0.506-0.603-0.523C8.09,2.657,7.814,2.838,7.721,3.12L5.568,9.668H1.244c-0.36,0-0.655,0.291-0.655,0.655c0,0.36,0.294,0.655,0.655,0.655h4.8c0.281,0,0.532-0.182,0.621-0.45l1.526-4.645l2.207,10.938c0.059,0.289,0.304,0.502,0.595,0.524c0.016,0,0.031,0,0.046,0c0.276,0,0.524-0.174,0.619-0.437L13.738,11h4.999c0.363,0,0.655-0.294,0.655-0.655C19.392,9.982,19.1,9.691,18.737,9.691z"/> </svg>`;