您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Filter comments from specific users on Polymarket. Store the block list in storage.
// ==UserScript== // @name Polymarket Blocker // @namespace http://tampermonkey.net/ // @version 0.5 // @description Filter comments from specific users on Polymarket. Store the block list in storage. // @author You // @match https://polymarket.com/* // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; // Get the block list from localStorage or initialize it const blockListKey = 'polymarketBlockList'; let blockList = JSON.parse(localStorage.getItem(blockListKey)) || []; // Save the updated block list to localStorage function saveBlockList() { localStorage.setItem(blockListKey, JSON.stringify(blockList)); } // Add "Block" buttons to top-level comments only function addBlockButtons() { // Select only top-level comment containers with a profile link const topLevelComments = document.querySelectorAll('.c-dhzjXW.c-dhzjXW-igqgJBL-css'); // Main containers for comments topLevelComments.forEach(comment => { const profileLink = comment.querySelector('a[href^="/profile"]'); // First profile link in the comment //const isReply = comment.closest('[class*="Reply"]'); // Check if it's a reply // Skip if: // 1. No profile link is found. // 2. Comment is a reply (not a top-level comment). // 3. Block button already exists. if (!profileLink || comment.querySelector('.block-user-button')) return; const profileHref = profileLink.getAttribute('href'); // Create the "Block" button const blockButton = document.createElement('button'); blockButton.textContent = '🚫'; blockButton.className = 'block-user-button'; blockButton.style.marginLeft = '10px'; blockButton.style.backgroundColor = '#112233'; blockButton.style.color = '#ffffff'; blockButton.style.border = 'none'; blockButton.style.cursor = 'pointer'; blockButton.style.padding = '5px 10px'; blockButton.style.borderRadius = '5px'; // Block button click event blockButton.addEventListener('click', () => { if (!blockList.includes(profileHref)) { blockList.push(profileHref); saveBlockList(); alert(`${profileHref} has been blocked.`); filterComments(); // Apply filter immediately } }); // Append the button next to the user's name or profile link profileLink.parentElement.appendChild(blockButton); }); } // Filter comments based on the block list function filterComments() { const allComments = document.querySelectorAll('.c-dhzjXW.c-dhzjXW-icSayFg-css'); // All possible comment containers allComments.forEach(comment => { const profileLink = comment.querySelector('a[href^="/profile"]'); if (profileLink && blockList.includes(profileLink.getAttribute('href'))) { comment.style.display = 'none'; // Hide the entire comment } }); } // Observe for dynamic content function observePage() { const observer = new MutationObserver(() => { addBlockButtons(); filterComments(); }); observer.observe(document.body, { childList: true, subtree: true }); } // Initial run addBlockButtons(); filterComments(); observePage(); })();