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()
}
})();