Pazar, Aralık 22, 2024

R10.net Engellediğiniz Üyelerin Konuları Nasıl Gizlenir?

Dikenli tel çitli yeşil manzara.

Zamanında bir arkadaşın geliştirmiş olduğu bir betikti, geliştirmeyi yapan arkadaşı forumdan banladılar ancak yazdığı güzel javascript kodu elimde olması sebepli paylaşma gereği duydum. Hiç bir değişiklik yapmadan aynen bırakıyorum. R10 biliyorsunuz ki ticaretin ve paylaşımın döndüğü bir forum sitesi ancak dolandırıcılar, troller ve her konuya saçma sapan şeyler yazanların sayısıda çok. Bu betik ile engellediğiniz kişilerin konularını ve mesajlarını görmeyeceksiniz.

  • Tarayıcınıza önce Tampermonkey Eklentisini dahil edin.
  • Ardından gerekli olan r10net.js dosyasını linkten indirin veya aşağıdan kopyalayın.
  • Tampermonkey içerisine UserScript’i Yükleyin. Ardından https://www.r10.net/profil/engellemeler/ adresini ziyaret ederek, betiğe user bilgilerinin aktarılmasını sağlayın ve sayfadan çıkın.
  • Artık R10.net sitesine girdiğinizde betik çalışmaya başlayacak.
// ==UserScript==
// @name         R10.Net Yasaklı Listesi
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  R10 Yasaklı üyeleri gizlemek için bir kodtur.
// @author       Hero
// @match        https://www.r10.net/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=r10.net
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Fonksiyon: Cookie oluşturma
    function createCookie(name, value, days) {
        var expires = "";
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
            expires = "; expires=" + date.toUTCString();
        }
        document.cookie = name + "=" + value + expires + "; path=/";
    }

    // Fonksiyon: Cookie'dan veri okuma
    function getCookie(name) {
        const cookieValue = document.cookie
            .split('; ')
            .find(row => row.startsWith(name + '='))
            ?.split('=')[1];
        return cookieValue ? decodeURIComponent(cookieValue) : null;
    }

    // Sayfanın URL'sini kontrol ederek, kodun çalışacağı sayfayı belirleme
    if (window.location.href === "https://www.r10.net/profil/engellemeler/") {
        // Tüm checkbox'ların HTMLCollection'ını al
        var checkboxes = document.querySelectorAll("input[type='checkbox'][name^='listbits[ignore]']");

        // Boş bir dizi oluştur
        var checkedUsers = [];

        // Checkbox'ları dön ve seçili olanları diziye ekle
        checkboxes.forEach(function (checkbox) {
            if (checkbox.checked) {
                // `for` özelliğini kullanarak label'ın içeriğini al ve diziye ekle
                var label = document.querySelector("label[for='" + checkbox.id + "']");
                if (label) {
                    checkedUsers.push(label.textContent);
                }
            }
        });

        // Diziyi çerezlere kaydet
        createCookie("R10_YASAKLI_LIST", JSON.stringify(checkedUsers), 365);

        // Popup mesajı oluştur
        let popupContent = document.createElement('div');
        popupContent.id = 'popupMessage';
        popupContent.textContent = `Yasaklı üye listesi güncellendi. ${JSON.stringify(checkedUsers)}`;

        // Popup stilini belirle
        var style = document.createElement('style');
        style.textContent = `
            #popupMessage {
                position: fixed;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                background-color: #33e773;
                color: #00581e;
                min-width: 300px;
                font-weight: 600;
                font-size: 2rem;
                padding: 20px;
                box-shadow: 0 7px 19px rgb(0 0 0 / 29%);
                z-index: 9999;
                border-radius: 10px;
                letter-spacing: -1px;
            }
        `;
        document.head.appendChild(style);
        document.body.appendChild(popupContent);
    }

    // Elementi yavaşça silen fonksiyon
    function fadeOutAndRemove(element) {
        var opacity = 1;
        var fadeOutInterval = setInterval(function() {
            opacity -= 0.1; // Animasyon hızını kontrol etmek için decrement değerini ayarlayın

            if (opacity <= 0) {
                element.remove();
                clearInterval(fadeOutInterval);
            } else {
                element.style.opacity = opacity;
            }
        }, 10); // Daha yumuşak bir animasyon için interval süresini ayarlayın
    }

    // "alt" özniteliği "gusion" olan elementleri kaldıran fonksiyonu tanımlayın
    function removeElementsWithGusionAlt() {
        // R10_YASAKLI_LIST çerezi okuma
        const r10YasakliListCookie = getCookie('R10_YASAKLI_LIST');

        if (r10YasakliListCookie) {
            const R10_YASAKLI_LIST = JSON.parse(r10YasakliListCookie);

            // Verileri döngü ile işleme
            for (let i = 0; i < R10_YASAKLI_LIST.length; i++) {

                // Konular içindekini de sil.
                const threads = document.querySelectorAll('li.thread');
                threads.forEach((thread) => {
                    const usernameAnchor = thread.querySelector('.desktop a.usernames');
                    if (usernameAnchor && usernameAnchor.innerText.trim() === R10_YASAKLI_LIST[i]) {
                        thread.remove();
                    }
                });

                var elementsWithGusionAlt = document.querySelectorAll('img[alt="'+ R10_YASAKLI_LIST[i] +'"]');
                // Eğer elementlerden herhangi biri "thread" sınıfına sahip bir li'nin içinde ise onu kaldır
                elementsWithGusionAlt.forEach(function(element) {
                    var threadParent = element.closest('.thread');
                    if (threadParent) {
                        fadeOutAndRemove(threadParent);
                    }
                });
            }
        }
    }

    // Belirli bir süre sonra "alt" özniteliği "gusion" olan elementleri kaldır
    setTimeout(removeElementsWithGusionAlt, 400);

    // XMLHttpRequest özelliğini değiştirerek "ajax.php" içeren istekler yapıldığında da elementleri kaldır
    var originalOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function() {
        console.log(arguments[1]);
        if (arguments[1].includes("ajax.php")) {
            setTimeout(removeElementsWithGusionAlt, 400);
        }
        return originalOpen.apply(this, arguments);
    };
})();
JavaScript