NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name L3SYA_ADM1N_H31P3R // @namespace http://tampermonkey.net/ // @version 1.1 // @description Помощник Администратора Bot Lesya // @author A1xndrov // @copyright 2024, a1xndrov (https://vk.com/a1xndrov) // @match https://botlesya.ru/* // @updateURL https://openuserjs.org/install/A1xndrov/L3SYA_ADM1N_H31P3R.user.js // @license MIT // ==/UserScript== (function () { 'use strict'; const bodyElement = document.querySelector("body"); bodyElement.style.backgroundImage = `url('https://sun9-20.userapi.com/impg/nboXPTHHElkkjkcuFMQ4uPQH_MN8QimWk1UyXw/861W26hhEmM.jpg?size=1920x1080&quality=95&sign=c9425b9a1867e29b2d121f88d099ed77&type=album')`; const ACCESS_TOKEN = ''; // Ваш токен ВК (Kate) const CHATID = 'user_id=000'; // Куда будет отправлять команды (Лс Леси (указывать: user_id=(ИД ЧАТА), Беседа Админская (указывать: chat_id=(ИД ЧАТА)) let previousId = null; let nickname; const handleNode = async (node) => { if (node.nodeName === "A") { nickname = node.textContent; } else if (node.nodeType === Node.TEXT_NODE) { const regex = /(\d+)/; const matches = node.textContent.match(regex); if (matches && matches.length > 0) { const id = matches[0]; if (id !== previousId && window.location.href !== 'https://botlesya.ru/') { window.location.href = `https://botlesya.ru/ap/logs?id=${id}`; previousId = id; }; }; }; }; const observer = new MutationObserver((mutationsList) => { mutationsList.forEach(mutation => { mutation.addedNodes.forEach(async node => { handleNode(node); }); }); }); const config = { childList: true, subtree: true, characterData: true }; observer.observe(document.body, config); const urlParams = new URLSearchParams(window.location.search); let id = urlParams.get('id'); previousId = id; document.addEventListener('contextmenu', event => event.preventDefault()); const style = { color: 'black', userSelect: 'none', fontWeight: 'bold', }; const menuContainer = document.createElement('div'); Object.assign(menuContainer.style, { display: 'none', position: 'fixed', top: '60px', right: '10px', backgroundColor: 'rgba(255, 255, 255, 0.8)', padding: '10px', height: 'auto', borderRadius: '10px', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', transition: 'opacity 0.3s ease-in-out' }); const MenuUser = document.createElement('p'); MenuUser.innerHTML = id ? `👤 Меню игрока [ID: ${id}]` : 'Доступно только в логах игрока! ❌'; Object.assign(MenuUser.style, { ...style, textAlign: 'center', top: '-10px', left: '50%', textShadow: '2px 2px 4px rgba(0, 0, 0, 0.2)', fontFamily: 'Arial Black, Gadget, sans-serif', fontSize: '10px', }); menuContainer.appendChild(MenuUser); const helperButton = document.createElement('button'); helperButton.innerHTML = 'Admin Helper ❄️'; Object.assign(helperButton.style, { ...style, transition: 'transform 0.2s, box-shadow 0.2s', backgroundColor: 'rgba(255, 255, 255, 0.3)', border: 'none', padding: '10px 20px', borderRadius: '10px', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', position: 'fixed', top: '10px', right: '10px', cursor: 'pointer', fontFamily: 'Arial, sans-serif' }); const sendCaptchaText = document.createElement('p'); sendCaptchaText.innerHTML = `🤖 Управление капчами:`; Object.assign(sendCaptchaText.style, { ...style, fontFamily: 'Arial Black, Gadget, sans-serif', textShadow: '2px 2px 4px rgba(0, 0, 0, 0.2)', fontSize: '10px', }); menuContainer.appendChild(sendCaptchaText); const buttonActions = [ { text: 'Баланс', action: 'Баланс' }, { text: 'Банк', action: 'Банк' }, { text: 'Рейтинг', action: 'Рейтинг' }, { text: 'Биткоин', action: 'Биткоин' }, { text: 'Никнейм', action: 'Ник' }, { text: 'Текст', action: 'Текст' } ]; for (let i = 0; i < Math.ceil(buttonActions.length / 3); i++) { const buttonRow = document.createElement('div'); buttonRow.style.display = 'flex'; buttonRow.style.justifyContent = 'center'; for (let j = i * 3; j < Math.min(i * 3 + 3, buttonActions.length); j++) { const { text, action } = buttonActions[j]; const menuButton = document.createElement('button'); menuButton.innerHTML = text; Object.assign(menuButton.style, { ...style, backgroundColor: 'white', fontFamily: 'Arial, sans-serif', border: '2px solid white', padding: '10px 20px', borderRadius: '10px', margin: '5px', cursor: 'pointer', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', transition: 'transform 0.2s, box-shadow 0.2s', position: 'relative' }); AddEffect(menuButton); menuButton.addEventListener('click', () => { let confirmcaptcha = confirm(`Вы действительно хотите выдать капчу игроку «${nickname}» [ID: ${id}] с типом «${action}»?`); if (confirmcaptcha) return MsgSend(`Капча ${id} ${action}`, `Капча «${action}» была успешно выслана игроку «${nickname}» [ID: ${id}]`); }); buttonRow.appendChild(menuButton); }; menuContainer.appendChild(buttonRow); }; helperButton.addEventListener('click', () => { if (menuContainer.style.display === 'none' || menuContainer.style.display === '') { menuContainer.style.display = 'block'; setTimeout(() => { menuContainer.style.opacity = '1'; }, 50); } else { menuContainer.style.opacity = '0'; setTimeout(() => { menuContainer.style.display = 'none'; }, 300); }; }); const difficultyInput = document.createElement('input'); difficultyInput.type = 'number'; difficultyInput.placeholder = 'Лвл'; Object.assign(difficultyInput.style, { ...style, padding: '8px', margin: '5px', float: 'left', borderRadius: '5px', fontFamily: 'Arial, sans-serif', backgroundColor: 'rgba(255, 255, 255, 0.7)', border: '1px solid white', width: '50px', height: '30px', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', }); difficultyInput.setAttribute('max', '8'); difficultyInput.setAttribute('min', '1'); AddEffect(difficultyInput); menuContainer.appendChild(difficultyInput); const daysInput = document.createElement('input'); daysInput.type = 'number'; daysInput.placeholder = 'Дни'; Object.assign(daysInput.style, { ...style, marginLeft: '10px', padding: '8px', fontFamily: 'Arial, sans-serif', float: 'left', borderRadius: '5px', backgroundColor: 'rgba(255, 255, 255, 0.7)', border: '1px solid white', margin: '5px', width: '50px', height: '30px', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', }); daysInput.setAttribute('max', '3500'); daysInput.setAttribute('min', '1'); AddEffect(daysInput); menuContainer.appendChild(daysInput); const recaptchaButton = document.createElement('button'); recaptchaButton.innerHTML = 'Выдать гугл-капчу'; Object.assign(recaptchaButton.style, { ...style, transition: 'transform 0.2s, box-shadow 0.2s', backgroundColor: 'white', fontFamily: 'Arial, sans-serif', border: '2px solid white', float: 'left', padding: '10px 30px', borderRadius: '10px', display: 'block', margin: '4px', cursor: 'pointer', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', position: 'relative' }); recaptchaButton.addEventListener('click', async () => { if (difficultyInput.value === '' || daysInput.value === '') { return alert('Выдача гугл-капчи > Упс, вы не заполнили поля ❓'); }; if (daysInput.value > 3500 || daysInput.value < 1 || difficultyInput.value > 8 || difficultyInput.value < 1) { daysInput.value = ''; difficultyInput.value = ''; return alert('Выдача гугл-капчи > Упс, вы превысили максимально допустимый лимит ❓\nУровень капчи - минимальный: 1, максимальный: 8\nДни капчи - минимальный: 1, максимальный: 3500'); }; let confirmgcaptcha = confirm(`Выдача гугл-капчи > Вы действительно хотите выдать гугл-капчу игроку «${nickname}» [ID: ${id}] на ${daysInput.value}д > ${difficultyInput.value} лвл ❓`); if (confirmgcaptcha) { await MsgSend(`Гкапча${difficultyInput.value} ${id} ${daysInput.value}д`, `Выдача гугл-капчи > Была выдана успешно игроку «${nickname}» [ID: ${id}] > ${daysInput.value}д > ${difficultyInput.value} лвл 🥳`); daysInput.value = ''; difficultyInput.value = ''; } else { daysInput.value = ''; difficultyInput.value = ''; }; }); AddEffect(recaptchaButton); menuContainer.appendChild(recaptchaButton); const SetnickText = document.createElement('p'); SetnickText.innerHTML = `🕶 Управление никнеймом:`; Object.assign(SetnickText.style, { ...style, fontFamily: 'Arial Black, Gadget, sans-serif', textShadow: '2px 2px 4px rgba(0, 0, 0, 0.2)', fontSize: '10px', }); menuContainer.appendChild(SetnickText); const Setnick = document.createElement('input'); Setnick.type = 'text'; Setnick.placeholder = 'Новый никнейм'; Object.assign(Setnick.style, { ...style, marginLeft: '5px', padding: '8px', fontFamily: 'Arial, sans-serif', float: 'left', borderRadius: '5px', backgroundColor: 'rgba(255, 255, 255, 0.7)', border: '1px solid white', margin: '5px', width: '125px', height: '30px', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', clear: 'both', }); AddEffect(Setnick); menuContainer.appendChild(Setnick); const SetnickButton = document.createElement('button'); SetnickButton.innerHTML = 'Изменить никнейм'; Object.assign(SetnickButton.style, { ...style, transition: 'transform 0.2s, box-shadow 0.2s', backgroundColor: 'white', fontFamily: 'Arial, sans-serif', border: '2px solid white', float: 'left', padding: '10px 22px', borderRadius: '10px', display: 'block', margin: '4px', cursor: 'pointer', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', position: 'relative' }); SetnickButton.addEventListener('click', async () => { if (Setnick.value === '') { return alert('Изменение никнейма > Упс, вы не заполнили поле ❓'); }; let confirmsetnick = confirm(`Изменение никнейма > Вы действительно хотите изменить никнейм игроку «${nickname}» [ID: ${id}] на «${Setnick.value}» ❓`); if (confirmsetnick) { await MsgSend(`Сетник ${id} ${Setnick.value}`, `Изменение никнейма > Вы успешно изменили никнейм игроку «${nickname}» [ID: ${id}] на «${Setnick.value}» 🥳`); Setnick.value = ''; location.reload(); } else { Setnick.value = ''; }; }); AddEffect(SetnickButton); menuContainer.appendChild(SetnickButton); const BanText = document.createElement('p'); BanText.innerHTML = `🚫 Управление блокировками:`; Object.assign(BanText.style, { ...style, fontFamily: 'Arial Black, Gadget, sans-serif', textShadow: '2px 2px 4px rgba(0, 0, 0, 0.2)', fontSize: '10px', }); menuContainer.appendChild(BanText); const BanDays = document.createElement('input'); BanDays.type = 'number'; BanDays.placeholder = 'Дни'; Object.assign(BanDays.style, { ...style, padding: '8px', margin: '5px', float: 'left', borderRadius: '5px', fontFamily: 'Arial, sans-serif', backgroundColor: 'rgba(255, 255, 255, 0.7)', border: '1px solid white', width: '60px', height: '30px', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', }); BanDays.setAttribute('min', '1'); AddEffect(BanDays); menuContainer.appendChild(BanDays); const BanReason = document.createElement('input'); BanReason.type = 'text'; BanReason.placeholder = 'Причина'; Object.assign(BanReason.style, { ...style, marginLeft: '10px', padding: '8px', fontFamily: 'Arial, sans-serif', float: 'left', borderRadius: '5px', backgroundColor: 'rgba(255, 255, 255, 0.7)', border: '1px solid white', margin: '5px', width: '60px', height: '30px', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', }); AddEffect(BanReason); menuContainer.appendChild(BanReason); const BanButton = document.createElement('button'); BanButton.innerHTML = 'Выдать блокировку'; Object.assign(BanButton.style, { ...style, transition: 'transform 0.2s, box-shadow 0.2s', backgroundColor: 'white', fontFamily: 'Arial, sans-serif', border: '2px solid white', float: 'left', padding: '10px 16px', borderRadius: '10px', margin: '4px', cursor: 'pointer', boxShadow: '2px 2px 5px rgba(0, 0, 0, 0.2)', position: 'relative' }); BanButton.addEventListener('click', async () => { let banDuration = !BanDays.value ? 'навсегда' : `на ${BanDays.value} дней`; let banReason = !BanReason.value ? 'Причина не указана' : BanReason.value; let confirmMessage = `Выдача блокировки > Вы действительно хотите выдать блокировку игрока «${nickname}» [ID: ${id}] ${banDuration} по причине: «${banReason}» ❓`; if (confirm(confirmMessage)) { let successMessage = `Бан ${id} ${!BanDays.value ? '' : `${BanDays.value}д`} ${BanReason.value}`; await MsgSend(successMessage, `Выдача блокировки > Блокировка была выдана успешно игроку «${nickname}» [ID: ${id}] ${banDuration} по причине: «${banReason}» 🥳`); } BanDays.value = ''; BanReason.value = ''; }); AddEffect(BanButton); menuContainer.appendChild(BanButton); if (!id) { const menuButtons = menuContainer.querySelectorAll('button'); menuButtons.forEach(button => { button.disabled = true; button.style.pointerEvents = 'none'; button.style.filter = 'blur(5px)'; }); const inputFields = menuContainer.querySelectorAll('input'); inputFields.forEach(input => { input.disabled = true; input.style.pointerEvents = 'none'; input.style.filter = 'blur(5px)'; }); const elementsToDisable = [Setnick, BanDays, BanReason, sendCaptchaText, SetnickText, BanText, daysInput, difficultyInput]; elementsToDisable.forEach(element => { element.disabled = true; element.style.filter = 'blur(5px)'; }); }; AddEffect(helperButton); document.body.appendChild(helperButton); document.body.appendChild(menuContainer); async function MsgSend(Msg, Succeful) { fetch(`https://api.vk.com/method/messages.send?${CHATID}&message=${encodeURIComponent(Msg)}&access_token=${ACCESS_TOKEN}&v=5.131&random_id=0`, { method: 'GET' }); return alert(Succeful); }; function AddEffect(element) { element.addEventListener('mouseenter', () => { element.style.transition = 'transform 0.2s, box-shadow 0.2s'; element.style.transform = 'scale(1.02)'; element.style.boxShadow = '0 0 15px rgba(0, 0, 0, 0.3)'; }); element.addEventListener('mouseleave', () => { element.style.transition = 'transform 0.2s, box-shadow 0.2s'; element.style.transform = 'scale(1)'; element.style.boxShadow = '2px 2px 5px rgba(0, 0, 0, 0.2)'; }); }; function clickButtons() { const autoOffButton = document.querySelector('.MuiButton-root.MuiButton-outlinedInfo'); if (autoOffButton) { autoOffButton.click(); }; }; setTimeout(clickButtons, 1000); function checkIdAndReload() { const urlParams = new URLSearchParams(window.location.search); id = urlParams.has('id') ? urlParams.get('id') : null; if (!window.location.href.startsWith('https://botlesya.ru/ap/logs') && id !== previousId) { location.reload(); }; previousId = id; }; setInterval(checkIdAndReload, 100); })();