63 lines
No EOL
1.9 KiB
JavaScript
63 lines
No EOL
1.9 KiB
JavaScript
let tree = [], the, user = '08draven', gek = 0, spamTimeout = 0;
|
|
|
|
function getCookie(name) {
|
|
const value = `; ${document.cookie}`;
|
|
const parts = value.split(`; ${name}=`);
|
|
if (parts.length === 2) return parts.pop().split(';').shift();
|
|
}
|
|
|
|
async function downloadUser(user) {
|
|
for (let i = 0; ; i++) {
|
|
let fetchReq = await fetch(`https://api.scratch.mit.edu/users/${user}/following/?limit=40&offset=${i * 40}`);
|
|
let fetchJson = await fetchReq.json();
|
|
if (fetchJson.length < 1) break;
|
|
tree = [...tree, ...fetchJson];
|
|
}
|
|
}
|
|
|
|
async function unfollowUser(user) {
|
|
if (spamTimeout > 0) {
|
|
spamTimeout--;
|
|
return;
|
|
}
|
|
if (the = tree[gek]) {
|
|
the = the.username;
|
|
e = await fetch(`https://scratch.mit.edu/site-api/users/followers/${the}/remove/?usernames=${user}`, {
|
|
"method": "PUT",
|
|
"body": "{}",
|
|
"credentials": "include",
|
|
"headers": {
|
|
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0",
|
|
"Accept": "application/json, text/javascript, */*; q=0.01",
|
|
"Accept-Language": "en-US,en;q=0.5",
|
|
"Content-Type": "application/json",
|
|
"x-csrftoken": getCookie('scratchcsrftoken'),
|
|
"X-Requested-With": "XMLHttpRequest",
|
|
"Sec-Fetch-Dest": "empty",
|
|
"Sec-Fetch-Mode": "cors",
|
|
"Sec-Fetch-Site": "same-origin",
|
|
"Priority": "u=0"
|
|
}
|
|
});
|
|
e = await e.text();
|
|
try {
|
|
e = JSON.parse(e);
|
|
} catch (err) {
|
|
e = {};
|
|
}
|
|
console.log(e);
|
|
if (e.success || e[0]) {
|
|
gek++;
|
|
} else {
|
|
spamTimeout = 20;
|
|
}
|
|
} else {
|
|
console.log("end");
|
|
}
|
|
}
|
|
|
|
await downloadUser(user);
|
|
|
|
setInterval(function () {
|
|
unfollowUser(user)
|
|
}, 500) |