Форум Кураторов CHEREPOVETS by E.Sailauov

Автоответы для RP Биографий, RP Ситуаций и Неофициальных RP организаций на форуме Black Russia

// ==UserScript==
// @name         Форум Кураторов CHEREPOVETS by E.Sailauov
// @namespace    https://forum.blackrussia.online/
// @version      1.0.0
// @description  Автоответы для RP Биографий, RP Ситуаций и Неофициальных RP организаций на форуме Black Russia
// @author       E.Sailauov
// @match        https://forum.blackrussia.online/threads/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const UNACCEPT_PREFIX = 4;   // отказано
    const ACCEPT_PREFIX = 8;     // одобрено
    const REVIEW_PREFIX = 9;     // на рассмотрение
    const CLOSE_PREFIX = 7;      // закрыто

    const photoURL = "https://i.postimg.cc/2SXx0xNt/RLwzo.png"; // одно фото для всех ответов

    // Приветствие и вставка ника
    function getGreeting(nick) {
        return `[CENTER][url=https://postimages.org/][img]${photoURL}[/img][/url][/CENTER]
[CENTER][COLOR=rgb(0,127,255)][FONT=times new roman][SIZE=4][I][ICODE]Здравствуйте, уважаемый ${nick}[/ICODE][/I][/SIZE][/FONT][/COLOR][/CENTER]<br><br>`;
    }

    // Мотивационные цитаты для всех ответов
    const quotes = [
        "«Терпение и упорство всегда вознаграждаются — играйте с умом и честностью!»",
        "«Каждое RP событие — это шанс показать свой талант и креативность в Black Russia»",
        "«Стремление к совершенству в RP биографии делает игру ярче и интереснее»",
        "«Помните: уважение к правилам форума — путь к признанию и успеху»"
    ];

    function getRandomQuote() {
        return `[CENTER][I][COLOR=rgb(0,127,255)][FONT=times new roman][SIZE=3]${quotes[Math.floor(Math.random()*quotes.length)]}[/SIZE][/FONT][/COLOR][/I][/CENTER]`;
    }

    // Шаблоны ответов
    const templates = {
        "Одобрено": {
            prefix: ACCEPT_PREFIX,
            color: "#00cc44",
            content: "[I][CENTER][COLOR=rgb(152,251,152)][FONT=times new roman][SIZE=4]Ваша RolePlay заявка одобрена[/SIZE][/FONT][/COLOR][/CENTER][/I]"
        },
        "Отказано": {
            prefix: UNACCEPT_PREFIX,
            color: "#ff3300",
            content: "[I][CENTER][COLOR=rgb(255,0,0)][FONT=times new roman][SIZE=4]Ваша заявка отклонена. Обратите внимание на примечания и исправьте ошибки[/SIZE][/FONT][/COLOR][/CENTER][/I]"
        },
        "На рассмотрение": {
            prefix: REVIEW_PREFIX,
            color: "#ff9900",
            content: "[I][CENTER][COLOR=rgb(255,165,0)][FONT=times new roman][SIZE=4]Ваша заявка находится на рассмотрении[/SIZE][/FONT][/COLOR][/CENTER][/I]"
        },
        "Закрыто": {
            prefix: CLOSE_PREFIX,
            color: "#999999",
            content: "[I][CENTER][COLOR=rgb(128,128,128)][FONT=times new roman][SIZE=4]Тема закрыта[/SIZE][/FONT][/COLOR][/CENTER][/I]"
        }
    };

    // Отказы для RP Биографии
    const rpBioDenies = [
        "От 3-го лица: RP биография должна быть написана от первого лица",
        "Нейросеть: RP биография должна быть написана игроком вручную",
        "Не по теме/флуд: Тема не соответствует разделу, нельзя писать не по теме",
        "Мало информации: Добавьте больше подробностей о персонаже",
        "Суперспособности: Персонаж не должен обладать сверхспособностями",
        "Скопирована: RP биография не должна копировать других игроков",
        "NonRP NickName: Используется некорректный ник",
        "Дата рождения не совпадает с возрастом",
        "Семья не полностью",
        "Грамматические/пунктуационные ошибки"
    ];

    // Отказы для RP Ситуаций
    const rpSituationsDenies = [
        "Не по правилам: RP ситуация нарушает правила форума",
        "Сверхъестественное: RP ситуация не должна включать сверхъестественные события",
        "Нет доказательств: Требуются скриншоты/видео",
        "Мало информации: RP ситуация описана слишком кратко",
        "Копирование: RP ситуация скопирована у другого игрока"
    ];

    // Отказы для Неофициальных RP организаций
    const rpOrgDenies = [
        "Не по правилам: Организация нарушает правила форума",
        "Мало участников: Минимум 3 человека",
        "Мало информации: Описание организации слишком краткое",
        "Копирование: Организация скопирована с другой",
        "Гос. фракция: Нельзя создавать организации в форме государственных фракций",
        "Нет фото/видео: Требуется медиа материалы"
    ];

    // Создаем контейнер кнопок
    const container = document.createElement("div");
    container.style.position = "fixed";
    container.style.top = "100px";
    container.style.right = "20px";
    container.style.width = "200px";
    container.style.zIndex = "9999";
    container.style.backgroundColor = "#222";
    container.style.padding = "10px";
    container.style.borderRadius = "10px";
    container.style.boxShadow = "0 0 10px rgba(0,0,0,0.5)";
    document.body.appendChild(container);

    // Функция для вставки ответа
    function insertResponse(template, denies=[]) {
        const nick = prompt("Введите ник игрока:");
        if(!nick) return;
        let content = getGreeting(nick) + template.content + "<br><br>";
        if(denies.length > 0) {
            content += "<LIST>";
            denies.forEach(d => {
                content += `[*][LEFT][FONT=book antiqua][COLOR=rgb(255,0,0)][SIZE=4]Примечание: [/SIZE][/COLOR][COLOR=rgb(0,127,255)][SIZE=4]${d}[/SIZE][/COLOR][/FONT][/LEFT]<br>`;
            });
            content += "</LIST><br>";
        }
        content += getRandomQuote();
        // Вставка в текстовое поле ответа (предположим id="message")
        const textarea = document.querySelector("#message");
        if(textarea) textarea.value = content;
        // Смена префикса темы (имитация)
        console.log(`Префикс темы изменен на: ${template.prefix}`);
    }

    // Создаем кнопки
    function createButton(title, color, func) {
        const btn = document.createElement("button");
        btn.textContent = title;
        btn.style.width = "100%";
        btn.style.marginBottom = "5px";
        btn.style.backgroundColor = color;
        btn.style.color = "#fff";
        btn.style.border = "none";
        btn.style.padding = "5px";
        btn.style.borderRadius = "5px";
        btn.style.cursor = "pointer";
        btn.onclick = func;
        container.appendChild(btn);
    }

    // Кнопки главного меню
    createButton("На рассмотрение", "#ff9900", () => insertResponse(templates["На рассмотрение"]));
    createButton("Отказано", "#ff3300", () => insertResponse(templates["Отказано"], rpBioDenies));
    createButton("Одобрено", "#00cc44", () => insertResponse(templates["Одобрено"]));
    createButton("Закрыто", "#999999", () => insertResponse(templates["Закрыто"]));
    
    // Кнопка Ответы с подменю
    const answersBtn = document.createElement("button");
    answersBtn.textContent = "Ответы ▼";
    answersBtn.style.width = "100%";
    answersBtn.style.marginBottom = "5px";
    answersBtn.style.backgroundColor = "#3399ff";
    answersBtn.style.color = "#fff";
    answersBtn.style.border = "none";
    answersBtn.style.padding = "5px";
    answersBtn.style.borderRadius = "5px";
    answersBtn.style.cursor = "pointer";
    container.appendChild(answersBtn);

    const subMenu = document.createElement("div");
    subMenu.style.display = "none";
    subMenu.style.marginTop = "5px";
    container.appendChild(subMenu);

    answersBtn.onclick = () => subMenu.style.display = subMenu.style.display === "none" ? "block" : "none";

    createButton("———RP БИОГРАФИЯ———", "#ff6600", () => insertResponse(templates["Отказано"], rpBioDenies));
    createButton("———RP СИТУАЦИИ———", "#ff6600", () => insertResponse(templates["Отказано"], rpSituationsDenies));
    createButton("———Неофициальные RP организации———", "#ff6600", () => insertResponse(templates["Отказано"], rpOrgDenies));
})();