Greasy Fork

来自缓存

Greasy Fork is available in English.

X Timeline Cleaner - Comprehensive

Hide tweets from users you don't follow, as well as reposts, replies, and threads on X.com

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         X Timeline Cleaner - Comprehensive
// @namespace    https://x.com/
// @version      3.0
// @description  Hide tweets from users you don't follow, as well as reposts, replies, and threads on X.com
// @match        https://twitter.com/*
// @match        https://x.com/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    function hideUnwantedTweets() {
        var tweets = document.querySelectorAll('article');

        tweets.forEach(tweet => {
            let hideTweet = false;

            // Check if the tweet is from someone you don't follow
            var followButton = tweet.querySelector('div[role="button"][data-testid$="-follow"]');
            if (followButton) {
                hideTweet = true;
            }

            // Check for reposts by looking for elements with data-testid="socialContext"
            var isRepost = tweet.querySelector('[data-testid="socialContext"]');
            if (isRepost) {
                hideTweet = true;
            }

            // Check for replies by looking for "Replying to" text or similar phrases
            var replyPhrases = ['Replying to', 'Respondiendo a', 'Répondre à', 'Antwort an', 'Rispondendo a', 'Responder a'];
            var isReply = replyPhrases.some(phrase => tweet.innerText.includes(phrase));
            if (isReply) {
                hideTweet = true;
            }

            // Check for threads by identifying the "Show this thread" link or similar phrases
            var threadPhrases = ['Show this thread', 'Mostrar este hilo', 'Afficher ce fil', 'Diesen Thread anzeigen', 'Mostra questo thread'];
            var isThread = threadPhrases.some(phrase => tweet.innerText.includes(phrase));
            if (isThread) {
                hideTweet = true;
            }

            // Check for promoted content
            var isPromoted = tweet.innerText.includes('Promoted');
            if (isPromoted) {
                hideTweet = true;
            }

            if (hideTweet) {
                tweet.style.display = 'none';
            }
        });
    }

    // Observe dynamic content loading
    const observer = new MutationObserver(() => {
        hideUnwantedTweets();
    });
    observer.observe(document.body, { childList: true, subtree: true });

    // Initial call
    hideUnwantedTweets();
})();