您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Supprime totalement les sujets des pseudo blacklistés depuis la blacklist JVC.
// ==UserScript== // @name Full_Black_List // @namespace Full_Black_List // @version 0.19.0 // @description Supprime totalement les sujets des pseudo blacklistés 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/forums/message* // @match *://www.jeuxvideo.com/messages-prives/message.php* // @match *://www.jeuxvideo.com/messages-prives/indesirables.php // @match *://www.jeuxvideo.com/sso/blacklist.php // @match *://www.jeuxvideo.com/login* // @icon https://images.emojiterra.com/microsoft/fluent-emoji/15.1/128px/1f6ab_color.png // @license MIT // @grant none // ==/UserScript== //___FETCH___SYNCH__BL___(FECTH)___ async function synchfetchpseudos() { let response = await fetch('/sso/blacklist.php'); let htmlText = await response.text(); let parser = new DOMParser(); let 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)); } //___Fetch_MP_LIST_______(FETCH)___ let idListF = []; let haListF = []; async function fetchOnce() { let response = await fetch('/messages-prives/indesirables.php'); let htmlfofo = await response.text(); let parser = new DOMParser(); let doc = parser.parseFromString(htmlfofo, 'text/html'); let listItems = doc.querySelectorAll('#blacklist i'); listItems.forEach(i => { let idAlias = i.getAttribute('data-id'); let hashtempo = i.getAttribute('data-hash'); idListF.push(idAlias); haListF.push(hashtempo); }); } //___Clean_MP_LIST_ONE__(FETCH)___ function deleteblacklistMP(cross) { let listItem = cross.closest('li'); // Trouver l'élément <li> parent let idAlias = listItem.getAttribute('data-id-alias'); // Récupérer l'id depuis le parent let index = idListF.indexOf(idAlias); // Trouver l'index de l'élément dans idListF if (index !== -1) { let hashtempo = haListF[index]; let url = `/messages-prives/message.php?del_blacklist=${idAlias}&h=${hashtempo}`; fetch(url); } } //___Clean_MP_LIST_ALL__(FETCH)___ async function removeFromBlacklistMP() { let fetchPromises = idListF.map((idAlias, index) => { let hashtempo = haListF[index]; // Récupérer le hash associé à l'index let url = `/messages-prives/message.php?del_blacklist=${idAlias}&h=${hashtempo}`; return fetch(url); // Effectuer la suppression }); await Promise.all(fetchPromises); } //_______PAGE_DE______CONNEXION___(Login)___ if (window.location.href.indexOf('jeuxvideo.com/login') > -1) { localStorage.removeItem('fullblacklistJVC'); } //______MASQUAGE_____BLOC____MESSAGE____FORUM__(Topic_1_42)____ if (window.location.href.indexOf('jeuxvideo.com/forums/1-') > -1 || window.location.href.indexOf('jeuxvideo.com/forums/42-') > -1 || window.location.href.indexOf('jeuxvideo.com/forums/message/') > -1) { //masquage_message let blacklistBlocks = document.querySelectorAll('.msg-pseudo-blacklist'); blacklistBlocks.forEach(block => { block.remove(); }); //ajout dun event au bouton blacklist let 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' } } //______BLACKLIST____LISTE_SUJETS___(Liste_Sujet)(Recherche)___ 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().then(() => location.reload()); } } // Fonction pour supprimer des éléments insensible à la casse function supprimerParListeDePseudos(pseudos) { let pseudosLower = pseudos.map(pseudo => pseudo.toLowerCase()); // liste tout les pseudo en miniusucle document.querySelectorAll('li').forEach(item => { let auteur = item.querySelector('.topic-author'); if (auteur && pseudosLower.includes(auteur.textContent.trim().toLowerCase())) { // Supprimer le sujet si ateur item.remove(); } }); } let pseudosBlacklist = getListeBlacklist(); supprimerParListeDePseudos(pseudosBlacklist); } //_______BOUTON_____BLACKLIST___LISTE_SUJET_(Liste_Sujet)_____ 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 = 'Actu BL'; span1.title = 'Actualiser la blacklist des Sujets'; span1.style.borderRadius = '6px'; span1.style.minWidth = '5rem'; //span1.style.textDecoration = 'underline'; span1.addEventListener('click', synchfetchpseudos); span1.addEventListener('click', function () { alert('Filtrage des topics actualisés avec la blacklist JVC ✅'); }); 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/Editer/Eporter la BlackList'; span2.style.borderRadius = '6px'; span2.style.minWidth = '4rem'; //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_MP__(Message_MP)____ if (window.location.href.indexOf('jeuxvideo.com/messages-prives/message.php') > -1) { //ajout dun event au bouton blacklist let blacklisterBtns = document.querySelectorAll('.picto-msg-tronche'); blacklisterBtns.forEach(function(btn) { btn.addEventListener('click', function() { let dataUrl = btn.getAttribute('data-url'); sessionStorage.setItem('fullblacklistJVCIDMP', dataUrl); sessionStorage.setItem('fullblacklistJVCAwait', 'true'); }); }); // Mise à jour de la Blacklist fofo du script apres actualisation let bljvcawait = sessionStorage.getItem('fullblacklistJVCAwait'); if (bljvcawait === 'true') { (async () => { // Fetch recuperer hash preference forum let response = await fetch('/forums/0-36-0-1-0-1-0-0.htm'); let htmlfofo = await response.text(); let parser = new DOMParser(); let doc = parser.parseFromString(htmlfofo, 'text/html'); let ajaxHashpref = doc.querySelector('#ajax_hash_preference_user'); // preference_user_hash => necassaire pour ajouter à la blacklist JVC let fullidmp = sessionStorage.getItem('fullblacklistJVCIDMP'); let match = fullidmp.match(/add_blacklist=(\d+)/); //id_pseudo let idAlias = match ? match[1] : null; let url = `/forums/ajax_forum_blacklist.php?id_alias_msg=${idAlias}&action=add&ajax_hash=${ajaxHashpref.value}`; let result = await fetch(url); await synchfetchpseudos(); sessionStorage.removeItem('fullblacklistJVCAwait'); // Supprime la clé 'fullblacklistJVCAwait' sessionStorage.removeItem('fullblacklistJVCIDMP'); // Supprime la clé let newUrl = location.href.replace(/&add_blacklist=[^&]+&h=[^&]+/, ""); if (newUrl !== location.href) location.replace(newUrl); })(); } //liste_local_storage_blacklist_les_MP_+_masquage function supprimerParListeDePseudos(pseudos) { let pseudosLower = pseudos.map(pseudo => pseudo.toLowerCase()); // Liste tous les pseudos en minuscules let blacklistBlocks = document.querySelectorAll('.bloc-message-forum'); let clicked; blacklistBlocks.forEach(block => { let auteur = block.querySelector('.bloc-pseudo-msg'); // Cibler l'élément avec le pseudo let boutonBlacklist = block.querySelector('.picto-msg-tronche'); if (auteur && pseudosLower.includes(auteur.textContent.trim().toLowerCase())) { boutonBlacklist.click(); // BL_MP } }); } //masquage_message_BL_CLASSIQUE let blacklistBlocks = document.querySelectorAll('.msg-pseudo-blacklist'); blacklistBlocks.forEach(block => { block.remove(); }); //recup_local_storage function getListeBlacklist() { let liste = localStorage.getItem('fullblacklistJVC'); if (liste) { return JSON.parse(liste); } else { synchfetchpseudos().then(() => location.reload()); } } let pseudosBlacklist = getListeBlacklist(); supprimerParListeDePseudos(pseudosBlacklist); } //________________Suuppression_combiné_BL___(Page_BlackList_MP)____ if (window.location.href.indexOf('jeuxvideo.com/messages-prives/indesirables.php') > -1) { document.querySelectorAll('.mp_delete_blacklist').forEach(function(button) { button.addEventListener('click', function() { let userId = this.getAttribute('data-id'); // Récupère l'ID depuis l'attribut data-id fetch(`/sso/ajax_delete_blacklist.php?id_alias_unblacklist=${userId}`) .then(() => { localStorage.removeItem('fullblacklistJVC'); //vide black list local storage }); }); }); } //________________MISE_A_JOUR_PAGE_BLACK_LISTE__(Page_BlackList_Forums)____ if (window.location.href.indexOf('jeuxvideo.com/sso/blacklist.php') > -1) { updatepseudos(); // Parcourt chaque élément et ajoute un gestionnaire d'événement let crosses = document.querySelectorAll('.icon-cross-entypo'); crosses.forEach(cross => { cross.addEventListener('click', async () => { updatepseudos(); // Mettre à jour les pseudos si nécessaire if (typeof hasFetched === 'undefined') { await fetchOnce(); // Fetch une seule fois idListF et haListF hasFetched = true; // Marquer que le fetch a été effectué } deleteblacklistMP(cross); // Interagir avec l'élément après avoir effectué la suppression }); }); function updatepseudos() { setTimeout(() => { let pseudos = document.querySelectorAll('#blacklist span'); let pseudoList = []; pseudos.forEach(span => { pseudoList.push(span.textContent.trim()); }); localStorage.setItem('fullblacklistJVC', JSON.stringify(pseudoList)); }, 1000); //delais pour capturer la page à jour } } //_______________EXPORT_PAGE__BLACKLIST___(Page_BlackList_Forums)____ if (window.location.href.indexOf('jeuxvideo.com/sso/blacklist.php') > -1) { 'use strict'; //fonction suppression totale black list async function deleteBlacklist() { strikeBtn.textContent = 'Loading...'; // Récupérer tous les éléments <li> dans #blacklist let listItems = document.querySelectorAll('#blacklist li'); let idList = []; listItems.forEach(li => { let idAlias = li.getAttribute('data-id-alias'); idList.push(idAlias); }); // Créer un tableau de promesses pour les requêtes Ajax let fetchPromises = idList.map(idAlias => { let url = `/sso/ajax_delete_blacklist.php?id_alias_unblacklist=${idAlias}`; return fetch(url); }); // Attendre que toutes les requêtes se terminent if (typeof hasFetched === 'undefined') { await fetchOnce(); // Fetch une seule fois idList et haListF hasFetched = true; // Marquer que le fetch a été effectué } await removeFromBlacklistMP(); let results = await Promise.all(fetchPromises); window.location.reload(); } // Fonction d'exportation de la Blacklist function exportBlacklist() { let listItems = document.querySelectorAll('#blacklist li'); let idList = []; listItems.forEach(li => { let idAlias = li.getAttribute('data-id-alias'); idList.push(idAlias); }); let jsonBlob = new Blob([JSON.stringify(idList, null, 2)], { type: 'application/json' }); //creation_lien_telechargement let link = document.createElement('a'); link.href = URL.createObjectURL(jsonBlob); link.download = 'Blacklist_JVC.json'; link.click(); } // Fonction d'importation de la Blacklist depuis un fichier JSON async function importBlacklist(event) { let file = event.target.files[0]; if (!file) return; // Fetch recuperer hash preference forum let response = await fetch('/forums/0-36-0-1-0-1-0-0.htm'); let htmlfofo = await response.text(); let parser = new DOMParser(); let doc = parser.parseFromString(htmlfofo, 'text/html'); let ajaxHashpref = doc.querySelector('#ajax_hash_preference_user'); // preference_user => necassaire pour ajouter à la blacklist JVC let reader = new FileReader(); reader.onload = async e => { try { importBtn.textContent = 'Load...'; // Lecture et parsing du fichier JSON let blacklist = JSON.parse(e.target.result); // Boucle ajax pour ajouter pseudo blacklist de la liste let fetchPromises = blacklist.map(idAlias => { let url = `/forums/ajax_forum_blacklist.php?id_alias_msg=${idAlias}&action=add&ajax_hash=${ajaxHashpref.value}`; return fetch(url); }); //attendre resultat pour refresh let results = await Promise.all(fetchPromises); window.location.reload(); } catch (error) { alert("Fichier JSON invalide"); window.location.reload(); } }; reader.readAsText(file); } // Creation Boutons Groupes let container = document.querySelector('.layout__row.layout__content.layout__row--gutter.mb-5'); if (!container) return; // Si le container n'existe pas, ne rien faire let ull1 = document.createElement('ul'); let ull2 = document.createElement('ul'); // Création du bouton d'export let exportBtn = document.createElement('button'); exportBtn.textContent = 'Exporter'; exportBtn.title = 'Exporter BlackList JVC en Fichier'; exportBtn.className = 'simpleButton'; exportBtn.style.borderRadius = '6px'; exportBtn.addEventListener('click', exportBlacklist); // Création du bouton d'import let importBtn = document.createElement('button'); importBtn.textContent = 'Importer'; importBtn.title = 'Importer BlackList depuis un Fichier'; importBtn.className = 'simpleButton'; importBtn.style.borderRadius = '6px'; importBtn.addEventListener('click', function() { let input = document.createElement('input'); input.type = 'file'; input.accept = '.json'; input.addEventListener('change', importBlacklist); input.click(); }); let strikeBtn = document.createElement('button'); strikeBtn.textContent = 'Vider BL Forum et MP'; strikeBtn.title = 'Vider toute la blacklist JVC + MP + Script'; strikeBtn.className = 'simpleButton'; strikeBtn.style.borderRadius = '6px'; strikeBtn.style.backgroundColor = 'red'; strikeBtn.addEventListener('click', () => window.confirm('⚠️ Supprimer toute la blacklist (JVC + MP + Script) ??⚠️') ? deleteBlacklist() : null); /* let linkBtn = document.createElement('button'); linkBtn.textContent = 'BL MP'; linkBtn.title = 'BlackList MP'; linkBtn.className = 'simpleButton'; linkBtn.style.borderRadius = '6px'; linkBtn.addEventListener('click', () => window.location.href = '/messages-prives/indesirables.php'); */ // Ajouter les boutons au container ull1.appendChild(importBtn); ull1.appendChild(document.createTextNode('\u00A0\u00A0')); ull1.appendChild(exportBtn); ull2.appendChild(strikeBtn); /* ull2.appendChild(document.createTextNode('\u00A0\u00A0')); ull2.appendChild(linkBtn); */ container.appendChild(ull1); container.appendChild(ull2); } /* MIT License Copyright (c) 2023 Atlantis (https://github.com/Lantea-Git) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */