Greasy Fork

Greasy Fork is available in English.

Bless Russia Forum Helper

Помощник для модерации на форуме Bless Russia

当前为 2025-10-10 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/552114/1674942/Bless%20Russia%20Forum%20Helper.js

// ==UserScript==
// @name         Bless Russia Forum Helper
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Помощник для модерации на форуме Bless Russia
// @author       YourName
// @match        https://forum.blessrussia.online/index.php
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_addStyle
// ==/UserScript==

(function() {
    'use strict';

    // Добавляем стили
    GM_addStyle(`
        .brf-container {
            background: #1a237e;
            border: 2px solid #fff;
            border-radius: 0px;
            padding: 15px;
            margin: 15px 0;
            color: white;
            font-family: 'Arial', sans-serif;
        }
        
        .brf-header {
            text-align: center;
            font-size: 20px;
            font-weight: normal;
            margin-bottom: 15px;
            color: #fff;
            border-bottom: 1px solid #fff;
            padding-bottom: 10px;
        }
        
        .brf-buttons-grid {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 8px;
            margin-bottom: 15px;
        }
        
        .brf-btn {
            background: #283593;
            border: 1px solid #fff;
            border-radius: 0px;
            color: white;
            padding: 10px;
            font-size: 13px;
            cursor: pointer;
            transition: all 0.2s ease;
            text-align: center;
        }
        
        .brf-btn:hover {
            background: #3949ab;
            transform: translateY(-1px);
        }
        
        .brf-section {
            background: rgba(255,255,255,0.1);
            border-radius: 0px;
            padding: 12px;
            margin: 12px 0;
            border-left: 3px solid #5c6bc0;
        }
        
        .brf-section-title {
            font-size: 16px;
            font-weight: bold;
            margin-bottom: 8px;
            color: #e8eaf6;
        }
        
        .brf-sub-buttons {
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            gap: 6px;
            margin-top: 8px;
        }
        
        .brf-sub-btn {
            background: #c62828;
            border: 1px solid #fff;
            border-radius: 0px;
            color: white;
            padding: 6px;
            font-size: 11px;
            cursor: pointer;
            transition: all 0.2s ease;
        }
        
        .brf-sub-btn:hover {
            background: #d32f2f;
            transform: translateY(-1px);
        }
        
        .brf-templates {
            background: rgba(255,255,255,0.05);
            border-radius: 0px;
            padding: 8px;
            margin: 8px 0;
        }
        
        .brf-template-btn {
            background: #2e7d32;
            border: 1px solid #fff;
            border-radius: 0px;
            color: white;
            padding: 6px 10px;
            margin: 3px;
            font-size: 11px;
            cursor: pointer;
            transition: all 0.2s ease;
        }
        
        .brf-template-btn:hover {
            background: #388e3c;
            transform: translateY(-1px);
        }
        
        .brf-prefix-badge {
            display: inline-block;
            padding: 2px 6px;
            border-radius: 0px;
            font-size: 9px;
            font-weight: bold;
            margin-left: 5px;
            border: 1px solid #fff;
        }
        
        .brf-approved { background: #1b5e20; }
        .brf-denied { background: #b71c1c; }
        .brf-pending { background: #f57f17; color: #fff; }
        .brf-important { background: #6a1b9a; }
        .brf-closed { background: #37474f; }
        
        .brf-rules-block {
            background: rgba(0,0,0,0.3);
            border: 1px solid #5c6bc0;
            padding: 10px;
            margin: 8px 0;
            font-size: 11px;
            line-height: 1.3;
        }
        
        .brf-rules-title {
            font-weight: bold;
            color: #ffeb3b;
            margin-bottom: 5px;
        }
    `);

    // Функция создания основного интерфейса
    function createMainInterface() {
        const editor = document.querySelector('textarea[name="message"]');
        if (!editor) return;
        
        const container = document.createElement('div');
        container.className = 'brf-container';
        container.innerHTML = `
            <div class="brf-header">Bless Russia Forum Helper</div>
            
            <div class="brf-section">
                <div class="brf-section-title">Префиксы темы</div>
                <div class="brf-buttons-grid">
                    <button class="brf-btn" data-prefix="На рассмотрении">На рассмотрении</button>
                    <button class="brf-btn" data-prefix="Спец Адм">Спец Адм</button>
                    <button class="brf-btn" data-prefix="Команде проекта">Команде проекта</button>
                    <button class="brf-btn" data-prefix="Главному администратору">Главному администратору</button>
                    <button class="brf-btn" data-prefix="Отказано">Отказано</button>
                    <button class="brf-btn" data-prefix="Важно">Важно</button>
                    <button class="brf-btn" data-prefix="Закрыто">Закрыто</button>
                </div>
            </div>
            
            <div class="brf-section">
                <div class="brf-section-title">Ответы на жалобы</div>
                <div class="brf-sub-buttons">
                    <button class="brf-sub-btn" data-template="complaint_pending">Ваша жалоба на рассмотрении</button>
                    <button class="brf-sub-btn" data-template="complaint_rules">Правила подачи жалоб</button>
                    <button class="brf-sub-btn" data-template="complaint_approved">Жалоба одобрена</button>
                    <button class="brf-sub-btn" data-template="complaint_denied">Жалоба отклонена</button>
                    <button class="brf-sub-btn" data-template="complaint_timeout">Истек срок подачи</button>
                    <button class="brf-sub-btn" data-template="complaint_evidence">Недостаточно доказательств</button>
                </div>
                
                <div class="brf-rules-block">
                    <div class="brf-rules-title">Правила жалоб:</div>
                    • Срок подачи - 72 часа с нарушения<br>
                    • Обязательно /time в доказательствах<br>
                    • Запрещены жалобы от 3-го лица<br>
                    • Доказательства на разрешенных хостингах
                </div>
            </div>
            
            <div class="brf-section">
                <div class="brf-section-title">Ответы на биографии</div>
                <div class="brf-sub-buttons">
                    <button class="brf-sub-btn" data-template="bio_approved">Биография одобрена</button>
                    <button class="brf-sub-btn" data-template="bio_denied">Биография отклонена</button>
                    <button class="brf-sub-btn" data-template="bio_rules">Правила составления биографий</button>
                    <button class="brf-sub-btn" data-template="bio_correction">Требуются исправления</button>
                </div>
                
                <div class="brf-rules-block">
                    <div class="brf-rules-title">Правила биографий:</div>
                    • Заголовок: "Биография гражданина [Имя Фамилия]"<br>
                    • Имя и фамилия на русском языке<br>
                    • Запрещены nRP никнеймы и PG<br>
                    • Срок рассмотрения - 24 часа
                </div>
            </div>
            
            <div class="brf-section">
                <div class="brf-section-title">Быстрые ответы</div>
                <div class="brf-templates">
                    <button class="brf-template-btn" data-template="warning">Предупреждение</button>
                    <button class="brf-template-btn" data-template="ban_1d">Бан 1 день</button>
                    <button class="brf-template-btn" data-template="ban_7d">Бан 7 дней</button>
                    <button class="brf-template-btn" data-template="ban_30d">Бан 30 дней</button>
                    <button class="brf-template-btn" data-template="permaban">Пермабан</button>
                    <button class="brf-template-btn" data-template="jail_30">Jail 30 мин</button>
                    <button class="brf-template-btn" data-template="jail_60">Jail 60 мин</button>
                    <button class="brf-template-btn" data-template="mute_30">Mute 30 мин</button>
                </div>
            </div>
        `;
        
        editor.parentNode.insertBefore(container, editor);
        
        // Обработчики для кнопок префиксов
        container.querySelectorAll('[data-prefix]').forEach(btn => {
            btn.addEventListener('click', () => {
                const prefix = btn.getAttribute('data-prefix');
                applyPrefix(prefix);
            });
        });
        
        // Обработчики для шаблонов
        container.querySelectorAll('[data-template]').forEach(btn => {
            btn.addEventListener('click', () => {
                const template = btn.getAttribute('data-template');
                applyTemplate(template);
            });
        });
    }

    // Функция применения префикса
    function applyPrefix(prefix) {
        const subjectField = document.querySelector('input[name="subject"]');
        if (subjectField) {
            subjectField.value = `[${prefix}] ${subjectField.value}`;
        }
    }

    // Функция применения шаблона
    function applyTemplate(template) {
        const editor = document.querySelector('textarea[name="message"]');
        if (!editor) return;
        
        const templates = {
            complaint_pending: `**Ваша жалоба взята на рассмотрение**\n\nУважаемый игрок, ваша жалоба была принята и взята на рассмотрение администрацией проекта. Срок рассмотрения жалобы составляет 2 рабочих дня.\n\n*С уважением, Администрация проекта Bless Russia*`,

            complaint_rules: `**Правила подачи жалоб**\n\nУважаемый игрок, обращаем ваше внимание на правила подачи жалоб:\n\n• Срок подачи жалобы - 72 часа с момента нарушения\n• Обязательно указание /time в доказательствах\n• Запрещена подача жалоб от третьего лица\n• Доказательства должны быть загружены на разрешенные хостинги\n• Видеодоказательства должны быть в оригинальном виде\n\nПожалуйста, убедитесь, что ваша жалоба соответствует всем требованиям.`,

            complaint_approved: `**Жалоба одобрена**\n\nПо результатам рассмотрения вашей жалобы было выявлено нарушение правил проекта. К нарушителю применены соответствующие санкции.\n\n*С уважением, Администрация проекта Bless Russia*`,

            complaint_denied: `**Жалоба отклонена**\n\nВаша жалоба была отклонена по следующим причинам:\n• Недостаточно доказательств нарушения\n• Нарушение не было выявлено\n• Несоответствие требованиям к оформлению жалобы\n\n*С уважением, Администрация проекта Bless Russia*`,

            complaint_timeout: `**Истек срок подачи жалобы**\n\nУважаемый игрок, срок подачи жалобы (72 часа с момента нарушения) истек. В соответствии с правилами проекта, жалоба не может быть рассмотрена.\n\n*С уважением, Администрация проекта Bless Russia*`,

            complaint_evidence: `**Недостаточно доказательств**\n\nДля рассмотрения вашей жалобы требуются дополнительные доказательства:\n• Видеодоказательство с тайм-кодами\n• Скриншоты высокого качества\n• Подтверждение времени нарушения (/time)\n\nПожалуйста, предоставьте недостающие доказательства.`,

            bio_approved: `**Биография одобрена**\n\nВаша Role Play биография была успешно проверена и одобрена. Приятной игры на проекте!\n\n*С уважением, Администрация проекта Bless Russia*`,

            bio_denied: `**Биография отклонена**\n\nВаша биография была отклонена по причине:\n• Несоответствие форме заполнения\n• Нарушение правил составления биографий\n• Наличие элементов Power Gaming\n• Копирование чужой биографии\n\nПожалуйста, исправьте указанные недочеты и подайте биографию заново.`,

            bio_rules: `**Правила составления биографий**\n\nОсновные требования:\n• Заголовок: "Биография гражданина [Имя Фамилия]"\n• Имя и фамилия на русском языке\n• Запрещены nRP никнеймы и PG элементы\n• Запрещено копирование биографий\n• Срок рассмотрения - 24 часа\n\nФорма заполнения включает основную информацию и историю жизни персонажа.`,

            bio_correction: `**Требуются исправления**\n\nВ вашей биографии необходимо исправить следующие моменты:\n• [Указать конкретные пункты для исправления]\n• [Указать конкретные пункты для исправления]\n\nПосле внесения исправлений биография будет пересмотрена.`,

            warning: `**Устное замечание**\n\nВам выдано устное замечание за нарушение правил проекта. Обратите внимание на свое поведение в дальнейшем.`,

            ban_1d: `**Блокировка 1 день**\n\nВаш игровой аккаунт заблокирован на 1 день за нарушение правил проекта.`,

            ban_7d: `**Блокировка 7 дней**\n\nВаш игровой аккаунт заблокирован на 7 дней за нарушение правил проекта.`,

            ban_30d: `**Блокировка 30 дней**\n\nВаш игровой аккаунт заблокирован на 30 дней за нарушение правил проекта.`,

            permaban: `**Перманентная блокировка**\n\nВаш игровой аккаунт заблокирован навсегда за грубое нарушение правил проекта.`,

            jail_30: `**Jail 30 минут**\n\nВы изолированы на 30 минут за нарушение правил Role Play процесса.`,

            jail_60: `**Jail 60 минут**\n\nВы изолированы на 60 минут за нарушение правил Role Play процесса.`,

            mute_30: `**Mute 30 минут**\n\nВам заблокирован доступ к чатам на 30 минут за нарушение правил общения.`
        };

        if (templates[template]) {
            editor.value = templates[template];
            // Прокрутка к редактору
            editor.scrollIntoView({ behavior: 'smooth' });
            editor.focus();
        }
    }

    // Инициализация при загрузке страницы
    function init() {
        // Проверяем, находимся ли мы на странице создания/ответа в теме
        if (window.location.href.includes('posting.php') || 
            document.querySelector('textarea[name="message"]')) {
            createMainInterface();
        }
        
        // Добавляем бейджи к существующим префиксам в списке тем
        addPrefixBadges();
    }

    // Функция добавления бейджей к префиксам
    function addPrefixBadges() {
        const prefixes = {
            'На рассмотрении': 'brf-pending',
            'Спец Адм': 'brf-important',
            'Команде проекта': 'brf-important',
            'Главному администратору': 'brf-important',
            'Отказано': 'brf-denied',
            'Важно': 'brf-important',
            'Закрыто': 'brf-closed',
            'Одобрено': 'brf-approved'
        };
        
        Object.keys(prefixes).forEach(prefix => {
            const elements = document.querySelectorAll(`a:contains("[${prefix}]")`);
            elements.forEach(el => {
                const badge = document.createElement('span');
                badge.className = `brf-prefix-badge ${prefixes[prefix]}`;
                badge.textContent = prefix;
                el.parentNode.insertBefore(badge, el.nextSibling);
            });
        });
    }

    // Запуск скрипта
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
})();