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": "{}", "headers": { "x-csrftoken": getCookie('scratchcsrftoken') } }); e = await e.text(); try { e = JSON.parse(e); } catch (err) { e = {}; } console.log(e); if (e.success) { gek++; } else { spamTimeout = 20; } } else { console.log("end"); } } await downloadUser(user); setInterval(function () { unfollowUser(user) }, 500)