Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Here are some terms to mute on Twitter to clean your timeline up a bit.
Mute these words in your settings here: https://twitter.com/settings/muted_keywords
ActivityTweet
generic_activity_highlights
generic_activity_momentsbreaking
RankedOrganicTweet
suggest_activity
suggest_activity_feed
suggest_activity_highlights
suggest_activity_tweet
suggest_grouped_tweet_hashtag
suggest_pyle_tweet
suggest_ranked_organic_tweet
suggest_ranked_timeline_tweet
suggest_recap
suggest_recycled_tweet
suggest_recycled_tweet_inline
suggest_sc_tweet
suggest_timeline_tweet
suggest_who_to_follow
suggestactivitytweet
suggestpyletweet
suggestrecycledtweet_inline
@ReneFennet
Copy link

ReneFennet commented Sep 11, 2022

Works like a charme:

Question. I still get "Related Tweets" at the end of a thread, if any. How do I silence those?

@bmorphism
Copy link

Perhaps it is time to add 🧵 - these threads are out of control!

@heavyoak
Copy link

Id like to know what some of these do before I copy paste them

@tobystic
Copy link

Perhaps it is time to add 🧵 - these threads are out of control!

it's so sad, but you don't want to throw the baby out with the bathwater. There's a good thread for every 10 trash threads

@siukalov
Copy link

Here is a minor update to this https://gist.github.com/IanColdwater/88b3341a7c4c0cf71c73ac56f9bd36ec?permalink_comment_id=3969640#gistcomment-3969640 solution. It adds a check for an already muted word

location.assign("https://twitter.com/settings/muted_keywords");
// wait...

// https://github.com/facebook/react/issues/10135#issuecomment-401496776
function setNativeValue(element, value) {
  const valueSetter = Object.getOwnPropertyDescriptor(element, "value").set;
  const prototypeValueSetter = Object.getOwnPropertyDescriptor(
    Object.getPrototypeOf(element),
    "value"
  ).set;

  if (valueSetter && valueSetter !== prototypeValueSetter) {
    prototypeValueSetter.call(element, value);
  } else {
    valueSetter.call(element, value);
  }
}

function delay(f = 1) {
  return new Promise((res) => setTimeout(res, f * 1000));
}

`ActivityTweet
generic_activity_highlights
generic_activity_momentsbreaking
RankedOrganicTweet
suggest_activity
suggest_activity_feed
suggest_activity_highlights
suggest_activity_tweet
suggest_grouped_tweet_hashtag
suggest_pyle_tweet
suggest_ranked_organic_tweet
suggest_ranked_timeline_tweet
suggest_recap
suggest_recycled_tweet
suggest_recycled_tweet_inline
suggest_sc_tweet
suggest_timeline_tweet
suggest_who_to_follow
suggestactivitytweet
suggestpyletweet
suggestrecycledtweet_inline`
  .split(/\W+/)
  .reduce(async function go(prev, keyword) {
    await prev;

    document.querySelector('[aria-label="Add muted word or phrase"]').click();
    await delay();

    const el = document.querySelector("input[name=keyword]");
    setNativeValue(el, keyword);
    el.dispatchEvent(new Event("input", { bubbles: true }));
    await delay();

    const saveButton = document
    .evaluate(
      '//*[contains(text(), "Save")]/ancestor::*[@role = "button"]',
      document,
      null,
      XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
      null
    )

    saveButton.snapshotItem(0).click()
    await delay()

    // If the word has already been muted, click the back button
    if (document.querySelector('[aria-live="assertive"]')) {
      document.querySelector('[aria-label="Back"]').click();
    }

    return delay();
  }, Promise.resolve());

@BedroQuendo
Copy link

BedroQuendo commented Feb 17, 2023

Here is a minor update to this https://gist.github.com/IanColdwater/88b3341a7c4c0cf71c73ac56f9bd36ec?permalink_comment_id=3969640#gistcomment-3969640 solution. It adds a check for an already muted word

location.assign("https://twitter.com/settings/muted_keywords");
// wait...

// https://github.com/facebook/react/issues/10135#issuecomment-401496776
function setNativeValue(element, value) {
  const valueSetter = Object.getOwnPropertyDescriptor(element, "value").set;
  const prototypeValueSetter = Object.getOwnPropertyDescriptor(
    Object.getPrototypeOf(element),
    "value"
  ).set;

  if (valueSetter && valueSetter !== prototypeValueSetter) {
    prototypeValueSetter.call(element, value);
  } else {
    valueSetter.call(element, value);
  }
}

function delay(f = 1) {
  return new Promise((res) => setTimeout(res, f * 1000));
}

`ActivityTweet
generic_activity_highlights
generic_activity_momentsbreaking
RankedOrganicTweet
suggest_activity
suggest_activity_feed
suggest_activity_highlights
suggest_activity_tweet
suggest_grouped_tweet_hashtag
suggest_pyle_tweet
suggest_ranked_organic_tweet
suggest_ranked_timeline_tweet
suggest_recap
suggest_recycled_tweet
suggest_recycled_tweet_inline
suggest_sc_tweet
suggest_timeline_tweet
suggest_who_to_follow
suggestactivitytweet
suggestpyletweet
suggestrecycledtweet_inline`
  .split(/\W+/)
  .reduce(async function go(prev, keyword) {
    await prev;

    document.querySelector('[aria-label="Add muted word or phrase"]').click();
    await delay();

    const el = document.querySelector("input[name=keyword]");
    setNativeValue(el, keyword);
    el.dispatchEvent(new Event("input", { bubbles: true }));
    await delay();

    const saveButton = document
    .evaluate(
      '//*[contains(text(), "Save")]/ancestor::*[@role = "button"]',
      document,
      null,
      XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
      null
    )

    saveButton.snapshotItem(0).click()
    await delay()

    // If the word has already been muted, click the back button
    if (document.querySelector('[aria-live="assertive"]')) {
      document.querySelector('[aria-label="Back"]').click();
    }

    return delay();
  }, Promise.resolve());

How tf you apply those, i'm no git or web console expert :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment