// ==UserScript==
// @name Росписи в профиле (user editable nickname + 55 greetings)
// @namespace https://forum.blackrussia.online/
// @version 5.0
// @description 55 росписей, рандом без повторов, легко менять ник автора в одном месте
// @match https://forum.blackrussia.online/members/*
// @run-at document-idle
// @grant none
// ==/UserScript==
/****************************************************************************************************
* ВАЖНО: ВПИШИ СВОЙ НИК ЗДЕСЬ МЕСТО ЗНАЧЕНИЯ "YOUR_NICK" (без ковычек) *
* Пример: const MY_NICKNAME = "Tim_Venera"; *
* После изменения этого значения — во всех подписьях и местах, где раньше стоял Tim_Venera, будет
* подставлен указанный здесь ник. *
****************************************************************************************************/
const MY_NICKNAME = "YOYM_MLLL";
(function () {
"use strict";
function getProfileName() {
var selectors = ["h1.username", ".memberHeader-name", ".p-title-value", ".username", "h1"];
for (var i = 0; i < selectors.length; i++) {
var el = document.querySelector(selectors[i]);
if (el) {
var nodes = el.childNodes;
for (var k = 0; k < nodes.length; k++) {
var n = nodes[k];
if (n.nodeType === Node.TEXT_NODE) {
var txt = n.textContent.trim();
if (txt.length) {
txt = txt.replace(/\s*(Предыдущие\s+имена[\s\S]*|Загрузка[\s\S]*|Previous\s+names[\s\S]*|Loading[\s\S]*)$/i, "").trim();
return txt || null;
}
}
}
var sub = el.querySelector("a, span, strong");
if (sub && sub.textContent) {
var txt2 = sub.textContent.trim();
txt2 = txt2.replace(/\s*(Предыдущие\s+имена[\s\S]*|Загрузка[\s\S]*|Previous\s+names[\s\S]*|Loading[\s\S]*)$/i, "").trim();
if (txt2.length) return txt2;
}
}
}
var m = location.pathname.match(/\/members\/([^\/]+)/i);
if (m && m[1]) {
var fromUrl = decodeURIComponent(m[1]).split(".")[0].replace(/-/g, " ").trim();
fromUrl = fromUrl.replace(/\s*(Предыдущие\s+имена[\s\S]*|Загрузка[\s\S]*|Previous\s+names[\s\S]*|Loading[\s\S]*)$/i, "").trim();
if (fromUrl.length) return fromUrl;
}
return "Игрок";
}
var randomGreetings = [
'[CENTER][B][COLOR=red]Привет, ${name}! 🙂[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=blue]Пусть каждый день приносит маленькие победы и большое настроение![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=purple]Здравствуй, ${name}! ✨[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=orange]Дерзай, мечтай и делай — и результат не заставит себя ждать.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=green]Хэй, ${name}! 👋[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=teal]Улыбка — твоя лучшая броня. Носи её чаще![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=orange]Привет, ${name}! 🔥[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=cyan]Сегодня отличный день, чтобы начать что-то крутое. Вперёд![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=blue]Добро пожаловать, ${name}! 🌟[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=red]Пусть в жизни будет больше искренних людей и ярких моментов.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=crimson]Привет, ${name}! 💫[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=lime]Маленькие шаги каждый день приводят к большим результатам.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=navy]Здарова, ${name}! 😎[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=orange]Пусть твоя энергия притягивает возможности и людей![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=teal]Привет, ${name}! 🌈[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=purple]Ставь большие цели и сними с них маску «невозможно».[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=darkgreen]Хай, ${name}! ✌️[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=skyblue]Твоя улыбка — это маленькая революция добра. Не останавливайся![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=violet]Привет, ${name}! 🌟[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]Пусть в делах будет порядок, а в душе — свобода и свет.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=coral]Здравствуй, ${name}! 😊[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=royalblue]Каждый день — шанс сделать шаг к тому, что действительно важно.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=magenta]Привет, ${name}! 💥[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=teal]Не бойся быть собой — это твоя самая сильная сторона.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=goldenrod]Приветствую, ${name}! 🌞[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=indigo]Пусть каждый проект приносит радость, а люди — поддержку.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=salmon]Хэй, ${name}! 🎉[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=darkblue]Твоя настойчивость — ключ к достижению целей. Дерзай![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=olive]Привет, ${name}! 🌿[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=maroon]Пусть рядом будут честные люди и верные друзья.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=crimson]Привет, ${name}! 💡[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=skyblue]Каждое «сегодня» — это шанс построить лучшее «завтра».[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=navy]Йо, ${name}! 🚀[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=lime]Дерзай — мир любит тех, кто действует![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=purple]Привет, ${name}! 🎵[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=orange]Пусть мелодия удачи звучит в твою пользу каждый день.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=teal]Здравствуй, ${name}! ✨[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=crimson]Иногда достаточно маленького шага, чтобы начать путь к мечте.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=royalblue]Привет, ${name}! 💫[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=green]Пусть удача будет твоим спутником, а вера — путеводной звездой.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=orchid]Хай, ${name}! 🌺[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=steelblue]Сохраняй спокойствие и двигайся к цели уверенно.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=coral]Привет, ${name}! 🌅[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=navy]Твоя доброта — это сила, которую никто не сможет отнять.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=lime]Здравствуй, ${name}! 🍀[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=purple]Ставь цели, делай шаги, празднуй прогресс.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=darkgreen]Привет, ${name}! 🌲[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]Пусть каждый день приносит уроки и радость роста.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=maroon]Хэй, ${name}! 🔥[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=teal]Стремись не к успеху — стремись к ценностям. Успех придёт сам.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=midnightblue]Привет, ${name}! 🌌[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=orange]Пусть новые идеи находят дорогу в действие.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=gold]Здравствуй, ${name}! ✨[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=crimson]Доверяй процессу — великие дела требуют времени.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=skyblue]Привет, ${name}! ☀️[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=purple]Каждое утро — шанс начать лучше, чем вчера.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=salmon]Хэй, ${name}! 🎈[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=darkblue]Смелость начинается с первого шага — сделай его сегодня![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=teal]Привет, ${name}! 🌊[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=goldenrod]Пусть течение жизни несёт тебя к новым открытиям.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=violet]Здравствуй, ${name}! 🌠[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=green]Ты сильнее, чем думаешь — продолжай идти![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=indigo]Привет, ${name}! 💡[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=coral]Идеи оживают через действие — начни прямо сейчас.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=limegreen]Хай, ${name}! 🌿[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=royalblue]Пусть вокруг будут те, кто верит в твои силы.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=peru]Привет, ${name}! 🌇[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=teal]Маленькие шаги ежедневно — секрет стабильного роста.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=orchid]Здравствуй, ${name}! 🌸[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=navy]Пусть в жизни будет место для радости и смеха.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=crimson]Привет, ${name}! 🔆[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=slateblue]Вызовы делают нас сильнее — принимай их с гордостью.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=navy]Хэй, ${name}! 🥇[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=lime]Отмечай прогресс — даже маленький — это победа.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=turquoise]Привет, ${name}! 🕊️[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=purple]Пусть спокойствие и ясность сопровождают твои решения.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=steelblue]Здравствуй, ${name}! ⚓[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=coral]Настойчивость и терпение творят чудеса — продолжай![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]',
'[CENTER][B][COLOR=goldenrod]Привет, ${name}! 🌄[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=indigo]Твоя история уникальна — пиши её смело и с любовью.[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]'
];
var remaining = randomGreetings.slice();
function pickAndRemoveRandom() {
if (remaining.length === 0) remaining = randomGreetings.slice();
var idx = Math.floor(Math.random() * remaining.length);
var item = remaining.splice(idx, 1)[0];
return item;
}
var buttons = [
{
title: "Роспись №1",
style: "color:#fff;background:#8e44ad;border:none;border-radius:6px;padding:6px 10px;margin:4px;cursor:pointer;",
content: "[CENTER][B][COLOR=red]Привет, ${name}![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]Подпись создана с душой[/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]"
},
{
title: "Роспись №2",
style: "color:#fff;background:#e67e22;border:none;border-radius:6px;padding:6px 10px;margin:4px;cursor:pointer;",
content: "[CENTER][B][COLOR=lime]Йо, ${name}![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=blue]Желаю ярких эмоций и удачи![/COLOR][/B][/CENTER]\n[CENTER][B][COLOR=gold]— __MY_NICK__[/COLOR][/B][/CENTER]"
},
{
title: "Только приветствие",
style: "color:#fff;background:#3498db;border:none;border-radius:6px;padding:6px 10px;margin:4px;cursor:pointer;",
content: "[CENTER][B]Привет, ${name}! 👋[/B][/CENTER]"
},
{
title: "🎲 Рандом",
style: "color:#fff;background:#27ae60;border:none;border-radius:6px;padding:6px 12px;margin:4px;cursor:pointer;",
isRandom: true
}
];
function findEditor() {
var textarea = document.querySelector('textarea[name="message"], textarea');
var editable = document.querySelector('.fr-element[contenteditable="true"], [contenteditable="true"]');
return { textarea: textarea, editable: editable };
}
function insertText(raw) {
var ref = findEditor();
var textarea = ref.textarea;
var editable = ref.editable;
if (!textarea && !editable) return;
var name = getProfileName();
var text = raw.replace(/\$\{name\}/g, name).replace(/__MY_NICK__/g, MY_NICKNAME);
if (editable) {
editable.focus();
editable.innerHTML = "";
try {
document.execCommand("insertHTML", false, text);
} catch (e) {
editable.innerText = text;
}
}
if (textarea) {
textarea.value = text;
textarea.dispatchEvent(new Event("input", { bubbles: true }));
textarea.dispatchEvent(new Event("change", { bubbles: true }));
}
var form = editable ? editable.closest("form") : textarea ? textarea.closest("form") : null;
if (form) {
var submitBtn = form.querySelector('button[type="submit"], input[type="submit"]');
if (submitBtn) setTimeout(function () { submitBtn.click(); }, 350);
}
}
function addButtons() {
var ref = findEditor();
var anchor = (ref.editable && ref.editable.parentElement) || (ref.textarea && ref.textarea.parentElement);
if (!anchor) return;
if (document.querySelector(".custom-signature-buttons")) return;
var wrap = document.createElement("div");
wrap.className = "custom-signature-buttons";
wrap.style.marginTop = "8px";
wrap.style.display = "flex";
wrap.style.flexWrap = "wrap";
buttons.forEach(function (cfg) {
var b = document.createElement("button");
b.type = "button";
b.textContent = cfg.title;
b.setAttribute("style", cfg.style);
b.addEventListener("click", function () {
if (cfg.isRandom) insertText(pickAndRemoveRandom()); else insertText(cfg.content);
});
wrap.appendChild(b);
});
anchor.appendChild(wrap);
}
var obs = new MutationObserver(function () { addButtons(); });
obs.observe(document.body, { childList: true, subtree: true });
setInterval(addButtons, 2000);
addButtons();
})();