Кураторы форума | CHEREPOVETS - RP Биографии

Панель кнопок для RP биографий: Одобрено, На доработку, 10 отказов + Не по форме. BB-код с приветствием и пожеланием на сервере 89 Cherepovets.

// ==UserScript==
// @name         Кураторы форума | CHEREPOVETS - RP Биографии
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Панель кнопок для RP биографий: Одобрено, На доработку, 10 отказов + Не по форме. BB-код с приветствием и пожеланием на сервере 89 Cherepovets.
// @author       Persona_Capone (обновлено)
// @match        https://forum.blackrussia.online/threads/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    const buttons = [
        { title: 'Одобрено', type: 'accept', reason: '', color: '#00cc44' },
        { title: 'На доработку', type: 'revision', reason: 'Нужно исправить орфографию, добавить фото или недостающую информацию.', color: '#ff9900' },
        { title: 'Не по форме', type: 'deny', reason: 'Неверная структура RP биографии. Используйте форму: Имя и фамилия персонажа, Пол, Возраст, Национальность, Образование, Описание внешности, Характер, Детство, Настоящее, Итог.', color: '#ff3300' },
        { title: 'Отказ — Заголовок', type: 'deny', reason: 'Заголовок RP биографии должен быть: Биография | Nick_Name.', color: '#ff3300' },
        { title: 'Отказ — Сверхспособности', type: 'deny', reason: 'Биография содержит нереалистичные элементы (сверхспособности, нереальные достижения).', color: '#ff3300' },
        { title: 'Отказ — Существующий человек', type: 'deny', reason: 'Запрещено составлять биографии существующих людей (например, Бред Питт, Аль Капоне).', color: '#ff3300' },
        { title: 'Отказ — Плагиат', type: 'deny', reason: 'Обнаружено копирование чужой RP биографии.', color: '#ff3300' },
        { title: 'Отказ — Грамматика/Орфография', type: 'deny', reason: 'Биография содержит грамматические или орфографические ошибки.', color: '#ff3300' },
        { title: 'Отказ — Шрифт/Размер', type: 'deny', reason: 'Использован неправильный шрифт или размер текста (должен быть Times New Roman или Verdana, минимум 15).', color: '#ff3300' },
        { title: 'Отказ — Нет фото/материалов', type: 'deny', reason: 'В биографии отсутствуют фото или материалы, относящиеся к персонажу.', color: '#ff3300' },
        { title: 'Отказ — Пропаганда нарушений', type: 'deny', reason: 'Биография содержит элементы, позволяющие нарушать правила сервера.', color: '#ff3300' },
        { title: 'Отказ — Неверный объём', type: 'deny', reason: 'Минимальный объём RP биографии — 200 слов, максимальный — 600.', color: '#ff3300' },
        { title: 'Отказ — Логические противоречия', type: 'deny', reason: 'В биографии обнаружены логические противоречия (например, возраст персонажа не соответствует достижениям).', color: '#ff3300' }
    ];

    function getThreadData() {
        const usernameEl = document.querySelector('a.username');
        const authorID = usernameEl ? usernameEl.getAttribute('data-user-id') || 0 : 0;
        const authorName = usernameEl ? usernameEl.textContent.trim() : 'Игрок';
        const hours = new Date().getHours();
        const greeting = (hours > 4 && hours <= 11) ? 'Доброе утро' : (hours <= 15 ? 'Добрый день' : (hours <= 21 ? 'Добрый вечер' : 'Доброй ночи'));
        return { user: { id: authorID, name: authorName, mention: '[USER=' + authorID + ']' + authorName + '[/USER]' }, greeting };
    }

    function insertBBCode(template) {
        const editor = document.querySelector('div.fr-element.fr-view');
        if (editor) {
            editor.innerHTML = template;
        } else {
            prompt('Скопируйте BB-код и вставьте в ответ на форуме:', template);
        }
    }

    function createButtonPanel() {
        const panel = document.createElement('div');
        panel.style.cssText = 'position:fixed;left:50%;top:10%;transform:translateX(-50%);background:#222;padding:12px;border-radius:8px;z-index:99999;color:#fff;max-height:80vh;overflow:auto;';

        buttons.forEach((b, i) => {
            const btn = document.createElement('button');
            btn.textContent = b.title;
            btn.style.cssText = `background:${b.color};color:#fff;border:none;padding:6px 10px;margin:4px;border-radius:4px;cursor:pointer;`;
            btn.addEventListener('click', () => {
                const data = getThreadData();
                const bb = `[B][COLOR=${b.color}]${b.title}[/COLOR][/B]\n${b.reason ? b.reason + '\n' : ''}${data.greeting}, ${data.user.mention}!\n\nПриятной игры на сервере Black Russia, 89 Cherepovets.`;
                insertBBCode(bb);
            });
            panel.appendChild(btn);
        });

        const closeBtn = document.createElement('button');
        closeBtn.textContent = 'Закрыть';
        closeBtn.style.cssText = 'background:#555;color:#fff;border:none;padding:6px 10px;margin:4px;border-radius:4px;cursor:pointer;';
        closeBtn.addEventListener('click', () => panel.remove());
        panel.appendChild(closeBtn);

        document.body.appendChild(panel);
    }

    function addMainButton() {
        const replyBtn = document.querySelector('.button--icon--reply');
        if (!replyBtn) return;
        const btn = document.createElement('button');
        btn.textContent = 'RP Ответы';
        btn.style.cssText = 'border-radius:0;border-color:teal;border-style:dashed solid;margin-right:7px;margin-bottom:10px;background:teal;color:#fff;padding:6px 10px;cursor:pointer;';
        replyBtn.parentNode.insertBefore(btn, replyBtn);
        btn.addEventListener('click', createButtonPanel);
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', addMainButton);
    } else {
        addMainButton();
    }
})();