您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Free UNIQ??? ADBLOCK????
当前为
// ==UserScript== // @name BetterLZT // @namespace hasanbet // @version Beta-v2 // @description Free UNIQ??? ADBLOCK???? // @author https://zelenka.guru/openresty (openresty) // @match https://zelenka.guru/* // @grant GM_xmlhttpRequest // @grant GM.setValue // @grant GM.getValue // @grant unsafeWindow // @connect lzt.hasanbek.ru // @run-at document-body // @license MIT // ==/UserScript== const version = "2.0", server = "http://lzt.hasanbek.ru:8880"; let usercss, adblock, banner, bannertxt, nickname, userid, cache, avablock; (async function() { usercss = await GM.getValue("usercss") ? GM.getValue("usercss") : 'null'; banner = await GM.getValue("banner") ? GM.getValue("banner") : 'null'; bannertxt = await GM.getValue("bannertxt") ? GM.getValue("bannertxt") : 'null'; adblock = await GM.getValue("adblock") ? GM.getValue("adblock") : 'null'; avablock = await GM.getValue("avablock") ? GM.getValue("avablock") : 'null'; cache = await GM.getValue("cache") ? GM.getValue("cache") : 'null'; window.addEventListener("DOMContentLoaded",(event) => { renderFunctions(); userid = document.querySelector("input[name=_xfToken").value.split(",")[0]; nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); }) cacheSync(); usernames(); setInterval(async () => { adBlockDaemon(); }, 0); setInterval(usernames, 500); checkupdate(); })(); 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() { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); localcss = document.getElementsByClassName("UsernameCss")[0].value; banner = document.getElementsByClassName("BannerCss")[0].value; bannertxt = document.querySelector("input[name='banner_text']").value; css = encodeURIComponent(localcss.replace(/\n/g, "").replace(/; +/g, ";")); banner = encodeURIComponent(banner.replace(/\n/g, "").replace(/; +/g, ";")); bannertxt = encodeURIComponent(bannertxt.replace(/\n/g, "").replace(/; +/g, ";")); request(`${server}/v1/new?user=${nickname}&css=${css}&banner=${banner}&bannertxt=${bannertxt}`).catch(e => { XenForo.alert("Ошибка синхронизации с сервером, попробуйте еще раз", 1, 10000) }); setcss(localcss); XenForo.alert("Успех", 1, 10000) } function uniqApply() { } function writeCss(css) { GM.setValue("usercss", css) usercss = css; } async function usernames() { let usernames = document.querySelectorAll(".username span:not(.custom)"); await parseUsernames(Array.from(usernames)); } async function parseUsernames(usernames) { try { for(let e of usernames) parseUsername(e); } catch {} } async function checkupdate() { let response = await request(`${server}/v1/support?ver=${version}`).catch(err => {}); if (response == 'no') { return XenForo.alert("Доступна новая версия BetterLZT!\nПерейдите в настройки.", 1, 30000); } if (response == 'dis') { return XenForo.alert("Расширение BetterLZT нуждается в обновлении.\nБез него многие функции могут перестать работать.\nПерейдите в настройки", 1, 10000); } } async function cacheSync() { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); let response = await request(`${server}/v2/sync?user=${nickname}`).catch(err => {}); if (response != cache) { cache = response; await GM.setValue('cache', response) console.log('OK') } } async function parseUsername(e) { let data = await JSON.parse(await cache); try { if (!data.users[e.innerHTML]) { e.classList.add("custom"); return; } data = data.users[e.innerHTML]; if (data && !e.classList.contains("custom") ) { e.style = data.css; e.classList.add("custom"); switch (data.status) { case "js": e.innerHTML += ` <i class="fab fa-js-square"></i>` break; case "server": e.innerHTML += ` <i class="fa fa-hdd"></i>` break; case "beta": e.innerHTML += ` <i class="fa fa-heartbeat"></i>` break; default: e.innerHTML += ` <i class="fa fa-stars"></i>` break; } } if (document.querySelector(".avatarScaler") && data.banner && !document.querySelector(".customBanner") && document.querySelectorAll("h1.username")[0].innerHTML.includes(e.innerHTML)) { let banner = document.createElement('em'); banner.classList.add("userBanner"); banner.classList.add("customBanner"); banner.classList.add("wrapped"); banner.style = data.banner; banner.innerHTML = `<span class="before"></span><strong>${data.bannertxt}</strong><span class="after"></span>`; document.querySelector(".avatarScaler").append(banner); } } catch {} } function setAdblock(e) { GM.setValue("adblock", e) adblock = e; XenForo.alert('AdBlock настроен', 1, 10000) } function setAvablock(e) { GM.setValue("avablock", e) avablock = e; } function writeBanner(css) { GM.setValue("banner", css) banner = css; } function writeCss(css) { GM.setValue("bannertxt", css) bannertxt = css; } function renderFunctions() { unsafeWindow.nickname = nickname; unsafeWindow.usercss = usercss; unsafeWindow.server = server; unsafeWindow.cache = cache; unsafeWindow.adblock = adblock; unsafeWindow.avablock = avablock; unsafeWindow.setcss = css => writeCss(css); unsafeWindow.setbanner = css => writeBanner(css); unsafeWindow.setbannertxt = css => WriteBannertxt(css); unsafeWindow.setAdblock = e => setAdblock(e); unsafeWindow.setAvablock = e => setAvablock(e); unsafeWindow.request = request; let torender = [uniqApply, uniqSave, getUID, usernames, parseUsername, parseUsernames, cacheSync, blockNotice]; 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() { adblock = await adblock; avablock = await avablock; // 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") && adblock == 'on') { 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) && adblock == 'on') { 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 blockNotice() { return XenForo.alert('Первый режим - скрывает все, что есть в базе и НЕ скрывает аватарки при обнаружении рекламы, вне базы\nВторой режим - скрывает все, что есть в базе и СКРЫВАЕТ аватарки при обнаружении рекламы вне базы','Режимы AdBlock'); } 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") { if (document.querySelector("[name=banner_text]").value == "Lolzteam") document.querySelector("[name=banner_text]").value = "BetterLZT"; let adduniq = document.createElement("div"); adduniq.style = "margin-bottom: 25px"; adduniq.innerHTML = ` <div class="menu"> <div class="menu-header"> <h1 class="menu-header-title">Настройки BetterLZT</h1> <br> <h2 class="menu-header-title">AdBlock <a onclick="blockNotice();">(?)</a></h2> <div class="theme-switcher"> <input type="radio" id="dark-theme" name="themes" ${adblock == 'on' && avablock == 'off' ? 'checked' : ''}/> <label for="dark-theme" onclick="setAdblock('on'); setAvablock('off');"> <span> <ion-icon name="moon"></ion-icon> Режим 1 </span> </label> <input type="radio" id="dark-theme" name="themes" ${adblock == 'on' && avablock == 'on' ? 'checked' : ''}/> <label for="dark-theme" onclick="setAdblock('on'); setAvablock('on');"> <span> <ion-icon name="moon"></ion-icon> Режим 2 </span> </label> <input type="radio" id="black-theme" name="themes" ${adblock == 'off' ? 'checked' : ''}/> <label for="black-theme" onclick="setAdblock('off');"> <span> <ion-icon name="contrast"></ion-icon> Выкл </span> </label> <span class="slider"></span> </div> </div> <div class="menu-body"> <a onclick="uniqSave();">Применить уник</a> <a href="https://greasyfork.org/ru/scripts/470626-betterlzt">Обновления</a> </div> </div><style> :root { --c-text-primary: #edeeef; --c-text-secondary: #d4d7e1; --c-border-primary: #323232; --c-bg-body: #000; --c-bg-primary: #1b1d23; --c-bg-secondary: #000001; --c-bg-button: #343844; } .menu { width: 90%; max-width: 320px; background-color: var(--c-bg-primary); transition: background-color .30s ease; border-radius: 15px; } /* header */ .menu-header { padding: 1rem; } .menu-heaser-title { font-size: 1.2rem; color: var(--c-text-secondary); font-weight: 700; } /* theme switcher */ .theme-switcher input { display: none; } .theme-switcher { position: relative; background-color: var(--c-bg-secondary); border-radius: 10px; display: flex; padding: 0 3px; } .theme-switcher label { position: relative; z-index: 2; width: calc(100% / 3); color: var(--c-text-secondary); } .theme-switcher label span { padding: 8px 0; display: flex; justify-content: center; font-weight: 600; opacity: 0.8; } .theme-switcher label span:hover { opacity: 1; cursor: pointer; } .theme-switcher .slider { position: absolute; z-index: 1; width: calc((100% - 6px) / 3); top: 3px; transform: translatex(-110%); bottom: 3px; border-radius: 8px; transition: .30s ease, transform 0.25s ease-out; background-color: var(--c-bg-button); } .theme-switcher input:nth-of-type(1):checked ~ .slider { transform: translateX(0); } .theme-switcher input:nth-of-type(2):checked ~ .slider { transform: translateX(100%); } .theme-switcher input:nth-of-type(3):checked ~ .slider { transform: translateX(200%); } /* Menu body */ .menu-body { padding: 1rem; border-top: 1px solid var(--c-border-primary); transition: border-color .30s ease; } .menu-body a { text-decoration: none; color: inherit; display: flex; padding: 0.6rem 0.5rem; border-radius: 4px; font-weight: 500; transition: .30s ease; } .menu-body a:hover { background-color: var(--c-bg-secondary); } ion-icon { margin-right: 5px; font-size: 20px; margin-top: 2px; }</style> ` document.getElementsByClassName("ToggleTriggerAnchor")[0].prepend(adduniq); } }