// ==UserScript== // @name BetterLZT // @namespace hasanbet // @version v41 // @description Сделай свой жизнь на LolzTeam проще! // @author https://zelenka.guru/lays (openresty) // @match https://zelenka.guru/* // @match https://lzt.market/* // @grant GM_xmlhttpRequest // @grant GM.setValue // @grant GM.getValue // @grant unsafeWindow // @connect lzt.hasanbek.ru // @connect tv.hasanbet.site // @connect localhost // @run-at document-body // @license MIT // @downloadURL none // ==/UserScript== const version = "4.1", blzt_link_tos = "https://zelenka.guru/threads/5816508/", blzt_link_trust = "https://zelenka.guru/threads/5821466/", server = "http://lzt.hasanbek.ru:8880", adlist_w = ["zelenka.guru/threads/3649746", "http://proxysoxy.com", "zelenka.guru/threads/2770783", "https://t.me/talkthenews", "https://zelenka.guru/threads/5862277/", "zelenka.guru/threads/5802663/", "@UniServBot", "zelenka.guru/threads/5886612", "https://zelenka.guru/threads/5830418/", "zelenka.guru/angeldrainer/", "zelenka.guru/threads/5883557", "zelenka.guru/threads/5720998", "https://zelenka.guru/threads/5488501", "https://zelenka.guru/threads/4871985/", "zelenka.guru/threads/3649746", "zelenka.guru/threads/5402454", "zelenka.guru/threads/2630352", "https://t.me/poseidon_project", "https://zelenka.guru/threads/4826265/", "zelenka.guru/threads/4939541", "zelenka.guru/threads/4073607", "zelenka.guru/threads/5071761/", "https://zelenka.guru/threads/3695705/", "zelenka.guru/members/4177803", "@verif_ads", "verifteam", "SmmPanelUS.com", "lteboost.ru"], adlist_l = ["threads", "members", "lolz.live", "zelenka.guru", "t.me"], adlist_white = ["https://zelenka.guru/threads/5456926/", "zelenka.guru/threads/5545248/"]; let usercss, adblock, banner, bannertxt, nickname, userid, cache, adnicks, secure, hidelike, secretph, marketblock, theme, simps, avamarket, avablock, contestblock, uniqstatus, shortcut, reportbtns, hidegpt; (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'; secure = await GM.getValue("secure") ? GM.getValue("secure") : 'not'; hidelike = await GM.getValue("hidelike") ? GM.getValue("hidelike") : 'null'; marketblock = await GM.getValue("marketblock") ? GM.getValue("marketblock") : 'null'; secretph = await GM.getValue("secretph") ? GM.getValue("secretph") : 'not'; theme = await GM.getValue("theme") ? GM.getValue("theme") : 'null'; simps = await GM.getValue("simps") ? GM.getValue("simps") : 'null'; avamarket = await GM.getValue("avamarket") ? GM.getValue("avamarket") : 'null'; uniqstatus = await GM.getValue("uniqstatus") ? GM.getValue("uniqstatus") : 'null'; contestblock= await GM.getValue("contestblock") ? GM.getValue("contestblock") : 'null'; shortcut = await GM.getValue("shortcut") ? GM.getValue("shortcut") : 'null'; reportbtns = await GM.getValue("reportbtns") ? GM.getValue("reportbtns") : 'null'; hidegpt = await GM.getValue("hidegpt") ? GM.getValue("hidegpt") : 'null'; window.addEventListener("DOMContentLoaded",async (event) => { if (await GM.getValue("firstrun") != "ok") { XenForo.alert(`Благодарим за установку расширения!\nПеред началом использования прочтите соглашение: ${blzt_link_tos}`, "[BetterLZT] Добро пожаловать!"); await GM.setValue("firstrun", "ok"); } // if (await GM.getValue("firsttrust2") != "ok") { // XenForo.alert(`

Переработка алгоритма "Фактора Доверия".

Что это?

- Специальный алгоритм определяет уровень доверия к пользователю по шкале, от 0 до 100. Нормальное значение среднего пользователя = 35 и выше. Функция на стадии бета-тестирования, все предложения и недочеты просим присылать в тему указанную ниже

Переработка алгоритма

- Уровень доверия каждого пользователя, который имел средний рейтинг ≥ 5 был повышен. Однако, рейтинг некоторых пользователей остался неизменным, в таком случае можно обратиться к разработчику и уточнить, объективная ли это оценка, или же алогритм выставил неверную оценку.
Хотите сравнить рейтинг До и После? На страничке нашего расширение в 'GreasyFork' можно откатиться до предыдущей версии (v30), сверить новый и старый рейтинг, а затем установить вновь новую версию
Спасибо за запуск BetterLZT, именно Вы помогаете нам становиться нам лучше с каждым днем.

Подробнее в статье: ${blzt_link_trust}

`, "Фактор доверия 'BetterLZT'."); // await GM.setValue("firsttrust2", "ok") // } profileRender(); themeRender(); renderFunctions(); userid = document.querySelector("input[name=_xfToken").value.split(",")[0]; nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); cacheSync(); usernames(); marketRender(); threadRender(); }) setInterval(async () => { adBlockDaemon(); daemon(); }, 0); setInterval(usernames, 500); checkupdate(); })(); async function threadRender() { if (!window.location.pathname.includes('threads')) {return;} // Быстрый репорт, спасибо Jack'у const buttons = { "Флуд / Оффтоп / Спам / Бесполезная тема": { name: 'Флуд', }, "Создание темы не в соответствующем разделе": { name: 'Неверный раздел', }, "Неправильное оформление темы": { name: 'Неверное оформление', }, } const _xfToken = document.querySelector('input[name="_xfToken"]').value; async function postData(url = '', formData) { return await fetch(url, { method: 'POST', body: formData }); } function addButtonToPosts() { const blocks = document.querySelectorAll('#messageList > li'); for(let block of blocks) { if (block.querySelector(".custom-button")) { continue; } for(let key in buttons) { let name = buttons[key].name; let message = buttons[key].message; let span = document.createElement('span'); span.innerText = name; span.className = "custom-button"; span.setAttribute('style', 'font-weight: bold; padding: 3px 10px; background: #218e5d; border-radius: 50px; margin-right: 5px; cursor: pointer;') span.onclick = function() { if(!confirm('Вы действительно хотите отправить жалобу?')) return false; let formData = new FormData(); formData.append("message", key); formData.append("is_common_reason", 1); formData.append("_xfToken", _xfToken); formData.append("_xfNoRedirect", 1); formData.append("_xfToken", _xfToken); formData.append("redirect", window.location.href); postData('posts/' + block.id.split('-')[1] +'/report', formData); XenForo.alert('Жалоба отправлена', '', 5000); } if(block.querySelector('.publicControls')) block.querySelector('.publicControls').prepend(span); } } } if (await reportbtns == 'on') { addButtonToPosts(); const observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type === 'childList') { addButtonToPosts(); } }); }); observer.observe(document.getElementById('messageList'), { childList: true }); } if (await hidegpt == 'on') { let gpt_trash = document.querySelectorAll('[data-author=ChatGPT]'); gpt_trash.forEach(e => { e.remove(); }) } } async function shortcutCall() { document.querySelector(".fr-element.fr-view.fr-element-scroll-visible p").innerHTML += await shortcut; } async function daemon() { //шорткаты if (shortcut != 'null' && !document.querySelector("#lzt-better-shortcut") && window.location.pathname.includes("threads")) { let cutbtn = document.createElement("div") cutbtn.id = "lzt-better-shortcut"; cutbtn.classList.add("lzt-fe-se-extraButton") cutbtn.onclick = async function() { await shortcutCall(); }; cutbtn.title = "Быстрая вставка"; cutbtn.innerHTML = ``; document.querySelector(".lzt-fe-se-extraButtonsContainer.js-lzt-fe-extraButtons").append(cutbtn); } let nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); if (document.querySelector("input[name=secret_answer]:not(.completed)") && await secretph != 'null') { document.querySelector("input[name=secret_answer]:not(.completed)").value = await secretph; document.querySelector("input[name=secret_answer]:not(.completed)").classList.add("completed") } // Сканирование кнопок в треде if (document.location.pathname.includes('threads') && document.querySelector("blockquote")) { if (document.querySelector("blockquote").innerHTML.trim().includes("betterfast")) { let str = document.querySelector("blockquote").innerHTML.trim(); let arr = str.split('='); let value = arr[1].split(']')[0]; let fastinfo = await JSON.parse(await request(`${server}/v6/fast?id=${value}`)); let text = `

${fastinfo.title} | ${fastinfo.ammount} RUB

${fastinfo.totalusers} / ${fastinfo.maxusers} ${fastinfo.totalusers} / ${fastinfo.maxusers} ${fastinfo.needprem ? 'Для участия требуется подписка BetterLZT+' : ''}
${fastinfo.users[nickname] ? 'Вы уже приняли участие в данном розыгрыше' : `Принять участие`} ` document.querySelector("blockquote").innerHTML = document.querySelector("blockquote").innerHTML.replace(/\[betterfast=.*?\].*?\[\/betterfast\]/g, text); } } return; } async function doFast(id) { let nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); let answer = await request(`${server}/v6/dofast?id=${id}&nick=${nickname}`) if (answer == "200") { document.querySelector("blockquote").innerHTML = document.querySelector("blockquote").innerHTML + `
Вы успешно приняли участие`; } else if (answer == "201") { XenForo.alert("Вы уже приняли участие в розыгрыше", 1, 10000) } else if (answer == "202") { XenForo.alert("Увы, вы неуспели принять участие в розыгрыше", 1, 10000) } else if (answer == "403") { XenForo.alert("Для участия в данном розыгрыше нужен Premium", 1, 10000) } } async function themeRender() { let usernickt = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); let data = await JSON.parse(await cache); data = data.users[usernickt]; if (data) { if (data.profilebg != 'null') { if (!document.querySelector(".avatarScaler")) { document.querySelector("body").style = ` background-size: cover; background-position: center; background-attachment: fixed; background-repeat: no-repeat; background-image: linear-gradient(rgba(54, 54, 54, 0.85), rgba(54, 54, 54, 0.85)), url('${data.profilebg}')` } } } // акцент профиля // .messageSimple .secondaryContent .darkBackground .tabs .simpleRedactor .pageNavLinkGroup if (data) { if (data.maincolor != 'null') { if (!document.querySelector(".avatarScaler")) { styles = `#header, .messageSimple, .discussionList, .sidebar .sidebarWrapper, .secondaryContent, .darkBackground, .tabs, .simpleRedactor, .pageNavLinkGroup {background: ${data.maincolor};} .page_top {border-bottom: 0;} .counts_module {border-top: 0;}` let styleSheet = document.createElement("style") styleSheet.innerText = styles; document.head.appendChild(styleSheet); } } } if(await theme != 'null') { var link = document.createElement( "link" ); link.href = "https://tv.hasanbet.site/better/css/" + await theme + ".css"; link.type = "text/css"; link.rel = "stylesheet"; document.getElementsByTagName( "head" )[0].appendChild( link ); } } async function profileRender() { if (!document.querySelector(".avatarScaler")) {return false;} // ид юзера const id = /market\/user\/(\d+)\/items/.exec(document.querySelector('.userContentLinks .button[href^="market/"]').href)[1]; idhtml = document.createElement("div"); idhtml.innerHTML = `
ID пользователя:
${id}
`; document.querySelector(".profile_info_row").prepend(idhtml) // фон профиля let usernickt = document.querySelector("h1.username span").innerHTML.replace(/ .*?<\/i>/ig,''); let data = await JSON.parse(await cache); data = data.users[usernickt]; if (data) { if (data.profilebg) { document.querySelector("body").style = ` background-size: cover; background-position: center; background-attachment: fixed; background-repeat: no-repeat; background-image: linear-gradient(rgba(54, 54, 54, 0.85), rgba(54, 54, 54, 0.85)), url('${data.profilebg}')` } } // акцент профиля // .messageSimple .secondaryContent .darkBackground .tabs .simpleRedactor .pageNavLinkGroup if (data) { if (data.maincolor != 'null') { styles = `#header, .messageSimple, .discussionList, .sidebar .sidebarWrapper, .secondaryContent, .darkBackground, .tabs, .simpleRedactor, .pageNavLinkGroup {background: ${data.maincolor};} .page_top {border-bottom: 0;} .counts_module {border-top: 0;}` let styleSheet = document.createElement("style") styleSheet.innerText = styles; document.head.appendChild(styleSheet); } } // плашка с депозитом // let deposit = parseInt(document.querySelector('h3.amount').innerHTML.replace('₽','').replace(' ','')); // if (deposit >= 10000 && deposit < 50000) { // let pref = document.createElement('span'); // pref.style = `color: #f5f5f5;padding: 2px 8px; // margin: 0px 0px 0px 6px; // border-radius: 0px 6px 6px 0px; // display: inline-block; // margin-left: 25px; // background: #47626f; // line-height: 16px; // font-size: 12px; // -webkit-background-clip: text;-webkit-text-fill-color: white;`; // pref.innerHTML = "Депозит"; // pref.title = "Страховой депозит: "+document.querySelector('h3.amount').innerHTML; // let nickarea = document.querySelector("h1 span").append(pref); // } // if (deposit >= 50000 && deposit < 100000) { // let pref = document.createElement('span'); // pref.style = `color: #f5f5f5;padding: 2px 8px; // margin: 0px 0px 0px 6px; // border-radius: 0px 6px 6px 0px; // display: inline-block; // margin-left: 25px; // background: #8a315d; // line-height: 16px; // font-size: 12px; // -webkit-background-clip: text;-webkit-text-fill-color: white;`; // pref.innerHTML = "Депозит"; // pref.title = "Страховой депозит: "+document.querySelector('h3.amount').innerHTML; // let nickarea = document.querySelector("h1 span").append(pref); // } // if (deposit >= 100000) { // let pref = document.createElement('span'); // pref.style = `color: #f5f5f5;padding: 2px 8px; // margin: 0px 0px 0px 6px; // border-radius: 0px 6px 6px 0px; // margin-left: 25px; // display: inline-block; // background: #8152C6; // line-height: 16px; // font-size: 12px; // -webkit-background-clip: text;-webkit-text-fill-color: white;`; // pref.innerHTML = "Депозит"; // pref.title = "Страховой депозит: "+document.querySelector('h3.amount').innerHTML; // let nickarea = document.querySelector("h1 span").append(pref); // } // Плашка Premium // if (data) { // if (data.premium) { // let pref = document.createElement('span'); // pref.style = `color: #f5f5f5;padding: 2px 8px; // margin: 0px 0px 0px 6px; // border-radius: 6px 0px 0px 6px; // display: inline-block; // background: #ff0076; // margin-left: 25px; // line-height: 16px; // font-size: 12px;`; // pref.innerHTML = "Premium"; // pref.title = "BetterLZT Premium"; // let nickarea = document.querySelector("h1 span").append(pref); // } // } // Скрытие лайков if (await hidelike=='on') { document.querySelectorAll(".page_counter")[1].remove(); } // TrustFactor let blzt_trust_val = 0; let blzt_puser_likes = parseInt(document.querySelector(".page_counter .count").innerHTML.replace(' ', '')); let blzt_puser_nick = document.querySelector("h1.username span"), blzt_puser_nick_val = blzt_puser_nick.innerHTML.replace(/ .*?<\/i>/ig,''), blzt_puser_role = blzt_puser_nick.classList, blzt_puser_deposit = parseInt(document.querySelector('h3.amount').innerHTML.replaceAll(' ','').replace('₽','')); if (blzt_puser_deposit > 10000) { blzt_trust_val+=10; } if (blzt_puser_deposit > 20000) { blzt_trust_val+=10; } if (blzt_puser_deposit > 50000) { blzt_trust_val+=10; } if (blzt_puser_deposit > 100000) { blzt_trust_val+=20; } if (blzt_puser_deposit > 200000) { blzt_trust_val+=10; } if (blzt_puser_deposit > 300000) { blzt_trust_val+=15; } if (blzt_puser_deposit > 500000) { blzt_trust_val+=10; } if (blzt_puser_deposit > 700000) { blzt_trust_val+=20; } if (blzt_puser_likes > 100) { blzt_trust_val+=5; } if (blzt_puser_likes > 200) { blzt_trust_val+=10; } if (blzt_puser_likes > 500) { blzt_trust_val+=10; } if (blzt_puser_likes > 1000) { blzt_trust_val+=13; } if (blzt_puser_likes > 2000) { blzt_trust_val+=7; } if (blzt_puser_likes > 3000) { blzt_trust_val+=10; } if (blzt_puser_likes > 5000) { blzt_trust_val+=10; } if (blzt_puser_likes > 10000) { blzt_trust_val+=15; } if (blzt_puser_likes > 20000) { blzt_trust_val+=10; } if (blzt_puser_likes > 40000) { blzt_trust_val+=15; } if (blzt_puser_role.contains("style3")) { blzt_trust_val+=85; } if (blzt_puser_role.contains("style4")) { blzt_trust_val+=25; } if (blzt_puser_role.contains("style30")) { blzt_trust_val+=35; } if (blzt_puser_role.contains("style365")) { blzt_trust_val+=15; } if (blzt_puser_role.contains("style353")) { blzt_trust_val+=40; } if (blzt_puser_role.contains("style12")) { blzt_trust_val+=35; } if (blzt_puser_role.contains("style349")) { blzt_trust_val+=20; } if (blzt_puser_role.contains("style350")) { blzt_trust_val+=40; } if (blzt_puser_role.contains("style354")) { blzt_trust_val+=35; } if (blzt_puser_role.contains("style7")) { blzt_trust_val+=30; } if (blzt_puser_role.contains("style26")) { blzt_trust_val+=10; } if (blzt_puser_role.contains("banned")) { blzt_trust_val=0; } if (blzt_trust_val > 100) { blzt_trust_val=100; } if (data) { if (data.trustfactor) { blzt_trust_val += data.trustfactor; } } let blzt_trust_text, blzt_trust_color; if (blzt_trust_val > 15 && blzt_trust_val < 35) { blzt_trust_text = 'Плохой'; blzt_trust_color = 'redc'; } else if (blzt_trust_val >= 35 && blzt_trust_val < 65) { blzt_trust_text = 'Нормальный'; blzt_trust_color = 'mainc'; } else if (blzt_trust_val >= 65 && blzt_trust_val < 84) { blzt_trust_text = 'Отличный'; blzt_trust_color = 'mainc'; } else if (blzt_trust_val >= 84) { blzt_trust_text = 'Наивысший'; blzt_trust_color = 'mainc'; } else { blzt_trust_text = 'Ужасный'; blzt_trust_color = 'redc'; } let blzt_trust = document.querySelector(".insuranceDeposit"); let blzt_trust_render_genuine = `
`; let blzt_trust_render = `
`; let blzt_trust_block = document.createElement("div"); blzt_trust_block.innerHTML = blzt_trust_render; blzt_trust.append(blzt_trust_block); } function badTrust(trust) { let html = `

Почему вы считаете, что рейтинг завышен? Выберите один из вариантов (Кликните)

Пользователь занимался/занимается скамом, и это доказано Этот пользователь оскорбил меня/другого человека без оснований Этот пользователь занимается "Абузом жалоб"

Спасибо за Ваш вклад в BetterLZT

`; XenForo.alert(html, "BetterLZT > Жалоба на пользователя"); } function goodTrust(trust) { let html = `

Почему вы считаете, что рейтинг занижен? Выберите один из вариантов (Кликните)

Пользователь занимается торговлей на маркете/форуме и имеет более 90% положительных отзывов Этот пользователь помог мне (финансово/морально/физически) Этот пользователь принес форуму что-то новое (Предложил функционал, как пример)

Спасибо за Ваш вклад в BetterLZT

`; XenForo.alert(html, "BetterLZT > Жалоба на пользователя"); } function voteTrust(trust) { let html = ` Введите комментарий, после чего нажмите на кнопку для голосования. КОММЕНТАРИЙ ОБЯЗАТЕЛЕН!
О решении вы будете в ЛС форума
За спам вы будете лишены доступа к голосованию и получите пониженый фактор доверия.
👍 👎

Спасибо за Ваш вклад в BetterLZT

`; XenForo.alert(html, "BetterLZT > Голосование"); } async function commitVote(reason, trust, type) { let comment = reason; if (!comment) { return XenForo.alert("Укажите комментарий!", 1, 10000) } nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); let blzt_puser_likes = parseInt(document.querySelector(".page_counter .count").innerHTML.replace(' ', '')); let blzt_puser_nick = document.querySelector("h1.username span"), blzt_puser_nick_val = blzt_puser_nick.innerHTML.replace(/ .*?<\/i>/ig,'').replace(//g,''), blzt_puser_role = blzt_puser_nick.classList, blzt_puser_deposit = parseInt(document.querySelector('h3.amount').innerHTML.replaceAll(' ','').replace('₽','')); if (nickname == blzt_puser_nick_val) { return XenForo.alert("Остановись! Саморепорт карается баном в системе репортов!", 1, 10000) } let response = await request(`${server}/v6/report?user=${nickname}&originuser=${blzt_puser_nick_val}&originurl=${window.location.pathname}&originaction=${type}&origintrust=${trust}&origindeposit=${blzt_puser_deposit}&originlikes=${blzt_puser_likes}&comment=${comment}`) if (response == "200") { return XenForo.alert("Успех!", 1, 10000) } else if (response == "403") { return XenForo.alert("Доступ к функционалу ограничен. Свяжитесь с разработчиком", 1, 10000) } else { return XenForo.alert("Ошибка", 1, 10000) } } 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]; } async function uniqSave() { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); localcss = document.getElementsByClassName("UsernameCss")[0].value; banner = document.getElementsByClassName("BannerCss")[0].value; svgcss = document.getElementsByClassName("BannerCss")[0].value; bannertxt = document.querySelector("input[name='banner_text']").value; svg = document.querySelector("textarea[name=banner_icon]").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, ";")); svgcss = encodeURIComponent(svgcss.replace(/\n/g, "").replace(/; +/g, ";")); svg = encodeURIComponent(svg) if (secure == 'null') { await setSecure(`${document.querySelector("input[name=_xfToken").value.split(",")[0]+document.querySelector("input[name=_xfToken").value.split(",")[1]}`); } let req = await request(`${server}/v5/new?user=${nickname}&css=${css}&banner=${banner}&bannertxt=${bannertxt}&svgcss=${svgcss}&svg=${svg}`).catch(e => { XenForo.alert("Ошибка синхронизации с сервером, попробуйте еще раз", 1, 10000) }); if (await req != '200' && req != '401') { XenForo.alert("Ошибка синхронизации с сервером, свяжитесь с разработчиком t.me/hasantigiev or zelenka.guru/lays", 1, 10000) } if (await req == '401') { XenForo.alert("Для вашего профиля не найдены ключи авторизации. Cвяжитесь с разработчиком t.me/hasantigiev or zelenka.guru/lays", 1, 10000) } if (await req == '200') { XenForo.alert("Успех", 1, 10000); cacheSync(); location.reload(); } document.querySelector("input[type=submit]").click(); } async function usernames() { if (await uniqstatus == 'on') {return;} let usernames = document.querySelectorAll(".username span:not(.custom)"); try { for(let e of usernames) parseUsername(e); } catch {} } async function checkupdate() { try { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); let response = await request(`${server}/v2/support?ver=${version}&user=${nickname}`).catch(err => {}); if (response == 'no' || response == 'dis') { let waterm = document.createElement('h1') waterm.style = "position:fixed;bottom:5px;right:5px;opacity:0.5;z-index:99;color:white;font-size: 25px;"; waterm.innerHTML = "BetterLZT Needs an update"; return document.body.append(waterm); } if (response == 'newbeta') { let waterm = document.createElement('h1') waterm.style = "position:fixed;bottom:5px;right:5px;opacity:0.5;z-index:99;color:white;font-size: 25px;"; waterm.innerHTML = "Вы получили доступ к новой Beta-версии BetterLZT (t.me/hasantigiev)"; return document.body.append(waterm); } // if (response == 'dis') { return XenForo.alert("Расширение BetterLZT нуждается в обновлении.\nБез него многие функции могут перестать работать.\nПерейдите в настройки", 1, 10000); } } catch (error) { console.error("[BetterLZT] Failed to check update: "+error) } } async function cacheSync() { try { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); let response = await request(`${server}/v2/sync?user=${nickname}`).catch(err => {}); if (response != cache && response != '') { cache = response; await setCache(response); console.log('OK') } } catch (error) { console.error("[BetterLZT] Sync error: "+error) } } async function setCache(e) { return await GM.setValue('cache', e); } async function setSecure(e) { return await GM.setValue('secure', e); } 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") ) { if (data.css) { e.style = data.css; } e.classList.add("custom"); if (data.status) { switch (data.status) { case "js": e.innerHTML += ` ` break; case "python": e.innerHTML += ` ` break; case "server": e.innerHTML += ` ` break; case "bug": e.innerHTML += ` ` break; case "code": e.innerHTML += ` ` break; case "verified": e.innerHTML += ` ` break; case "gold": e.innerHTML += ` ` break; case "silver": e.innerHTML += ` ` break; case "beta": e.innerHTML += ` ` break; case "cookie": e.innerHTML += ` ` break; case "admin": e.innerHTML += ` ` break; case "moderate": e.innerHTML += ` ` break; case "smoderate": e.innerHTML += ` ` break; case "arbitr": e.innerHTML += ` ` break; case "editor": e.innerHTML += ` ` break; case "designer": e.innerHTML += ` ` break; case "designer2": e.innerHTML += ` ` break; case "walking": e.innerHTML += ` ` break; case "usd": e.innerHTML += `` break; case "custom": e.innerHTML += ` ${data.statusCode}` break; case "bmoder": e.innerHTML += ``; break case "sueta": e.innerHTML += ``; break default: e.innerHTML += ` ` break; } } } if (e.parentElement.parentElement.parentElement.parentElement.parentElement.classList[0] == "message" && data.svgcss) { let avatars = e.parentNode.parentNode.parentNode.parentElement.parentElement.querySelectorAll(".avatarHolder:not(.custom)"); let svg = document.createElement('div'); svg.classList.add("avatarUserBadges"); svg.innerHTML = `
${data.svg ? data.svg : ''}
`; avatars.forEach(el => { el.classList.add("custom") el.prepend(svg); }); } // parentElement.parentElement.parentElement.parentElement.querySelector(".avatarHolder"); if (e.parentElement.parentElement.parentElement.parentElement.querySelector(".avatarHolder") && data.svgcss) { let svg = document.createElement('div'); e.parentElement.parentElement.parentElement.parentElement.querySelector(".avatarHolder:not(.custom)").classList.add("custom") svg.classList.add("avatarUserBadges"); svg.innerHTML = `
${data.svg ? data.svg : ''}
`; e.parentElement.parentElement.parentElement.parentElement.querySelector(".avatarHolder").prepend(svg) } // if (e.parentNode.parentNode.parentNode.parentElement.parentElement.querySelector(".avatarHolder:not(.custom)") && data.svgcss) { // let svg = document.createElement('div'); // e.parentNode.parentNode.parentNode.parentElement.parentElement.querySelector(".avatarHolder:not(.custom)").classList.add("custom") // svg.classList.add("avatarUserBadges"); // svg.innerHTML = ` // // `; // e.parentNode.parentNode.parentNode.parentElement.parentElement.querySelector(".avatarHolder").prepend(svg) // } 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 = `${data.bannertxt}`; document.querySelector(".avatarScaler").append(banner); } } catch {} } function setAdblock(e) { GM.setValue("adblock", e) adblock = e; XenForo.alert('AdBlock настроен', 1, 10000) } function setLike(e) { GM.setValue("hidelike", e) hidelike = e; XenForo.alert('BetterLZT> Успех!', 1, 10000) } function setAva(e) { GM.setValue("avamarket", e) avamarket = e; XenForo.alert('BetterLZT> Успех!', 1, 10000) } function setUniq(e) { GM.setValue("uniqstatus", e) uniqstatus = e; XenForo.alert('BetterLZT> Успех!', 1, 10000) } function setContest(e) { GM.setValue("contestblock", e) contestblock = e; XenForo.alert('BetterLZT> Успех!', 1, 10000) } function setReport(e) { GM.setValue("reportbtns", e) reportbtns = e; XenForo.alert('BetterLZT> Успех!', 1, 10000) } function setGpt(e) { GM.setValue("hidegpt", e) hidegpt = e; XenForo.alert('BetterLZT> Успех!', 1, 10000) } function setSecretph(e) { GM.setValue("secretph", e) hidelike = e; XenForo.alert('BetterLZT> Успех!', 1, 10000); } function setShortcut(e) { GM.setValue("shortcut", e) shortcut = e; XenForo.alert('BetterLZT> Успех!', 1, 10000); } function setMarketblock(e) { GM.setValue("marketblock", e) marketblock = e; XenForo.alert('BetterLZT> Успех!', 1, 10000) } function setTheme(e) { GM.setValue("theme", e) marketblock = e; XenForo.alert('BetterLZT> Успех!', 1, 10000) } function setSimps(e) { GM.setValue("simps", e) simps = e; XenForo.alert('BetterLZT> Успех!', 1, 10000); } function renderFunctions() { unsafeWindow.nickname = nickname; unsafeWindow.usercss = usercss; unsafeWindow.server = server; unsafeWindow.cache = cache; unsafeWindow.version = version; unsafeWindow.hidegpt = hidegpt unsafeWindow.adblock = adblock; unsafeWindow.hidelike = hidelike; unsafeWindow.marketblock = marketblock; unsafeWindow.avamarket = avamarket; unsafeWindow.secure = secure; unsafeWindow.theme = theme; unsafeWindow.simps = simps unsafeWindow.shortcut = shortcut; unsafeWindow.uniqstatus = uniqstatus unsafeWindow.reportbtns = reportbtns unsafeWindow.setAdblock = e => setAdblock(e); unsafeWindow.setMarketblock = e => setMarketblock(e); unsafeWindow.setCache = e => setCache(e); unsafeWindow.setSecure = e => setSecure(e); unsafeWindow.setSecretph = e => setSecretph(e); unsafeWindow.setLike = e => setLike(e); unsafeWindow.setTheme = e => setTheme(e); unsafeWindow.setSimps = e => setSimps(e); unsafeWindow.setAva = e => setAva(e); unsafeWindow.setUniq = e => setUniq(e); unsafeWindow.setContest = e => setContest(e); unsafeWindow.setReport = e => setReport(e); unsafeWindow.setGpt = e => setGpt(e); unsafeWindow.setShortcut = e => setShortcut(e); unsafeWindow.request = request; let torender = [uniqSave, voteTrust, shortcutSet, goodTrust, badTrust, commitVote, shortcutCall, simpsSet, doFast, SecretSet, ColorSet, BgSet, dialogWindow, cacheSync, EmojiSet, getUID, usernames, parseUsername, cacheSync, blockNotice, BannerStyle, NickStyle]; 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 (adlist_w.some(o => e.innerHTML.toLowerCase().includes(o)) && !adlist_white.some(o => e.innerHTML.toLowerCase().includes(o))) { return true; } return false; } function isLink(e) { if (adlist_l.some(o => e.innerHTML.toLowerCase().includes(o)) && !adlist_white.some(o => e.innerHTML.toLowerCase().includes(o))) { return true; } return false; } async function adBlockDaemon() { if (await contestblock == 'on' && document.querySelector(".messageText.SelectQuoteContainer.ugc") && document.querySelector(".moneyContestWithValue")) { document.querySelector(".messageText.SelectQuoteContainer.ugc").remove() } adblock = await adblock; avablock = await avablock; 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(".userTitleBlurb h4") && adblock == 'on') { let e = document.querySelector(".userTitleBlurb h4"); let img = document.querySelector(".avatarBox span.img"); if (isAd(e)) { e.classList.add("blocked"); e.innerHTML = "Реклама скрыта"; img.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')`; } } if (document.querySelector(".userTitleBlurb h4") && adblock == 'on') { let e = document.querySelector(".userTitleBlurb h4"); let img = document.querySelector(".avatarBox span.img"); if (isLink(e)) { e.classList.add("blocked"); e.innerHTML = "Реклама скрыта"; } } // Проверка статуса на юзер пейдже if (document.querySelector(".current_text:not(.blocked)") && adblock == 'on') { let e = document.querySelector(".current_text:not(.blocked)"); let img = document.querySelector(".avatarScaler img"); if (isAd(e)) { 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 (isLink(e)) { e.classList.add("blocked"); e.innerHTML = "Реклама скрыта"; } } if (users.length < 1 && adblock != 'on') {return;} users.forEach(function (e) { // проверка на рекламу if (isAd(e) && 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 (isLink(e) && adblock == 'on') { e.innerHTML = 'Реклама скрыта'; e.classList.add("blocked"); return; } return; }) simpss = await simps simpsss = parseInt(simpss) threads = document.querySelectorAll(".discussionListItem"); threads.forEach(function (e){ if (simpsss >= 0) { if(!e.querySelector(".contest")) { if (parseInt(e.querySelector(".pclikeCount").innerHTML) < simpsss) { e.remove(); } } } }) } function blockNotice() { return XenForo.alert('Первый режим - скрывает все, что есть в базе и НЕ скрывает аватарки при обнаружении рекламы, вне базы\nВторой режим - скрывает все, что есть в базе и СКРЫВАЕТ аватарки при обнаружении рекламы вне базы','Режимы AdBlock'); } function BannerStyle(type) { switch (type) { case '1': document.getElementsByClassName("BannerCss")[0].value = `border-radius: 6px;background: url('https://media1.giphy.com/media/JtBZm3Getg3dqxK0zP/giphy.gif') center center;text-shadow: 0px 0px 3px #7a00ff, 0px 1px 0px #7a00ff, 1px 2px 0px red, 1px 3px 0px green;color: white`; document.getElementsByClassName("UserBannerStyle")[0].style = `border-radius: 6px;background: url('https://media1.giphy.com/media/JtBZm3Getg3dqxK0zP/giphy.gif') center center;text-shadow: 0px 0px 3px #7a00ff, 0px 1px 0px #7a00ff, 1px 2px 0px red, 1px 3px 0px green;color: white`; break; case '2': document.getElementsByClassName("BannerCss")[0].value = `border-radius: 6px;background: url('https://media1.giphy.com/media/3o7522WIg2FkHbCHvO/giphy.gif') center center;text-shadow: 0px 0px 3px #7a00ff, 0px 1px 0px gray, 1px 2px 0px lime, 1px 3px 0px blue;color: white`; document.getElementsByClassName("UserBannerStyle")[0].style = `border-radius: 6px;background: url('https://media1.giphy.com/media/3o7522WIg2FkHbCHvO/giphy.gif') center center;text-shadow: 0px 0px 3px #7a00ff, 0px 1px 0px gray, 1px 2px 0px lime, 1px 3px 0px blue;color: white`; default: break; } } function NickStyle(type) { switch (type) { case '1': document.getElementsByClassName("UsernameCss")[0].value = `background: url('https://media3.giphy.com/media/h5XENtRSEjj8tELOXW/giphy.gif');text-shadow: 0 0 5px #ff00f7;-webkit-background-clip: text;-webkit-text-fill-color: transparent`; document.getElementsByClassName("UsernameStyle")[0].style = `background: url('https://media3.giphy.com/media/h5XENtRSEjj8tELOXW/giphy.gif');text-shadow: 0 0 5px #ff00f7;-webkit-background-clip: text;-webkit-text-fill-color: transparent`; break; case '2': document.getElementsByClassName("UsernameCss")[0].value = `background: url('https://media4.giphy.com/media/dwaeIbBnF6HBu/giphy.gif');text-shadow: 0 0 5px #ff00f7;-webkit-background-clip: text;-webkit-text-fill-color: transparent`; document.getElementsByClassName("UsernameStyle")[0].style = `background: url('https://media4.giphy.com/media/dwaeIbBnF6HBu/giphy.gif');text-shadow: 0 0 5px #ff00f7;-webkit-background-clip: text;-webkit-text-fill-color: transparent`; default: break; } } function renderSettings() { // Проверка на нахождение в профиле и наличие кнопки редактирования профиля if (document.querySelector(".secondaryContent a.button.block[href='account/personal-details']")) { let profileeditbtn = document.createElement('a') profileeditbtn.classList.add('block'); profileeditbtn.classList.add('button'); profileeditbtn.onclick = function () { dialogWindow(); }; profileeditbtn.innerHTML = 'Настроить BetterLZT'; document.querySelector(".topblock .secondaryContent").append(profileeditbtn) } // $('ul.secondaryContent li:nth-child(10)').after('
  • Настройка BetterLZT
  • '); 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 = ` ` document.getElementsByClassName("ToggleTriggerAnchor")[0].prepend(adduniq); } } async function dialogWindow() { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim().replace(/<[^>]*>/g, ' ').replace(/\s{2,}/g, ' ').trim().replace(" Premium", "").trim(); let data = await JSON.parse(await cache); data = data.users[nickname]; adblockt = false; marketblockt = false; hideliket = false; hideava = false; uniqstatust = false; uniqstatust = false; contestblockt = false; reportbtnst = false; hidegptt = false; if (await hidegpt == 'on') hidegptt = true; if (await reportbtns == 'on') { reportbtnst = true; } if (await adblock == 'on') { adblockt = true; } if (await marketblock == 'on') { marketblockt = true; } if (await hidelike == 'on') { hideliket = true; } if (await avamarket == 'on') { hideava = true; } if (await uniqstatus == 'on') { uniqstatust = true; } if (await contestblock == 'on') { contestblockt = true; } let htmlall = `
    Основные
    Реклама, секретный вопрос
    Отключить "Уники" от BetterLZT Блокировщик рекламы Скрывать продавцов в ЧС Скрывать счетчик лайков в профиле Скрывать аватарки на маркете Скрывать контент с розыгрышей Показывать кнопки для быстрой подачи жалоб Скрывать ответы от ChatGPT Секретная фраза Сохранить Быстрая вставка текста Сохранить
    Выбор иконки у ника
    Для выбора просто кликните на понравившуюся иконку
    Кастомизация

    Фон

    Данный фон Вы будете видеть на всех страницах форума и маркета. Так же, он будет виден посетителям Вашего форума (при использовании расширения) Сохранить

    Своя тема

    Данную тему Вы будете видеть на всех страницах форума и маркета. Так же, она будет видна посетителям Вашего форума (при использовании расширения) Нужен Premium Сохранить
    Готовые темы
    Базы AdBlock и обновления
    Управление Premium
    Настроить уник Обновить ` let html_prem = ` ${htmlall} version ${version}
    Приобрести Premium `; return XenForo.alert( `${html_prem}`, 'BetterLZT (native) v.'+version ) } async function EmojiSet(emoji) { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); request(`${server}/v5/emoji?user=${nickname}&emoji=${emoji}`).catch(e => { XenForo.alert("Ошибка синхронизации с сервером, попробуйте еще раз", 1, 10000) }); cacheSync(); location.reload(); } async function BgSet() { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); bg = document.querySelector("#bgurl").value request(`${server}/v5/bg?user=${nickname}&bg=${bg}`).catch(e => { XenForo.alert("Ошибка синхронизации с сервером, попробуйте еще раз", 1, 10000) }); cacheSync(); location.reload(); } async function SecretSet() { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); secretph = document.querySelector("#secretph").value; setSecretph(secretph); } async function shortcutSet() { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); shortcut = document.querySelector("#shortcut").value; setShortcut(shortcut); } async function simpsSet() { simps = document.querySelector("#simps").value; setSimps(simps); } async function ColorSet() { nickname = document.querySelector(".accountUsername.username").firstElementChild.innerText.trim(); bg = document.querySelector("#colorbg").value request(`${server}/v5/color?user=${nickname}&color=${bg}`).catch(e => { XenForo.alert("Ошибка синхронизации с сервером, попробуйте еще раз", 1, 10000) }); cacheSync(); location.reload(); } async function currencyRead(url) { // from Vuchaev2015 <3 const response = await fetch(url); const data = await response.json(); return data; } async function marketRender() { if (document.location.host != "lzt.market") {return false;} // Курс валют from Vuchaev2015 const currencyMap = { 'Рубль': 'rub', 'Гривна': 'uah', 'Тенге': 'kzt', 'Бел. рубль': 'byn', 'Доллар': 'usd', 'Евро': 'eur', 'Фунт стерлингов': 'gbp', 'Юань': 'cny', 'Турецкая лира': 'try' }; const currencySymbolMap = { 'rub': '₽', 'uah': '₴', 'kzt': '₸', 'byn': 'BYN', 'usd': '$', 'eur': '€', 'gbp': '£', 'cny': '¥', 'try': '₺' }; let curr_api = "https://raw.githubusercontent.com/fawazahmed0/currency-api/1/latest/currencies/"; const chosenCurrency = document.querySelector("#content > div > div > aside > div > div > div:nth-child(2) > div > div.marketSidebarMenu.bordered-top > div > form > div > a > span").textContent.trim().split(' — ')[0]; const currency = currencyMap[chosenCurrency]; const currencySymbol = currencySymbolMap[currency]; const usd_url = `${curr_api}/usd/${currency}.json`; const eur_url = `${curr_api}/eur/${currency}.json`; const cny_url = `${curr_api}/cny/${currency}.json`; const usd_value = await currencyRead(usd_url); const eur_value = await currencyRead(eur_url); const cny_value = await currencyRead(cny_url); const datecurr = usd_value['date']; const currencies = [ { name: 'USD', value: usd_value[currency].toFixed(2) }, { name: 'EUR', value: eur_value[currency].toFixed(2) }, { name: 'CNY', value: cny_value[currency].toFixed(2) } ]; const currencyHtml = currencies.map((currency, index) => `
    ${currency.name}
    ${currency.value} ${currencySymbol}
    ${index === currencies.length - 1 ? '' : '
    '} `).join(''); const html = `

    Курс валют на ${datecurr}

    ${currencyHtml}
    `; document.querySelector('#content > div > div > aside > div > div > div:nth-child(2)').innerHTML += html; if(window.location.href.includes('goods/add')) { if(document.querySelector(".bbCodeSpoilerContainer")){ document.querySelector(".bbCodeSpoilerContainer button").click() } } // // let marketsettings = document.createElement("div") // marketsettings.classList.add("section") // marketsettings.innerHTML = `Настройки BetterLZT` if (await marketblock == 'on') { alerts = document.querySelectorAll(".itemIgnored"); alerts.forEach(function (e){ e.remove(); }) } if(document.querySelector(".sidebarUserAvatar") && await avamarket == 'on') { document.querySelector(".sidebarUserAvatar").remove(); } // if(window.location.href.includes('cart')) { // document.querySelector('a.button.primary.smallButton').parentElement.innerHTML += `Очистить корзину` // } }