您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
REALY block users on Stips!
// ==UserScript== // @name Stips user blocker. // @namespace http://stips.co.il // @version 0.1 // @description REALY block users on Stips! // @author Avishai // @match https://stips.co.il/* // @icon https://www.google.com/s2/favicons?sz=64&domain=co.il // @grant none // @license GNU AGPLv3 // ==/UserScript== (async function() { 'use strict'; script() //https://stackoverflow.com/questions/5525071/how-to-wait-until-an-element-exists async function waitForElement(selector, timeout = null, location = document.body) { return new Promise((resolve) => { let element = document.querySelector(selector); if (element) { return resolve(element); } const observer = new MutationObserver(async () => { let element = document.querySelector(selector); if (element) { observer.disconnect() resolve(element); } else { if (timeout) { async function timeOver() { return new Promise((resolve) => { setTimeout(() => { observer.disconnect(); resolve(false); }, timeout); }); } resolve(await timeOver()); } } }); observer.observe(location, { childList: true, subtree: true, }); }); } var currentPath = window.location.pathname; setInterval(script, 50); async function script() { if(window.location.pathname !== currentPath) { currentPath = window.location.pathname; if(window.location.pathname.includes("ask")) { await waitForElement("#elastic-layer-content > div.single-layer.layer-0.ng-star-inserted.visible > app-dynamic-component > app-item-screen > div > div > div.item-screen-content-below-card > div.item-list.ng-star-inserted > app-item-list > app-item:nth-child(3)") console.log("FOUND!!!") const answers = document.querySelectorAll("app-item") const list = getList() if(!list.length) return answers.forEach(ans => { list.forEach(id => { if(ans.querySelector("a")?.href.includes(id)){ ans.remove() return } }) }) } else if(window.location.pathname.includes("profile")) { const myId = window.localStorage.getItem("ng2-webstorage|userservice.appuser_a_token").split(".")[0].split("\"")[1] || "" const id = window.location.pathname.split("/profile/")[1] const list = getList() if(myId != id) { let username = document.querySelector("app-user-profile").querySelector(".nickname") if(!username){ await waitForElement("app-user-profile .nickname") } username = document.querySelector("app-user-profile").querySelector(".nickname") const button = document.createElement("button") const list = getList() if(list.includes(id)){ button.innerText = "unblock" button.addEventListener("click", () => removeUserFromList(id)) } else { button.innerText = "block" button.addEventListener("click", () => addUserToList(id)) } username.appendChild(button) } await waitForElement("div .list-single-item") const thanksWallMessages = document.querySelectorAll("div .list-single-item") thanksWallMessages.forEach(msg => { list.forEach(id => { if(msg.querySelector("a")?.href.includes(id)){ msg.remove() return } }) }) } } } function getList() { const storage = window.localStorage.getItem("blockedUsers") let list = JSON.parse(storage || '[]') if(!Array.isArray(list)){ list = [] } return list } function addUserToList(id) { const list = getList() if(!list.includes(id)){ list.push(id) } window.localStorage.setItem("blockedUsers", JSON.stringify(list)) window.location.reload() } function removeUserFromList(id) { let list = getList() if(list.includes(id)){ list = list.filter(ids => ids != id) } window.localStorage.setItem("blockedUsers", JSON.stringify(list)) window.location.reload() } })();