Full_Black_List

Supprime totalement les sujets des pseudo blacklistés en synchronisant depuis la blacklist JVC.

当前为 2025-01-29 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Full_Black_List
// @namespace    Full_Black_List
// @version      0.6.5
// @description  Supprime totalement les sujets des pseudo blacklistés en synchronisant depuis la blacklist JVC.
// @author       Atlantis
// @match        *://www.jeuxvideo.com/recherche/forums/0-*
// @match        *://www.jeuxvideo.com/forums/0-*
// @match        *://www.jeuxvideo.com/forums/42-*
// @match        *://www.jeuxvideo.com/forums/1-*
// @match        *://www.jeuxvideo.com/sso/blacklist.php
// @match        *://www.jeuxvideo.com/login*
// @icon         https://images.emojiterra.com/google/noto-emoji/unicode-16.0/color/128px/274c.png
// @license      MIT
// @grant        none
// ==/UserScript==

// FETCH SYNCH BL
async function synchfetchpseudos() { 
    const response = await fetch('https://www.jeuxvideo.com/sso/blacklist.php');
    const htmlText = await response.text();

    const parser = new DOMParser();
    const doc = parser.parseFromString(htmlText, 'text/html');

    let pseudos = doc.querySelectorAll('#blacklist span');

    let pseudoList = [];
    pseudos.forEach(span => {
        pseudoList.push(span.textContent.trim());
    });

    localStorage.setItem('fullblacklistJVC', JSON.stringify(pseudoList));

}

//PAGE DE CONNEXION
if (window.location.href.indexOf('jeuxvideo.com/login') > -1) {
    localStorage.removeItem('fullblacklistJVC');
}

// BLACK LIST SUJETS
if (window.location.href.indexOf('jeuxvideo.com/forums/0-') > -1 || window.location.href.indexOf('jeuxvideo.com/recherche/forums/0-') > -1) {
    // Fonction pour récupérer la liste des pseudos blacklistés depuis JVC ou le local storage
    function getListeBlacklist() {
        let liste = localStorage.getItem('fullblacklistJVC');
        if (liste) {
            return JSON.parse(liste);
        } else {
            synchfetchpseudos(); // Fonction à exécuter si la liste est pseudo connecté
            setTimeout(() => {
                location.reload();
            }, 2000);
        }
    }

    // Fonction pour supprimer des éléments insensible à la casse
    function supprimerParListeDePseudos(pseudos) {
        const pseudosLower = pseudos.map(pseudo => pseudo.toLowerCase()); // liste tout les pseudo en miniusucle
        document.querySelectorAll('li').forEach(item => {
            const auteur = item.querySelector('.topic-author');
            if (auteur && pseudosLower.includes(auteur.textContent.trim().toLowerCase())) {
                // Supprimer le sujet si ateur
                item.remove();
            }
        });
    }



    const pseudosBlacklist = getListeBlacklist();

    // Exécuter la fonction après le chargement initial
    supprimerParListeDePseudos(pseudosBlacklist);
}

// BOUTON BLACK LISTE
if (window.location.href.indexOf('jeuxvideo.com/forums/0-') > -1) {

    var divContainer = document.createElement('div');
    divContainer.classList.add('custom-btn-container');
    
    // Créer les spans à l'intérieur de la div
    var span1 = document.createElement('span');
    //span1.classList.add('btn');
    span1.classList.add('btn', 'btn-actu-new-list-forum', 'btn-actualiser-forum', 'icon-refresh');
    span1.textContent = 'Synch BL';
    span1.title = 'Synchroniser avec Black List JVC';
    span1.style.borderRadius = '6px';
    //span1.style.textDecoration = 'underline';
    span1.addEventListener('click', synchfetchpseudos);
    span1.addEventListener('click', function () { alert('Black list Synchronisée manuellement'); });
    span1.addEventListener('click', function () { location.reload(); });
    
    // Vous pouvez ajouter d'autres spans si nécessaire
    var span2 = document.createElement('span');
    //span2.classList.add('btn');
    span2.classList.add('btn', 'btn-actu-new-list-forum', 'btn-actualiser-forum');
    span2.textContent = 'Voir BL';
    span2.title = 'Voir Black Liste JVC';
    span2.style.borderRadius = '6px';
    //span2.style.textDecoration = 'underline';
    span2.addEventListener('click', function() { window.open('/sso/blacklist.php', '_blank'); });
    
    // Ajouter les spans à la div
    divContainer.appendChild(span1);
    divContainer.appendChild(document.createTextNode('\u00A0\u00A0'));
    divContainer.appendChild(span2);
    
    // Trouver l'élément avec la classe 'bloc-pagi-default px-3 px-lg-0'
    var blocPagiDefault = document.querySelector('.bloc-pagi-default.px-3.px-lg-0');
    var pagiBeforeListTopic = document.querySelector('.pagi-before-list-topic');
    
    // Ajouter la div juste après cette div spécifique
    pagiBeforeListTopic.parentNode.insertBefore(divContainer, pagiBeforeListTopic.nextSibling);

}


// MASQUAGE BLOC MESSAGE
if (window.location.href.indexOf('jeuxvideo.com/forums/1-') > -1 || window.location.href.indexOf('jeuxvideo.com/forums/42-') > -1) {

    //masquage_message
    const blacklistBlocks = document.querySelectorAll('.msg-pseudo-blacklist');
    blacklistBlocks.forEach(block => {
        block.remove();
    });

    //ajout dun event au bouton blacklist
    const blacklisterBtns = document.querySelectorAll('.picto-msg-tronche');
    blacklisterBtns.forEach(function(btn) {
        btn.addEventListener('click', function() {
            sessionStorage.setItem('fullblacklistJVCAwait', 'true');
        });
    });

    // Mise à jour de la Blacklist du script apres actualisation 
    let bljvcawait = sessionStorage.getItem('fullblacklistJVCAwait');
    if (bljvcawait === 'true') {
        synchfetchpseudos(); // fullblacklistJVCAwait est 'true'
        sessionStorage.removeItem('fullblacklistJVCAwait'); // Supprime la clé 'fullblacklistJVCAwait'
    }

}

// MISE A JOUR PAGE BLACK LISTE
if (window.location.href.indexOf('jeuxvideo.com/sso/blacklist.php') > -1) {

    updatepseudos();

    // Parcourt chaque élément et ajoute un gestionnaire d'événement
    const crosses = document.querySelectorAll('.icon-cross-entypo');
    crosses.forEach(cross => {
        cross.addEventListener('click', updatepseudos);
    });

    function updatepseudos() {
        let pseudos = document.querySelectorAll('#blacklist span');
        
        let pseudoList = [];
        pseudos.forEach(span => {
            pseudoList.push(span.textContent.trim());
        });
        
        localStorage.setItem('fullblacklistJVC', JSON.stringify(pseudoList));
    }
}