您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Your assistant in finding scammers on the forum
当前为
// ==UserScript== // @name Lolzteam Multiaccount Finder // @version 0.5.1 // @description Your assistant in finding scammers on the forum // @author vuchaev2015 // @match https://zelenka.guru/* // @icon https://www.google.com/s2/favicons?sz=64&domain=zelenka.guru // @grant none // @namespace http://tampermonkey.net/ // ==/UserScript== // Находим элемент с ID AccountMenu var accountMenu = document.getElementById("AccountMenu"); // Создаем новый пункт списка var newListItem = document.createElement("li"); var buttonId = `lmfsettings`; // generate a unique button ID newListItem.innerHTML = `<a href="javascript:void(0)" id="${buttonId}">Multiaccount Finder</a>`; // Добавляем новый пункт в список var linksList = accountMenu.querySelector(".blockLinksList"); linksList.appendChild(newListItem); // Добавляем обработчик события клика на новый пункт меню var multiaccountFinderButton = document.getElementById(buttonId); multiaccountFinderButton.addEventListener("click", function (event) { event.preventDefault(); openSettings(); }); // Меню с настройками function openSettings() { var unixtime = Math.floor(Date.now() / 1000); // Получаем текущее время в секундах var isCheckedProfile = localStorage.getItem("autocheck-profile") === "true"; var chkboxProfile = '<input type="checkbox" id="autocheck-profile-' + unixtime + '" name="autocheck-profile-' + unixtime + '" ' + (isCheckedProfile ? 'checked="checked" ' : '') + 'value="1"> Автоматическая проверка в профилях<div></div>'; var isCheckedMiniProfile = localStorage.getItem("autocheck-mini-profile") === "true"; var chkboxMiniProfile = '<div> <input type="checkbox" id="autocheck-mini-profile-' + unixtime + '" name="autocheck-mini-profile-' + unixtime + '" ' + (isCheckedMiniProfile ? 'checked="checked" ' : '') + 'value="1"> Автоматическая проверка в мини-профилях </div>'; var content = chkboxProfile + chkboxMiniProfile; XenForo.alert(content, 'Lolzteam Multiaccount Finder'); var checkboxProfile = document.getElementById("autocheck-profile-" + unixtime); checkboxProfile.addEventListener("change", function() { localStorage.setItem("autocheck-profile" , checkboxProfile.checked); console.log(localStorage); // Выводим содержимое localStorage в консоль }); var checkboxMiniProfile = document.getElementById("autocheck-mini-profile-" + unixtime); checkboxMiniProfile.addEventListener("change", function() { localStorage.setItem("autocheck-mini-profile" , checkboxMiniProfile.checked); console.log(localStorage); // Выводим содержимое localStorage в консоль }); } // Добавляем кнопку Multiaccount Finder в профиле и мини профиле если присутствует кнопка shared-ips function checkMenuItems() { let menuItems = document.querySelectorAll(".Menu a[href*='/shared-ips']"); menuItems.forEach(function (item) { let menu = item.parentNode.parentNode; // select the parent of the parent element (ul) if (!menu.hasAttribute("data-multiaccount-finder")) { let newMenuItem = document.createElement("li"); let buttonId = `multiaccountFinderButton-${Date.now()}`; // generate a unique button ID let lastid = `${buttonId}` newMenuItem.innerHTML = `<a href="javascript:void(0)" id="${buttonId}">Multiaccount Finder</a>`; menu.appendChild(newMenuItem); let currentUrl = window.location.href; currentUrl = item.getAttribute("href"); if (localStorage.getItem("autocheck-profile") === 'true') { // проверка включенного авточека в обычном профиле const gifElement = document.createElement('img'); const gifId = `gif-profile`; gifElement.id = gifId; gifElement.src = 'https://cdn.lowgif.com/full/631c400b903c03d9-loading-gif-wpfaster.gif'; gifElement.width = '32'; gifElement.height = '32'; gifElement.title = '' { const countsModule = document.querySelectorAll('.counts_module'); countsModule.forEach(function(module){ let profilecounter = module.parentNode.parentNode; if (!profilecounter.hasAttribute("data-multiaccount-finder")) { profilecounter.setAttribute("data-multiaccount-finder", "added"); const element = document.getElementById(lastid); // находим элемент по id if (element) { // проверяем, что элемент найден element.remove(); // удаляем элемент } module.appendChild(gifElement); console.log(1) module.appendChild(gifElement); checkUser(`${currentUrl}`, `gif-profile`); } }); } } if (localStorage.getItem("autocheck-mini-profile") === 'true') { // проверка включенного авточека в мини профиле const countsModule = document.querySelectorAll('.userStatCounters'); const gifElement = document.createElement('img'); const gifId = `gif-profile-${Date.now()}`; gifElement.id = gifId; gifElement.src = 'https://cdn.lowgif.com/full/631c400b903c03d9-loading-gif-wpfaster.gif'; gifElement.width = '24'; gifElement.height = '24'; gifElement.title = ''; // перебираем элементы userStatCounters countsModule.forEach(function(module){ let miniprofileMenu = module.parentNode.parentNode; if (!miniprofileMenu.hasAttribute("data-multiaccount-finder")) { miniprofileMenu.setAttribute("data-multiaccount-finder", "added"); const element = document.getElementById(lastid); // находим элемент по id if (element) { // проверяем, что элемент найден element.remove(); // удаляем элемент } module.appendChild(gifElement); console.log(1) checkUser(`${currentUrl}`, gifId); } }); } let multiaccountFinderButton = document.getElementById(buttonId); menu.setAttribute("data-multiaccount-finder", "added"); if (multiaccountFinderButton) { multiaccountFinderButton.addEventListener("click", function (event) { event.preventDefault(); checkUser(`${currentUrl}`); }); } } }); } setInterval(checkMenuItems, 100); // Проверяем, начинается ли текущий URL с "https://zelenka.guru/online/?type=registered" if (window.location.href.indexOf("https://zelenka.guru/online/?type=registered") === 0) { const members = document.querySelectorAll('.member'); let index = 0; const checkNextMember = async () => { if (index >= members.length) return; const member = members[index]; const usernameLink = member.querySelector('a.username'); const usernameHref = usernameLink.getAttribute('href'); const userStatCounters = member.querySelector('.userStatCounters'); const gifElement = document.createElement('img'); const gifId = `gif-${index}`; gifElement.id = gifId; gifElement.src = 'https://cdn.lowgif.com/full/631c400b903c03d9-loading-gif-wpfaster.gif'; gifElement.width = '24'; gifElement.height = '24'; userStatCounters.appendChild(gifElement); await checkUser(`https://zelenka.guru/${usernameHref}shared-ips`, gifId); index++; checkNextMember(); } checkNextMember(); } function xenforoLogAndAlert(text, title) { console.log(text) XenForo.alert(`${text}`, `${title}`) } function checkUser(link, gifId) { console.log(gifId) console.log(`${link.replace(/(https:\/\/.*?)\/\//g, '$1/')}`) return fetch(`${link.replace(/(https:\/\/.*?)\/\//g, '$1/')}`) .then(response => response.text()) .then(data => { const parser = new DOMParser(); const htmlDocument = parser.parseFromString(data, "text/html"); const userLogs = htmlDocument.getElementsByClassName("userLog"); let bannedUsersCount = 0; let nonBannedUsersCount = 0; const numUserLogs = userLogs.length; console.log(userLogs) console.log(numUserLogs); const nameEl = htmlDocument.querySelector('a.crumb[href^="https://zelenka.guru/"] span'); const name = nameEl ? nameEl.textContent.trim() : ""; const gifElement = document.getElementById(gifId); if (!name) { //console.log("Name not found. Skipping further checks."); if (gifElement) { gifElement.src = 'https://i.imgur.com/wqXWudH.png'; // подгружаем иконку ошибки с imgur } throw new Error("Name not found"); } for (let i = 0; i < userLogs.length; i++) { const spans = userLogs[i].getElementsByTagName("span"); let isBanned = false; for (let j = 0; j < spans.length; j++) { if (spans[j].classList.contains("banned")) { bannedUsersCount++; isBanned = true; break; } } if (!isBanned) { nonBannedUsersCount++; } } const totalUsers = bannedUsersCount + nonBannedUsersCount; const bannedPercent = totalUsers ? ((bannedUsersCount / totalUsers) * 100).toFixed(2) : 0; const nonBannedPercent = totalUsers ? ((nonBannedUsersCount / totalUsers) * 100).toFixed(2) : 0; const scammer = `${name} - мошенник\n% заблокированных: ${bannedPercent}\n% не заблокированных: ${nonBannedPercent}\nОбщее количество пользователей в общих IP: ${numUserLogs}` const mbscammer = `${name} - возможно мошенник\n% заблокированных: ${bannedPercent}\n% не заблокированных: ${nonBannedPercent}\nОбщее количество пользователей в общих IP: ${numUserLogs}` const vpn = `${name} - использует VPN\n% заблокированных: ${bannedPercent}\n% не заблокированных: ${nonBannedPercent}\nОбщее количество пользователей в общих IP: ${numUserLogs}` const mbvpn = `${name} - возможно использует VPN\n% заблокированных: ${bannedPercent}\n% не заблокированных: ${nonBannedPercent}\nОбщее количество пользователей в общих IP: ${numUserLogs}` const cleaned = `${name} - пользователи по заданным параметрам не найдены` const multiaccount = `${name} - мультиаккаунт\n% заблокированных: ${bannedPercent}\n% не заблокированных: ${nonBannedPercent}\nОбщее количество пользователей в общих IP: ${numUserLogs}` const template = `https://zelenka.guru/forums/801/create-thread?title=%D0%96%D0%B0%D0%BB%D0%BE%D0%B1%D0%B0+%D0%BD%D0%B0+%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F+${name}&message=1.+%D0%9D%D0%B8%D0%BA%D0%BD%D0%B5%D0%B9%D0%BC+%D0%BD%D0%B0%D1%80%D1%83%D1%88%D0%B8%D1%82%D0%B5%D0%BB%D1%8F+%D0%B8+%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0+%D0%BD%D0%B0+%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D1%8C%3A+${link.replace(`/shared-ips`, ``)}%2F%0A2.+%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%BE%D0%B5+%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5+%D0%B6%D0%B0%D0%BB%D0%BE%D0%B1%D1%8B%3A%0A3.+%D0%94%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%B0%3A`; if (htmlDocument.body.textContent.includes("Пользователей по заданным параметрам не найдено.") || htmlDocument.body.textContent.includes("No matching users were found.")) { gifElement && (gifElement.src = 'https://i.imgur.com/i4OlWJk.png'); gifElement && (gifElement.title = `${cleaned}`); !gifElement && xenforoLogAndAlert(`${cleaned}`, `Lolzteam Multiaccount Finder`); } else if (bannedUsersCount >= nonBannedUsersCount && bannedUsersCount !== 0) { if (gifElement) { gifElement.addEventListener('click', function() { // при нажатии на красный треугольник доступ к быстрому созданию темы window.location.href = `${template}` }); gifElement.src = 'https://i.imgur.com/g5GxNHD.png'; gifElement.style.cursor = 'pointer'; gifElement.title = `${scammer}` } else { xenforoLogAndAlert(`${scammer}`, `Lolzteam Multiaccount Finder`); } } else if (nonBannedUsersCount > 15 && bannedUsersCount < nonBannedUsersCount / 3) { gifElement && (gifElement.src = 'https://i.imgur.com/o5qNA1o.png'); gifElement && (gifElement.title = `${vpn}`); !gifElement && xenforoLogAndAlert(`${vpn}`, `Lolzteam Multiaccount Finder`); } else if (nonBannedUsersCount > 6 && nonBannedUsersCount <= 15 && bannedUsersCount < nonBannedUsersCount / 2) { gifElement && (gifElement.src = 'https://i.imgur.com/o5qNA1o.png'); gifElement && (gifElement.title = `${mbvpn}`); !gifElement && xenforoLogAndAlert(`${mbvpn}`, `Lolzteam Multiaccount Finder`); } else if (bannedUsersCount > nonBannedUsersCount / 2) { if (gifElement) { gifElement.addEventListener('click', function() { // при нажатии на красный треугольник доступ к быстрому созданию темы window.location.href = `${template}` // редирект на создание жалобы Zelenka.guru }); gifElement.src = 'https://i.imgur.com/g5GxNHD.png'; gifElement.style.cursor = 'pointer'; gifElement.title = `${mbscammer}` } else { xenforoLogAndAlert(`${mbscammer}`, `Lolzteam Multiaccount Finder`); } } else { gifElement && (gifElement.src = 'https://i.imgur.com/i4OlWJk.png'); gifElement && (gifElement.title = `${multiaccount}`); !gifElement && xenforoLogAndAlert(`${multiaccount}`, `Lolzteam Multiaccount Finder`); } }) .catch(error => console.error(error)); }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址