TG WebA User Blocker

Block user in Telegram group

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name         TG WebA User Blocker
// @namespace    https://github.com/scientificworld
// @version      2024-07-29
// @description  Block user in Telegram group
// @author       scientificworld
// @license      Unlicense
// @match        https://web.telegram.org/a/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=telegram.org
// @require      https://cdn.jsdelivr.net/gh/CoeJoder/waitForKeyElements.js@a03933c5e42343b434c7800eb2777575342d8287/waitForKeyElements.js
// @require      https://update.greasyfork.org/scripts/455875/1123973/AkiLib.js
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// ==/UserScript==

let blocked = aki.createNormalMenu("Blocked user IDs (comma-delimited)");

waitForKeyElements("#MiddleColumn", () => {
    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            if (mutation.addedNodes) {
                mutation.addedNodes.forEach(node => {
                    // if (["Message", "MessageList"].some(c => node.classList.contains(c)))
                    if (node.classList) {
                        let elements;
                        if (node.classList.contains("Message")) {
                            elements = [node];
                        } else if (node.classList.contains("MessageList")) {
                            if (node.classList.contains("no-avatars")) {
                                return;
                            }
                            elements = node.querySelectorAll(".Message");
                        }
                        if (elements) {
                            elements.forEach(element => {
                                if (!element.classList.contains("own")) {
                                    let peerId, sibling = element;
                                    while (!peerId && sibling) {
                                        try {
                                            peerId = sibling.querySelector(".Avatar.size-small").dataset.peerId;
                                        } catch (error) {
                                            sibling = sibling.nextElementSibling;
                                        }
                                    }
                                    if (aki.getMenuValue(blocked).split(",").includes(peerId)) {
                                        element.style.display = "none";
                                    }
                                    element.dataset.peerId = peerId;
                                    // console.log(element);
                                }
                            });
                        }
                    }
                });
            }
        });
    });
    observer.observe(document.querySelector("#MiddleColumn"), { subtree: true, childList: true });
});