Supprime totalement les sujets des pseudo blacklistés depuis la blacklist JVC.
当前为
// ==UserScript==
// @name Full_Black_List
// @namespace Full_Black_List
// @version 0.9.5
// @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/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 = '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 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
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
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() {
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 BLACK LIST
if (window.location.href.indexOf('jeuxvideo.com/sso/blacklist.php') > -1) {
'use strict';
// 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.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;
const response = await fetch('https://www.jeuxvideo.com/forums/0-51-0-1-0-1-0-0.htm');
const htmlfofo = await response.text();
const parser = new DOMParser();
const doc = parser.parseFromString(htmlfofo, 'text/html');
const ajaxHashpref = doc.querySelector('#ajax_hash_preference_user');
console.log(ajaxHashpref.value)
let reader = new FileReader();
reader.onload = async e => {
// Lecture et parsing du fichier JSON
let blacklist = JSON.parse(e.target.result);
// Créer un tableau de promesses pour chaque ajout pseudo blacklist
let fetchPromises = blacklist.map(idAlias => {
let url = `https://www.jeuxvideo.com/forums/ajax_forum_blacklist.php?id_alias_msg=${idAlias}&action=add&ajax_hash=${ajaxHashpref.value}`;
return fetch(url)
});
// Attendre que toutes les requêtes fetch soient terminées
let results = await Promise.all(fetchPromises);
window.location.reload();
};
reader.readAsText(file);
}
// Ajouter les boutons Export et Import
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
// Création du bouton d'export
let exportBtn = document.createElement('button');
exportBtn.textContent = 'Exporter en JSON';
exportBtn.className = 'simpleButton';
exportBtn.addEventListener('click', exportBlacklist);
// Création du bouton d'import
let importBtn = document.createElement('button');
importBtn.textContent = 'Importer en JSON';
importBtn.className = 'simpleButton';
importBtn.addEventListener('click', function() {
let input = document.createElement('input');
input.type = 'file';
input.accept = '.json';
input.addEventListener('change', importBlacklist);
input.click();
});
// Ajouter les boutons au container
container.appendChild(document.createTextNode('\u00A0\u00A0\u00A0'));
container.appendChild(importBtn);
container.appendChild(document.createTextNode('\u00A0\u00A0')); // Espace entre les boutons
container.appendChild(exportBtn);
}