BetterLZT

Free UNIQ???

目前為 2023-07-27 提交的版本,檢視 最新版本

// ==UserScript==
// @name         BetterLZT
// @namespace    hasanbet
// @version      1.0.0 beta
// @description  Free UNIQ???
// @author       https://zelenka.guru/openresty (openresty)
// @match        https://zelenka.guru/*
// @grant        GM_xmlhttpRequest
// @grant        GM.setValue
// @grant        GM.getValue
// @license MIT
// @grant        unsafeWindow
// @connect      lzt.hasanbek.ru
// @run-at       document-idle
// ==/UserScript==

const 
    nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(),
    version  = "1.0.0",
    userid   = document.querySelector("input[name=_xfToken").value.split(",")[0];
let usercss  = GM.getValue("usercss") ? GM.getValue("usercss") : 'null';
let adblock  = GM.getValue("adblock") ? GM.getValue("adblock") : 'null';
let avablock  = GM.getValue("avablock") ? GM.getValue("avablock") : 'null';

(function() {
    renderFunctions();
    setInterval(() => {
        adBlockDaemon();
        uniqApply();
    }, 0);
    usernames();
})();

function request(url) {
    return new Promise((resolve, reject) => GM_xmlhttpRequest({
        method: "GET",
        url: url,
        onload: response => resolve(response.responseText),
        onerror: error => resolve(error)
    }));
}

function getUID() {
    return document.querySelector("input[name=_xfToken").value.split(",")[0];
}

function uniqSave() {
    localcss = document.getElementsByClassName("UsernameCss")[0].value;
    css = encodeURIComponent(localcss.replace(/\n/g, "").replace(/; +/g, ";"));
    request(`http://lzt.hasanbek.ru:8880/new?user=${nickname}&css=${css}`).catch(e => {
        XenForo.alert("Ошибка синхронизации с сервером, попробуйте еще раз", 1, 10000)
    });
    setcss(localcss);
    XenForo.alert("Успех", 1, 10000)
}

function uniqApply() {
    if (usercss == 'null' || !usercss) return;
    let usernames = document.querySelectorAll(".username span:not(.custom):not(h3)");
    usernames.forEach(function (e){
        if (e.innerHTML != nickname) return;
        e.style = usercss;
    })
}

function writeCss(css) {
    GM.setValue("usercss", css)
    usercss = css;
}

async function usernames() {
    let usernames = document.querySelectorAll(".username span:not(.custom):not(h3)");
    await parseUsernames(Array.from(usernames));
}

async function parseUsernames(usernames) {
    try {
        for(let e of usernames) parseUsername(e);
    } catch {}
}

async function parseUsername(e) {
    let response = await request("http://lzt.hasanbek.ru:8880/?user=" + e.innerHTML).catch(err => {});
    if (response && !e.classList.contains("custom") ) {
        e.style = response;
        e.classList.add("custom");
        e.innerHTML += ` <i class="fa fa-stars"></i>`
    } 
}

function setAdblock(e) {
    GM.setValue("adblock", e)
    adblock = e;
}

function setAvablock(e) {
    GM.setValue("avablock", e)
    avablock = e;
}

function renderFunctions() {
    unsafeWindow.nickname = nickname;
    unsafeWindow.usercss = usercss;
    unsafeWindow.setcss = css => writeCss(css);
    unsafeWindow.setAdblock = e => setAdblock(e);
    unsafeWindow.setAvablock = e => setAvablock(e);
    unsafeWindow.request = request;
    let torender = [uniqApply, uniqSave, getUID, usernames, parseUsername, parseUsernames];
    let funcs = torender.map(e => e.toString());
    let script = document.createElement('script');
    script.appendChild(document.createTextNode(funcs.join("")));
    document.head.appendChild(script);
    renderSettings();
}

function isAd(e) {
    if (e.innerHTML.toLowerCase().includes("@verif_ads") || e.innerHTML.toLowerCase().includes("t.me") || e.innerHTML.toLowerCase().includes("zelenka.guru") || e.innerHTML.toLowerCase().includes("lolz.live") || e.innerHTML.toLowerCase().includes("threads") || e.innerHTML.toLowerCase().includes("member"))
    {
        return true;
    }
    return false;
}

async function adBlockDaemon() {
    // if (!window.location.pathname.includes('/threads/')) {return;}
    // проверка на главную, и наличие блока рекламы
    if (window.location.pathname == '/' && document.querySelector(".text_Ads") && adblock == 'on') { document.querySelector(".text_Ads").remove(); return;}
    let users = document.querySelectorAll("span.userStatus:not(.blocked)");

    // удаление рекламы в алертах
    if (document.querySelector('[data-author="Реклама"]') && adblock == 'on')
    {
        let ads = document.querySelectorAll('[data-author="Реклама"]');
        ads.forEach(function (e){
            e.remove();
        })
    }

    // Проверка статуса на юзер пейдже
    if (document.querySelector(".current_text:not(.blocked)") && adblock == 'on')
    {
        let e = document.querySelector(".current_text:not(.blocked)");
        let img = document.querySelector(".avatarScaler img");
        if (e.innerHTML.toLowerCase().includes("verifteam")) {
            e.classList.add("blocked");
            e.innerHTML = "Реклама скрыта";
            img.src = 'https://placehold.co/600x600?text=%D0%A0%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D0%B0%20%D1%81%D0%BA%D1%80%D1%8B%D1%82%D0%B0';
        }
        if (isAd(e)) {
            e.classList.add("blocked");
            e.innerHTML = "Реклама скрыта";
            if (avablock == 'on') img.src = 'https://placehold.co/600x600?text=%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE,%20%D1%80%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D0%B0';
        }
        
    }

    if (users.length < 1 && adblock != 'on') {return;}


    users.forEach(function (e) {
        // проверка на крышек
        if (e.innerHTML.toLowerCase().includes("verifteam"))
        {
            e.innerHTML = 'Реклама скрыта';
            e.classList.add("blocked");
            // такое говно в будущем стоит переписать =)
            $(e).parent().parent().parent().find(".img")[0].style.backgroundImage = `url('https://placehold.co/600x600?text=%D0%A0%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D0%B0%20%D1%81%D0%BA%D1%80%D1%8B%D1%82%D0%B0')`;
            return;
        }

        // проверка на ссылки
        if (isAd(e))
        {
            e.innerHTML = 'Реклама скрыта';
            e.classList.add("blocked");
            // такое говно в будущем стоит переписать =)
            if (avablock == 'on') $(e).parent().parent().parent().find(".img")[0].style.backgroundImage = `url('https://placehold.co/600x600?text=%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE,%20%D1%80%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D0%B0')`;
            return;
        }
        return;
    })
}

function renderSettings() {
    $('ul.secondaryContent li:nth-child(10)').after('<li><a href="account/uniq/test">Настройка BetterLZT</a></li>');
    if(window.location.pathname == "/account/uniq/test") {
        let adduniq = document.createElement("div");
        adduniq.style = "margin-bottom: 25px";
        adduniq.innerHTML = `
        <p style='font-size: 25px'>BetterLZT v.${version}</p>
        <p style='font-size: 17px'>Настройки уника</p>
        <button type="button" class="button bbCodeSpoilerButton" style="margin-bottom: 15px">
            <span class="SpoilerTitle">
                <span class="SpoilerTitle" onclick="uniqSave(); uniqApply();">Применить уник</span>
            </span>
        </button>
        <!--<button type="button" class="button bbCodeSpoilerButton" style="margin-bottom: 15px">
        <span class="SpoilerTitle">
            <span class="SpoilerTitle">Показать список групп</span>
        </span>
    </button>-->
    <p style='font-size: 17px'>Настройки AdBlock</p>
    <button type="button" class="button bbCodeSpoilerButton" style="margin-bottom: 15px" onclick="setAdblock('on'); XenForo.alert('AdBlock активирован', 1, 10000)">
    <span class="SpoilerTitle">
        <span class="SpoilerTitle" onclick="setAdblock('on'); XenForo.alert('AdBlock активирован', 1, 10000)">Вкл AdBlock</span>
    </span>
    </button>
    <button type="button" class="button bbCodeSpoilerButton" style="margin-bottom: 15px" onclick="setAdblock('off'); XenForo.alert('AdBlock деактивирован', 1, 10000)">
    <span class="SpoilerTitle">
        <span class="SpoilerTitle" onclick="setAdblock('off'); XenForo.alert('AdBlock деактивирован', 1, 10000)">Выкл AdBlock</span>
    </span>
    </button>
    <br>
    <i>Скрытие аватарки при обнаружении ссылок в статусе</i><br>
    <button type="button" class="button bbCodeSpoilerButton" style="margin-bottom: 15px" onclick="setAvablock('on'); XenForo.alert('Активировано', 1, 10000)">
    <span class="SpoilerTitle">
        <span class="SpoilerTitle" onclick="setAvablock('on'); XenForo.alert('Активировано', 1, 10000)">Вкл</span>
    </span>
    </button>
    <button type="button" class="button bbCodeSpoilerButton" style="margin-bottom: 15px" onclick="setAvablock('off'); XenForo.alert('Деактивировано', 1, 10000)">
    <span class="SpoilerTitle">
        <span class="SpoilerTitle" onclick="setAvablock('off'); XenForo.alert('Деактивировано', 1, 10000)">Выкл</span>
    </span>
    </button>
        `
        document.getElementsByClassName("ToggleTriggerAnchor")[0].prepend(adduniq);
    }
}