/* ----- Zapraszam na tag #wykopx ----- TEN SKRYPT SŁUŻY DO WYCZYSZCZENIA LISTY OBSERWOWANYCH DYSKUSJI Jeśli nie wiesz jak z niego skorzystać, przeczytaj instrukcję poniżej. UWAGA! TEN SKRYPT NIE JEST SKRYPTEM DO ViolentMonkey/TamperMonkey KOD TEGO SKRYPTU NALEŻY WKLEIĆ GO DO KONSOLI [CTRL + SHIFT + C] INSTRUKCJA: 1. wejdź na dowolną stronę wykop.pl 2. otwórz konsolę skrótem [CTRL + SHIFT + C] lub klawiszem [F12] 3. wpisz w konsoli `allow-pasting` (razem z cudzysłowami ` `) i wciśnij [ENTER] 4. wklej CAŁY poniższy kod i wciśnij [ENTER] 5. Na górnej belce Wykopu pojawi się nowy przycisk, który po kliknięciu: - sprawdzi ile dyskusji obserwujesz - w kilku krokach pozwoli ci wybrać czy chcesz usunąć obserwowane wpisy/znaleziska/komentarze - zdecydujesz czy chcesz również usuwać dyskusje, które dodałeś do Ulubionych (jeśli chcesz, aby niektóre obserwowane dyskusje nie były usunięte - dodaj je wcześniej do ulubionych) - w ostatnim kroku masz możliwość rezygnacji - nic nie zostanie wtedy usunięte - w trakcie usuwania pasek postępu pokazywany jest w adresie URL na przykład: https://wykop.pl/tag/wykopx/#--usunięto: 178/180 (99%) Lista dyskusji, które obserwujesz znajduje się tutaj: https://wykop.pl/obserwowane/dyskusje Wersja zminimalizowana tego skryptu gotowa do wklejenia= w konsoli: https://raw.githubusercontent.com/wykopx/WykopX/refs/heads/main/Wykop%20XS%20-%20skrypty%20do%20konsoli/wykop_xs_czyszczenie_listy_obserwowanych_dyskusji.min.js Pełna wersja tego skryptu tutaj: https://github.com/wykopx/WykopX/blob/main/Wykop%20XS%20-%20skrypty%20do%20konsoli/wykop_xs_czyszczenie_listy_obserwowanych_dyskusji.js Chcesz wesprzeć projekt Wykop X? Postaw kawę: @contributionURL https://buycoffee.to/wykopx @author Wykop X @License No License @version 1.0.2 ----- Zapraszam na tag #wykopx ----- */ let observedLinks = 0, observedLinksFavourited = 0, observedEntries = 0, observedEntriesFavourited = 0, observedLinkComments = 0, observedLinkCommentsFavourited = 0, deleteEntries = !0, deleteLinks = !0, deleteLinkComments = !0, dontDeleteFavourites = !0, totalToDelete = 0; async function fetchObservedDiscussionData() { const e = localStorage.getItem("token"); if (!e) return new Map; const o = new Map; async function n(n = "") { const t = "https://wykop.pl/api/v3/observed/discussions" + (n ? `?page=${n}` : ""), s = await fetch(t, { headers: { Authorization: `Bearer ${e}` } }); if (!s.ok) return null; const i = await s.json(); return i.data.forEach((e => { o.set(e.object.id, e), "entry" == e.object.resource ? (observedEntries++, e.object.favourite && observedEntriesFavourited++) : "link" == e.object.resource ? (observedLinks++, e.object.favourite && observedLinksFavourited++) : "link_comment" == e.object.resource && (observedLinkComments++, e.object.favourite && observedLinkCommentsFavourited++) })), i.pagination.next } let t = await n(); for (let e = 0; t; e++)t = await n(t), await delay(100); return o } function delay(e) { return new Promise((o => setTimeout(o, e))) } async function deleteSelectedFromMap(e) { const o = localStorage.getItem("token"); if (!o) return; const n = new URL(window.location.href); n.pathname = "/tag/wykopx", window.history.pushState({}, "", n); let t = 0; for (const [n, s] of e) { let e = ""; if ("entry" == s.object.resource && deleteEntries ? e = `https://wykop.pl/api/v3/entries/${s.object.id}/observed-discussions` : "link" == s.object.resource && deleteLinks ? e = `https://wykop.pl/api/v3/links/${s.object.id}/observed-discussions` : "link_comment" == s.object.resource && deleteLinkComments && (e = `https://wykop.pl/api/v3/links/${s.object.parent.id}/comments/${s.object.id}/observed-discussions`), s.object.favourite && dontDeleteFavourites && (e = ""), "" !== e) { t++; await fetch(e, { method: "DELETE", headers: { Authorization: `Bearer ${o}` } }); await delay(170) } 0; const n = `--usunieto:${t}/${totalToDelete}_(${Math.ceil(100 * t / totalToDelete)}%)`; window.location.hash = n } } async function wykopx() { observedLinks = 0, observedLinksFavourited = 0, observedEntries = 0, observedEntriesFavourited = 0, observedLinkComments = 0, observedLinkCommentsFavourited = 0, deleteEntries = !1, deleteLinks = !1, deleteLinkComments = !1, dontDeleteFavourites = !0, totalToDelete = 0; let e = 0, o = 7; alert(`KROK ${++e}/7\nWykop X przeanalizuje teraz obserwowane przez Ciebie dyskusje \n\n> Kliknij [OK] i poczekaj kilka sekund.\n\nSpokojnie, jeszcze nie usuwamy obserwowanych dyskusji.\nPrzejdziemy do tego w następnych krokach.`), fetchObservedDiscussionData().then((n => { if (0 === n.size) o = 1, alert(`KROK ${++e}/${o}\n\nWykop X przeanalizował Twoje obserwowane:\n- Nie obserwujesz żadnych dyskusji`); else { 0 == observedEntries && o--, 0 == observedLinks && o--, 0 == observedLinkComments && o--, alert(`KROK ${++e}/${o}\n- Obserwujesz łącznie: (${n.size}) dyskusji\n- Limit obserwowanych dyskusji na wykopie wynosi (1000)\n\nObserwujesz:\n- (${observedEntries}) wpisów na mikroblogu w tym (${observedEntriesFavourited}) wpisów ⭐ Ulubionych\n- (${observedLinks}) znalezisk w tym (${observedLinksFavourited}) znalezisk ⭐ Ulubionych\n- (${observedLinkComments}) komentarzy w znaleziskach w tym (${observedLinkCommentsFavourited}) komentarzy ⭐ Ulubionych\n\n> Kliknij [OK] aby kontynuować`), dontDeleteFavourites = confirm(`KROK ${++e}/${o}\nMożesz teraz wybrać czy chcesz, POMINĄĆ usuwanie dyskusji, które masz oznaczone jako "⭐ Ulubione"\n\n> [OK] jeśli chcesz, żeby 🌟 Ulubione dyskusje NIE ZOSTAŁY USUNIĘTE\n\n> [Anuluj] jeśli CHCESZ USUNĄĆ również 🌟 Ulubione dyskusje`); let t = dontDeleteFavourites ? observedEntries - observedEntriesFavourited : observedEntries, s = dontDeleteFavourites ? observedLinks - observedLinksFavourited : observedLinks, i = dontDeleteFavourites ? observedLinkComments - observedLinkCommentsFavourited : observedLinkComments; t > 0 && (deleteEntries = confirm(`KROK ${++e}/${o}\nCzy chcesz usunąć (${t}) obserwowanych WPISÓW NA MIKROBLOGU?\n\n> [OK] jeśli chcesz, żeby WPISY zostały usunięte z obserwowanych\n\n> [Anuluj] jeśli nie chcesz usuwać obserwowanych WPISÓW`)), s > 0 && (deleteLinks = confirm(`KROK ${++e}/${o}\nCzy chcesz usunąć (${s}) obserwowanych ZNALEZISK?\n\n> [OK] jeśli chcesz, żeby ZNALEZISKA zostały usunięte z obserwowanych\n\n> [Anuluj] jeśli nie chcesz usuwać obserwowanych ZNALEZISK`)), i > 0 && (deleteLinkComments = confirm(`KROK ${++e}/${o}\nCzy chcesz usunąć (${i}) obserwowanych KOMENTARZY W ZNALEZISKACH?\n\n> [OK] jeśli chcesz, żeby KOMENTARZE W ZNALEZISKACH zostały usunięte z obserwowanych\n\n> [Anuluj] jeśli nie chcesz usuwać obserwowanych KOMENTARZY W ZNALEZISKACH`)), deleteEntries || (t = 0), deleteLinks || (s = 0), deleteLinkComments || (i = 0), totalToDelete = t + s + i; let r = `⚠ KROK ${++e}/${o} - USUWANIE ⚠ \nPo kliknięciu w [OK] ROZPOCZNIE SIĘ USUWANIE!\n\nWykop X usunie:`; if (t > 0 && (r += `\n- (${t}) obserwowanych wpisów ${dontDeleteFavourites ? "(bez ulubionych)" : "w tym także ulubione"}`), s > 0 && (r += `\n- (${s}) obserwowanych znalezisk ${dontDeleteFavourites ? "(bez ulubionych)" : "w tym także ulubione"}`), i > 0 && (r += `\n- (${i}) obserwowanych komentarzy w znaleziskach ${dontDeleteFavourites ? "(bez ulubionych)" : "w tym także ulubione"}`), r += `\n\nŁącznie usuniemy (${totalToDelete}) z (${n.size}) obserwowanych dyskusji.\n\n> [OK] aby USUNĄĆ (${totalToDelete}) obserwowanych dyskusji\n> [Anuluj] aby PRZERWAĆ proces usuwania.\n`, totalToDelete > 0) confirm(r) && deleteSelectedFromMap(n).then((() => { alert("Wszystkie wybrane dyskusje zostały usunięte."), window.location.hash = `(づ•﹏•)づ__usunięto_${totalToDelete}_z_${n.size}_obserwowanych_dyskusji` })); else { const e = new URL(window.location.href); e.pathname = "/tag/wykopx", window.history.pushState({}, "", e), window.location.hash = "(づ•﹏•)づ", confirm("⚠ KROK 21/37 ⚠\n\n\nNie to nie ( ͡° ͜ʖ ͡°)") } } })) } console.clear(); const button = document.createElement("button"); button.setAttribute("style", "position: fixed; top: 5px; left: 50%; z-index: 999; display: flex; color: rgb(255 255 255 / 0.6); border: 1px solid rgb(0 0 0 / 0.3); background-color: rgb(0 0 0 / 0.2); padding: 10px;"), button.textContent = "Usuń obserwowane dyskusje", document.body.insertBefore(button, document.body.firstChild), button.addEventListener("click", (async () => { await wykopx() })); /* Upewnij się, że zaznaczasz i kopiujesz cały kod skryptu */