🏠 Home 

pixiv blacklist

hide unwant artist in search

// ==UserScript==
// @name         pixiv blacklist
// @version      0.03
// @description  hide unwant artist in search
// @author       x94fujo6
// @match        https://www.pixiv.net/*
// @grant        GM_getValue
// @grant        GM_setValue
// @namespace https://greasyfork.org/users/110545
// ==/UserScript==
/* jshint esversion: 9 */
(async function () {
let current = window.location.href,
retry_count = 0,
delay = 1000;
console.log("script start");
window.onload = setTimeout(checkUrl, delay);
setInterval(() => {
let url = window.location.href;
if (url != current) {
console.log(`re-run script @${url}`);
window.onload = setTimeout(checkUrl, delay);
current = url;
}
}, 1000);
function checkUrl() {
let url = window.location.href;
if (url.includes("/tags/")) main("tag");
if (url.includes("/users/")) main("user");
}
async function main(mode = "") {
let
g = {
key: {
blacklist: "blacklist",
},
default: {
blacklist: [],
},
get(key) {
this.is_key(key);
return GM_getValue(key, this.default[key]);
},
set(key, value) {
this.is_key(key);
return GM_setValue(key, value);
},
is_key(key) {
if (!this.default[key]) throw Error("unknown key");
},
},
checkBlacklist = (ele) => {
let user_id = ele.querySelector("a[href*='/users/']");
if (user_id) {
user_id = Number(user_id.href.match(/users\/(\d+)/)[1]);
} else {
return false;
}
if (blacklist.has(user_id)) {
let nodes = [...ele.childNodes[0].childNodes];
nodes.pop();
nodes.forEach(node => {
node.style.opacity = 0;
node.style.pointerEvents = "none";
});
return true;
}
return false;
},
r###lt = false,
blacklist = new Set(g.get(g.key.blacklist));
console.log("script main");
r###lt = document.querySelectorAll(".juyBTC");
console.log("r###lt", r###lt);
if (mode == "user") {
console.log("user");
let b = null,
ids = {
remove: "_blacklist_remove",
add: "_blacklist_add",
},
add = document.getElementById(ids.add),
remove = document.getElementById(ids.remove);
if (add) {
add.remove();
add = null;
}
if (remove) {
remove.remove();
remove = null;
}
b = document.querySelector("button[data-gtm-user-id]");
if (b) {
let user_id = Number(b.getAttribute("data-gtm-user-id"));
if (blacklist.has(user_id)) {
remove = b.cloneNode();
remove.id = ids.remove;
remove.textContent = "blacklist--";
remove.type = "button";
remove.style = `
color: white;
background-color: limegreen;
`;
remove.onclick = () => {
blacklist.delete(user_id);
g.set(g.key.blacklist, [...blacklist]);
console.log(`user[${user_id}] is remove from blacklist`, [...blacklist]);
document.location.reload();
};
b.insertAdjacentElement("afterend", remove);
} else {
add = b.cloneNode();
add.id = ids.add;
add.textContent = "blacklist++";
add.type = "button";
add.style = `
color: white;
background-color: black;
`;
add.onclick = () => {
blacklist.add(user_id);
g.set(g.key.blacklist, [...blacklist]);
console.log(`user[${user_id}] is add to blacklist`, [...blacklist]);
document.location.reload();
};
b.insertAdjacentElement("afterend", add);
}
b.addEventListener("click", () => {
window.location.reload();
});
} else {
console.log("user button not found");
return false;
}
console.log("script end [user]");
return true;
}
if (mode == "tag") {
let count = 0;
console.log("search");
r###lt.forEach(r => {
let all = r.querySelectorAll("li");
all.forEach(ele => {
if (checkBlacklist(ele)) count++;
});
});
console.log(`script hide ${count} artworks`);
console.log("script end [search]");
if (count == 0) {
console.log(`count = 0, retry(${retry_count})`);
if (retry_count < 3) {
retry_count++;
setTimeout(() => {
main("tag");
}, delay);
} else {
retry_count = 0;
console.log(`end retry`);
}
}
return count;
}
console.log("script end");
return false;
}
})();