Telegram Ad Filter

Collapses messages that contain words from the ad-word list

目前為 2019-04-02 提交的版本,檢視 最新版本

// ==UserScript==
// @name        Telegram Ad Filter
// @version     0.2.3
// @description Collapses messages that contain words from the ad-word list
// @license     MIT
// @author      VChet
// @namespace   Telegram-Ad-Filter
// @include     https://web.telegram.org/*
// @grant       GM_addStyle
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_registerMenuCommand
// ==/UserScript==
"use strict";

const defaultList = [
  "#взаимопиар",
  "#партнерский",
  "#постпроплачен",
  "#реклама",
  "#рекламныйпост",
  "#текстприслан",
];

let messages;
let messagesLength;
let adWords = GM_getValue("ad-words", defaultList);
let delay = GM_getValue("update-interval", 3000);

const applyStyles = messages => {
  // console.log({ adWords });
  messages.forEach(message => {
    message = message.querySelector(".im_message_body");
    if (!message) return;
    if (message.innerText && adWords.some(v => message.innerText.toLowerCase().indexOf(v.toLowerCase()) >= 0)) {
      message.classList.add("advertisementMessage");
      const fwdMessage = message.querySelector(".im_message_fwd_from");
      if (fwdMessage) fwdMessage.style.display = "none";
      message.onclick = () => {
        message.classList.toggle("advertisementMessage");
        if (fwdMessage) fwdMessage.style.display = fwdMessage.style.display === "none" ? "block" : "none";
      };
    } else {
      message.classList.remove("advertisementMessage");
      message.onclick = null;
    }
  });
};

let eventTimeout;
const eventThrottler = delay => {
  if (!eventTimeout) {
    eventTimeout = setTimeout(() => {
      eventTimeout = null;
      messages = document.querySelectorAll(".im_history_message_wrap");
      if (messages.length === messagesLength || messages.length === 0) return;
      messagesLength = messages.length;
      // console.log({ messagesLength });
      applyStyles(messages);
    }, delay);
  }
};

GM_addStyle(`
  .advertisementMessage {
    max-height: 40px;
  }
  .advertisementMessage > div:before {
    color: dodgerblue;
    font-weight: bold;
    text-decoration: underline dotted;
    content: "Advertisement";
  }
`);

GM_registerMenuCommand("Filter list", () => {
  const wordList = GM_getValue("ad-words", adWords);
  let val = prompt("Enter words to filter, separated by comma:", wordList);
  if (val !== null && typeof val === "string") {
    // Convert string to array, remove empty entries, trim values
    val = val.split(",").filter(v => v).map(v => v.trim());
    adWords = val;
    GM_setValue("ad-words", val);
    messages = document.querySelectorAll(".im_history_message_wrap");
    applyStyles(messages);
  }
});

GM_registerMenuCommand("Update interval", () => {
  const updateInteval = GM_getValue("update-interval", delay);
  const val = prompt("Enter message scanning frequency (in ms):", updateInteval);
  if (val !== null && typeof val === "string") {
    delay = val;
    GM_setValue("update-interval", val);
  }
});

// Run the script when an API message is received, throttled with delay
window.addEventListener("message", () => eventThrottler(delay), false);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址