您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Быстрые ссылки после «Модер.» + кнопка «Ответы» с шаблонами и автопрефиксами
// ==UserScript== // @name BlackRussia: быстрые ссылки + ответы (Magadan + Жалобы) // @namespace AzimutElemental // @version 3.2 // @description Быстрые ссылки после «Модер.» + кнопка «Ответы» с шаблонами и автопрефиксами // @author Azimut Elemental // @match https://forum.blackrussia.online/* // @run-at document-end // @grant GM_addStyle // @license MIT // ==/UserScript== (function () { 'use strict'; // --- БЫСТРЫЕ ССЫЛКИ --- const LINKS = [ // старые ссылки на жалобы { t: 'Жалобы на Администрацию', h: 'https://forum.blackrussia.online/forums/Жалобы-на-администрацию.3930/' }, { t: 'Жалобы на Игроков', h: 'https://forum.blackrussia.online/forums/Жалобы-на-игроков.3932/' }, { t: 'Жалобы на Лидеров', h: 'https://forum.blackrussia.online/forums/Жалобы-на-лидеров.3931/' }, { t: 'Обжалование Наказаний', h: 'https://forum.blackrussia.online/forums/Обжалование-наказаний.3933/' }, // новые твои ссылки { t: 'Антиблат СС', h: 'https://forum.blackrussia.online/threads/magadan-Анти-Блат-Старшего-Состава-Госс-ОПГ.13229820/' }, { t: 'Ежедневный Отчет', h: 'https://forum.blackrussia.online/threads/magadan-Ежедневная-отчетность-лидеров-государственных-организаций.13256886/' }, { t: 'Неактив', h: 'https://forum.blackrussia.online/threads/magadan-Заявление-на-неактив.13256991/' }, { t: 'Доп. Баллы', h: 'https://forum.blackrussia.online/threads/magadan-Заявление-на-получение-доп-баллов.13256909/' }, { t: 'Пропуск Собрания', h: 'https://forum.blackrussia.online/threads/magadan-Заявление-на-пропуск-еженедельного-собрания.12936097/' }, { t: 'Снятие Наказания', h: 'https://forum.blackrussia.online/threads/magadan-Заявление-на-снятие-наказания.12936216/' } ]; GM_addStyle(` .az-nav-item .p-navEl-link { padding: 0 10px; } .az-nav-item .p-navEl-text { white-space: nowrap; font-weight: 600; } @media (max-width: 768px){ .az-nav-item .p-navEl-link { padding: 0 8px; } .az-nav-item .p-navEl-text { font-weight: 600; } } .az-reply-btn { margin-left: 10px; } `); function getNavList() { const sels = [ '.p-nav .p-nav-scroller .p-nav-list', '.p-nav .p-nav-list', 'nav .p-nav-list' ]; for (const sel of sels) { const list = document.querySelector(sel); if (list) return list; } return null; } function findModerLi(navList) { if (!navList) return null; const items = navList.querySelectorAll('li'); for (const li of items) { const a = li.querySelector('a'); if (a && (a.textContent || '').trim().includes('Модер')) return li; } return null; } function createLi(text, href) { const li = document.createElement('li'); li.className = 'p-navEl az-nav-item'; const a = document.createElement('a'); a.className = 'p-navEl-link'; a.href = href; const span = document.createElement('span'); span.className = 'p-navEl-text'; span.textContent = text; a.appendChild(span); li.appendChild(a); return li; } function injectLinks() { const navList = getNavList(); if (!navList || navList.querySelector('.az-nav-item')) return; const moderLi = findModerLi(navList); let ref = moderLi; LINKS.map(l => createLi(l.t, l.h)).forEach(node => { if (ref) { ref.insertAdjacentElement('afterend', node); ref = node; } else { navList.appendChild(node); } }); } // --- ШАБЛОНЫ ОТВЕТОВ --- const ANSWERS = [ { text: 'На рассмотрении.\n\nЗдравствуйте!\nНа рассмотрении.', prefix: 'На рассмотрении' }, { text: 'Закрыто.\n\nДоброй ночи. Извините, но вы ошиблись разделом. Этот раздел предназначен для подачи жалоб на лидеров.\n✦✧ Отказано, Закрыто. ✧✦', prefix: 'Закрыто' }, { text: 'С лидером будет проведена необходимая работа. Доброго времени суток!', prefix: 'Закрыто' }, { text: 'Лидер будет наказан. Доброго времени суток!', prefix: 'Закрыто' }, { text: 'Одобрено.', prefix: 'Одобрено' }, { text: 'Лидер предоставил доказательства. Отказано.', prefix: 'Отказано' } ]; function injectAnswers() { const form = document.querySelector('.message-editor .fr-box'); if (!form || document.querySelector('.az-reply-btn')) return; const toolbar = form.closest('form').querySelector('.formButtonGroup'); if (!toolbar) return; const select = document.createElement('select'); select.className = 'button az-reply-btn'; const opt0 = document.createElement('option'); opt0.textContent = 'Ответы'; opt0.disabled = true; opt0.selected = true; select.appendChild(opt0); ANSWERS.forEach(a => { const opt = document.createElement('option'); opt.textContent = a.text.split(".\n")[0]; select.appendChild(opt); }); toolbar.appendChild(select); select.addEventListener('change', () => { const idx = select.selectedIndex - 1; if (idx < 0) return; const ans = ANSWERS[idx]; const textarea = form.closest('form').querySelector('textarea'); if (textarea) textarea.value = ans.text; const prefixSel = document.querySelector('select[name="prefix_id"]'); if (prefixSel) { for (const opt of prefixSel.options) { if (opt.textContent.includes(ans.prefix)) { opt.selected = true; prefixSel.dispatchEvent(new Event('change')); break; } } } }); } // запуск injectLinks(); injectAnswers(); new MutationObserver(() => { injectLinks(); injectAnswers(); }).observe(document.body, { childList: true, subtree: true }); })();