Untitled
unknown
plain_text
2 years ago
25 kB
7
Indexable
// ==UserScript==
// @name MazeHost Admin
// @namespace https://game.maze-host.ru/admin/
// @version 1.0
// @description loli
// @author DManik
// @match https://game.maze-host.ru/*
// @icon https://game.maze-host.ru/favicon.ico
// @require https://game.maze-host.ru/application/public/js-core/sweetalert.min.js
// ==/UserScript==
(function() {
const userid = 3720;
const script = document.createElement('script');
script.text = `
function copyToClipboard(text) {
navigator.clipboard.writeText(text);
$.jGrowl('Строка успешно скопирована!', { sticky: !1, position: "top-right", theme: "bg-yellow" });
}
function deleteTables(host, user, database, password) {
if(!host || !user || !database || !password) return swal('Ошибка', 'Не найдены данные подключения к MySQL', 'error');
fetch('https://zeerp.online/sql_delete_tables?host=' + host + '&user=' + user + '&database=' + database + '&password=' + password)
.then(response => {
if (!response.ok) throw new Error('Ошибка HTTP: ' + response.status);
return response.json();
})
.then(data => {
if (!data.status) throw new Error("Некорректный ответ сервера");
if (data.status == 'error') throw new Error(data.response);
swal("Успех", data.response, "success");
})
.catch(error => {
//$.jGrowl(error, { sticky: !1, position: "top-right", theme: "bg-red" });
swal("Ошибка", error.message, "error");
console.error('Произошла ошибка:', error.message);
});
}
function openFileInput() {
const fileInput = document.getElementById('fileInput');
fileInput.click();
}
`;
document.body.appendChild(script);
function getCookie(name) {
const cookies = document.cookie.split(';').map(cookie => cookie.trim());
for (const cookie of cookies) {
const [cookieName, cookieValue] = cookie.split('=');
if (cookieName === name) {
return cookieValue;
}
}
return null;
}
function createCookie(name, value, days) {
const expires = new Date();
expires.setTime(expires.getTime() + (days * 24 * 60 * 60 * 1000));
const cookieString = `${name}=${value || ''}; expires=${expires.toUTCString()}; path=/`;
document.cookie = cookieString;
}
function editCookie(name, value, days) {
// Проверяем, существует ли кука с указанным именем
const existingCookie = getCookie(name);
if (existingCookie !== null) {
// Если кука существует, устанавливаем новые значения
createCookie(name, value, days);
} else {
// Если кука не существует, создаем новую
createCookie(name, value, days);
}
}
function deleteCookie(name) {
document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
}
function sendError(msg) {
new swal('Ошибка', msg, 'error');
}
function sendSuccess(msg) {
return swal('Успех', msg, 'success');
}
// ^ Идентификаторы и имена сотрудников
const staffnames = {
1: "Илья Андросов",
3720: "Никита Белов",
15561: "Даник Маник",
36864: "Константин Киреев",
162868: "Виолетта Семёнова",
181074: "Гена Мадаев",
71670: "Roman Timofeev",
}
// ^ Цены за услуги (заказы)
const priceListServices = {
1: 30, // ^ Смена названия и ссылок
2: 35, // ^ Установка игрового мода
3: 25, // ^ Выдача прав администратора
4: 30, // ^ Смена логотипа
5: 100, // ^ Создание сайта
6: 100, // ^ Создание форума
7: 75, // ^ Автодонат на сервер
8: 15, // ^ Реклама LITE(репост в ВК)
9: 30, // ^ Реклама VIP(пост, ваш текст)
10: 50, // ^ Реклама PRO(закреп 1 день)
11: 50, // ^ dontLimitedVehicles 3.4
12: 50, // ^ Server Connect
13: 15, // ^ Смена бонуса
14: 100, // Домен .ru (на 1 год)
16: 120, // VPS/VDS (боты, cef)
17: 50, // ^ Защита от DDOS (Web)
18: 75, // ^ Голосовой чат (sampvoice)
19: 100, // ^ VK Security
19: 100, // ^ SMTP (Web)
}
// ^ Цены за услуги (дизайн)
const priceListDesigns = {
1: 25, // ^ Обложка «Настоящая Россия»
2: 25, // ^ Баннер «Летнее обновление»
3: 25, // ^ Обложка «Aurora CRMP»
4: 25, // ^ Баннер «Конкурс»
5: 50, // ^ Пак обложка + аватарка
6: 25, // ^ Баннер «Открытие проекта»
7: 25, // ^ Обложка «Зима» (1)
8: 25, // ^ Обложка «Зима» (2)
}
function _MazeCustomScript() {
const link = document.location.href;
/********################################################*******/
/********# #*******/
/********# ЗАКАЗЫ УСЛУГ #*******/
/********# #*******/
/********################################################*******/
if (link.includes('https://game.maze-host.ru/admin/services')) {
var h3 = document.querySelector(".content-box-header");
if (!h3 || h3.textContent != "Все заказы услуг") return 1;
// h3.innerHTML = 'Все заказы услуг | Заработано <img src="https://icons8.com/preloaders/preloaders/1488/Iphone-spinner-2-128.gif" alt="Загрузка..." width="20" height="20" style="vertical-align: middle;">';
h3.innerHTML = `Все заказы услуг | Заработано <span style="color: green" title="${getCookie('salary') || 0}">${getCookie('salary') || 0}</span> руб.`;
fetch('https://zeerp.online/get_salary?userid=' + userid)
.then(response => {
if (!response.ok) throw new Error('Ошибка HTTP: ' + response.status);
return response.json();
})
.then(data => {
h3.innerHTML = `Все заказы услуг | Заработано <span style="color: green" title="${data.salary}">${data.salary}</span> руб.`;
createCookie('salary', data.salary, 30);
})
.catch(error => {
h3.innerHTML = 'Все заказы услуг | <span style="color: red">' + error + '</span>';
console.error('Произошла ошибка:', error);
});
var table = document.getElementsByClassName('table')[0];
if (table) {
var rows = table.getElementsByTagName('tr');
var header = document.createElement('th');
header.textContent = 'Ответственный';
rows[0].insertBefore(header, document.querySelector(".table > thead:nth-child(1) > tr:nth-child(1) > th:nth-child(8)"));
for (var i = 1; i < rows.length; i++) { // Перебираем каждую строку
const orderid = (document.querySelector(`.table > tbody:nth-child(2) > tr:nth-child(${i}) > td:nth-child(9) > a:nth-child(1)`)).attributes[3].value;
const staffid = (document.querySelector(`.table > tbody:nth-child(2) > tr:nth-child(${i}) > td:nth-child(9) > a:nth-child(1)`)).attributes[4].value;
const server = document.querySelector(`.table > tbody:nth-child(2) > tr:nth-child(${i}) > td:nth-child(3)`);
const description = document.querySelector(`.table > tbody:nth-child(2) > tr:nth-child(${i}) > td:nth-child(5)`);
const service = $(`.table > tbody:nth-child(2) > tr:nth-child(${i}) > td:nth-child(4)`);
const serviceid = +service.text().match(/\d+/) || 0;
const status = (document.querySelector(`.table > tbody:nth-child(2) > tr:nth-child(${i}) > td:nth-child(9) > a:nth-child(1)`)).attributes[5].value;
const cell = document.createElement('td');
const lastCell = rows[i].querySelectorAll("td")[rows[i].querySelectorAll("td").length - 2];
rows[i].insertBefore(cell, lastCell);
const time = document.querySelector(".table > thead:nth-child(1) > tr:nth-child(1) > th:nth-child(9)");
if (status == 1 && staffid == userid) {
for (var y = 1; y <= 10; y++) {
document.querySelector(`table > tbody > tr:nth-child(${i}) > td:nth-child(${y})`).style.backgroundColor = '#efffe8';
}
}
if (staffid) {
const link = document.createElement('a');
link.href = '/admin/users/edit/' + staffid;
link.textContent = staffnames[staffid];
link.title = 'ID: ' + staffid;
cell.appendChild(link);
} else {
cell.textContent = 'Еще не определен';
}
if (server.textContent != '#0')
server.innerHTML += '\n[<img src="https://icons8.com/preloaders/preloaders/1488/Iphone-spinner-2-128.gif" alt="Загрузка..." width="15" height="15" style="vertical-align: middle;">]';
const price = priceListServices[serviceid];
if (price != undefined) service.html(service.html() + ' <span style="color: green">[' + price + 'р]</span>');
//description.innerHTML = description.textContent.replace(/((https?:\/\/)?(www\.)?[^\s]+\.\w{2,}(\/\S*)?)/g, (url) => `<a href="${url}" target="_blank">${url}</a>`);
var data_comment = 'Заказ успешно выполнен!';
if (serviceid === 18) data_comment = 'Заказ успешно выполнен! Файлы для сборки: https://disk.yandex.ru/d/3dhQJBr6P3ESWA';
$('#ajax > div.row > div > div > div > table > tbody > tr:nth-child(' + i + ') > td:nth-child(1)').css({
'min-width': '60px',
'max-width': '60px',
//'word-wrap': 'break-word',
});
$('#ajax > div.row > div > div > div > table > tbody > tr:nth-child(' + i + ') > td:nth-child(5)').css({
'min-width': '470px',
'max-width': '470px',
'word-wrap': 'break-word',
});
$('#ajax > div.row > div > div > div > table > tbody > tr:nth-child(' + i + ') > td:nth-child(6)').css({
'min-width': '180px',
'max-width': '180px',
'word-wrap': 'break-word',
});
$('#ajax > div.row > div > div > div > table > tbody > tr:nth-child(' + i + ') > td:nth-child(7)').css({
'min-width': '100px',
'max-width': '100px',
//'word-wrap': 'break-word',
});
var newElement = $(`<a data-toggle="modal" href="#edit" data-target="#edit" data-orderid="${orderid}" data-staffid="${staffid}" data-status="3" data-comment="Для выполнения заказа свяжитесь с тех. поддержкой" onclick="getdetails(this)" class="button1 small" style="margin: 3px; margin-left: 0px; background: gray; padding: 0 16px;">?</a>`);
$('#ajax > div.row > div > div > div > table > tbody > tr:nth-child(' + i + ') > td:nth-child(10)').append(newElement);
var newElement = $(`<a data-toggle="modal" href="#edit" data-target="#edit" data-orderid="${orderid}" data-staffid="${staffid}" data-status="3" data-comment="Баланс возвращен" onclick="getdetails(this)" class="button1 small" style="margin: 3px; background: red; padding: 0 16px;">$</a>`);
$('#ajax > div.row > div > div > div > table > tbody > tr:nth-child(' + i + ') > td:nth-child(10)').append(newElement);
var newElement = $(`<a data-toggle="modal" href="#edit" data-target="#edit" data-orderid="${orderid}" data-staffid="${staffid}" data-status="2" data-comment="${data_comment}" onclick="getdetails(this)" class="button1 small" style="margin: 3px; background: green; padding: 0 15px;">✔</a>`);
$('#ajax > div.row > div > div > div > table > tbody > tr:nth-child(' + i + ') > td:nth-child(10)').append(newElement);
// var newElement = $(`<a data-toggle="modal" href="#edit" data-target="#edit" data-orderid="${orderid}" data-staffid="${staffid}" data-status="2" data-comment="${data_commant}" onclick="getdetails(this)" class="button1 small" style="margin: 3px; background: lawngreen; padding: 0 10px;">🎤</a>`);
// $('#ajax > div.row > div > div > div > table > tbody > tr:nth-child(' + i + ') > td:nth-child(10)').append(newElement);
}
}
}
/********################################################*******/
/********# #*******/
/********# ЗАКАЗЫ ДИЗАЙНА #*******/
/********# #*******/
/********################################################*******/
else if (link.includes('https://game.maze-host.ru/admin/designs')) {
const h3 = document.querySelector(".content-box-header");
if (!h3 || h3.textContent != "Все заказы дизайна") return 1;
const table = document.getElementsByClassName('table')[0];
if (table) {
var rows = table.getElementsByTagName('tr');
var header = document.createElement('th');
header.textContent = 'Ответственный';
rows[0].insertBefore(header, document.querySelector(".table > thead:nth-child(1) > tr:nth-child(1) > th:nth-child(7)"));
for (var i = 1; i < rows.length; i++) { // Перебираем каждую строку
const staffid = (document.querySelector(`.table > tbody:nth-child(2) > tr:nth-child(${i}) > td:nth-child(8) > a:nth-child(1)`)).attributes[4].value;
const description = (document.querySelector(`.table > tbody:nth-child(2) > tr:nth-child(${i}) > td:nth-child(5)`));
const service = (document.querySelector(`.table > tbody:nth-child(2) > tr:nth-child(${i}) > td:nth-child(3)`));
const serviceid = +service.textContent.match(/\d+/) || 0;
const cell = document.createElement('td');
const lastCell = rows[i].querySelectorAll("td")[rows[i].querySelectorAll("td").length - 2];
rows[i].insertBefore(cell, lastCell);
if (staffid) {
const link = document.createElement('a');
link.href = '/admin/users/edit/' + staffid;
link.textContent = staffnames[staffid];
link.title = 'ID: ' + staffid;
cell.appendChild(link);
} else cell.textContent = 'Еще не определен';
const price = priceListDesigns[serviceid];
if (price != undefined) service.innerHTML += ' <span style="color: green">[' + price + 'р]</span>';
description.innerHTML = description.textContent.replace(/((https?:\/\/)?(www\.)?[^\s]+\.\w{2,}(\/\S*)?)/g, (url) => `<a href="${url}" target="_blank">${url}</a>`);
}
}
h3.innerHTML = `Все заказы дизайна | Заработано <span style="color: green" title="${getCookie('salary') || 0}">${getCookie('salary') || 0}</span> руб.`;
fetch('https://zeerp.online/get_salary?userid=' + userid)
.then(response => {
if (!response.ok) {
throw new Error('Ошибка HTTP: ' + response.status);
}
return response.json(); // Извлекаем JSON из ответа (может быть и другой формат данных)
})
.then(data => {
h3.innerHTML = `Все заказы дизайна | Заработано <span style="color: green" title="${data.salary}">${data.salary}</span> руб.`;
createCookie('salary', data.salary, 30);
})
.catch(error => {
h3.innerHTML = 'Все заказы дизайна | <span style="color: red">Неизвестная ошибка</span>';
console.error('Произошла ошибка:', error);
});
}
/********################################################*******/
/********# #*******/
/********# ТИКЕТЫ #*******/
/********# #*******/
/********################################################*******/
else if (link.includes('https://game.maze-host.ru/admin/tickets/view/')) {
const selector = document.querySelector('div.form-group:nth-child(1)');
/* if (selector && !selector.innerHTML.includes('<div style="position: absolute; ')) {
let links = `<a onclick="copyToClipboard('https://wiki.maze-host.ru/r/how-to-set-samp-admin-permission')">Как выдать админ. права</a>`;
document.querySelector('div.form-group:nth-child(1)').innerHTML = '<div style="position: absolute; left: 20px;">' + links + '</div>' + selector.innerHTML;
}
*/
}
/********################################################*******/
/********# #*******/
/********# ПАНЕЛЬ УПРАВЛЕНИЯ СЕРВЕРОМ [СЕРВЕР] #*******/
/********# #*******/
/********################################################*******/
else if (link.includes('https://game.maze-host.ru/admin/servers/control/index/')) {
const [address, slots] = document.querySelectorAll('.table > tbody:nth-child(1) > tr:nth-child(6) > td:nth-child(2), .table > tbody:nth-child(1) > tr:nth-child(7) > td:nth-child(2)');
if (address && !address.innerHTML.includes('copyToClipboard')) {
const [ip, port] = address.innerHTML.trim().split(':');
address.innerHTML += `<div onclick='copyToClipboard("${ip}:${port}")' class="button1 small btn-purple" style="cursor:pointer; float:right;"><i class="glyph-icon icon-copy"></i></div>`;
}
if (slots && !slots.innerHTML.includes('copyToClipboard')) {
slots.innerHTML += `<div onclick='copyToClipboard("maxplayers ${slots.innerText}")' class="button1 small btn-purple" style="cursor:pointer; float:right;"><i class="glyph-icon icon-copy"></i></div>`;
}
}
/********################################################*******/
/********# #*******/
/********# ПАНЕЛЬ УПРАВЛЕНИЯ СЕРВЕРОМ [FTP] #*******/
/********# #*******/
/********################################################*******/
else if (link.includes('https://game.maze-host.ru/admin/servers/control/ftp/')) {
const cells = document.querySelectorAll('.table > tbody:nth-child(1) > tr > td:nth-child(2)');
if (cells.length != 5) return 1;
for (const cell of cells) {
if (cell && !cell.innerHTML.includes('copyToClipboard'))
cell.innerHTML += `<div onclick='copyToClipboard("${cell.textContent.trim()}")' class="button1 small btn-purple" style="cursor:pointer; float:right;"><i class="glyph-icon icon-copy"></i></div>`;
}
}
/********################################################*******/
/********# #*******/
/********# ПАНЕЛЬ УПРАВЛЕНИЯ СЕРВЕРОМ [MYSQL] #*******/
/********# #*******/
/********################################################*******/
else if (link.includes('https://game.maze-host.ru/admin/servers/control/mysql/')) {
const cells = document.querySelectorAll('.table > tbody:nth-child(1) > tr > td:nth-child(2)');
if (cells.length != 6) return 1;
for (const cell of cells) {
if (cell && !cell.innerHTML.includes('copyToClipboard') && cell.innerText != 'База не создана') {
cell.innerHTML += `<div onclick='copyToClipboard("${cell.textContent.trim()}")' class="button1 small btn-purple" style="cursor:pointer; float:right;"><i class="glyph-icon icon-copy"></i></div>`;
}
}
const block = document.querySelector('div.form-group:nth-child(2) > div:nth-child(1)');
if (cells[5].textContent.trim() != 'База не создана') {
if (block && !block.innerHTML.includes('deleteTables')) {
const params = `'${cells[1].textContent.trim()}', '${cells[3].textContent.trim()}', '${cells[4].textContent.trim()}', '${cells[5].textContent.trim()}'`;
block.innerHTML += '<br><br><button type="button" class="button1 danger" data-hover="Удалить таблицы" onclick="deleteTables(' + params + ')">Удалить таблицы</button>';
}
if (block && !block.innerHTML.includes('openFileInput')) {
block.innerHTML += `<br>
<input type="file" id="fileInput" style="display: none">
<button type="button" class="button1 success" data-hover="Загрузить .sql" onclick="openFileInput()">Загрузить .sql</button>`;
document.getElementById('fileInput').addEventListener('change', (event) => {
const file = event.target.files[0];
if (!file) return 1;
if (!file.name.endsWith(".sql") && !file.name.endsWith(".txt")) return sendError('Некорректное расширение файла');
if (file.size > 100_000_000) return sendSuccess('Размер файла не должен превышать 100 МБ');
const reader = new FileReader();
reader.readAsText(file);
reader.onload = function (e) { // Читаем файл
const body = {
host: cells[1].textContent.trim(),
user: cells[3].textContent.trim(),
database: cells[4].textContent.trim(),
password: cells[5].textContent.trim(),
query: e.target.result // Содержимое файла
}
fetch('https://zeerp.online/sql_upload_database', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
})
.then(response => {
if (!response.ok) throw new Error('Ошибка HTTP: ' + response.status);
return response.json();
})
.then(data => {
if (!data.status) throw new Error("Некорректный ответ сервера");
if (data.status == 'error') throw new Error(data.response);
swal("Успех", data.response, "success");
})
.catch(error => {
swal("Ошибка", error.message, "error");
console.error('Произошла ошибка:', error.message);
});
}
})
}
}
}
}
_MazeCustomScript();
setInterval(() => _MazeCustomScript(), 100);
})();Editor is loading...
Leave a Comment