Дата: Суббота, 31.01.2026, 20:22 | Сообщение # 1 |
|
Написал: Узнаваемый
Автор темы
Мурчанн
не в сети
Сообщений: 162
Когда-то в сети я наткнулся на тему - Скрипт друзей для uCoz, который якобы добавлял друзей на сайт. Но по факту он был уже мертвый , скрипт его структура всего лишь должна была создавать записи в блоге. В настройках можно было указать максимум 50 записей на одной странице. Я переписал его с нуля создал собственную версию скрипта. Он открывается в модальном окне, автоматически создаёт записи в блоге, отправляет личные сообщения и уведомления, а также сообщает об успешной отправке сообщений, если всё прошло без ошибок.Это та самая тема: Ссылка прямая Тут он выглядит так Код
<script type="text/javascript" src="http://ucodes.ru/js/friends.ucodes_u1.1.ru.js"></script>
Просто скачайте файл, замените содержимое на мой скрипт и все.И он снова будет работать . Скрипт: Код
/* * Модуль «Друзья» для uCoz — Прокачанная версия 2026 * Исправлены баги, улучшена отправка ЛС, капча, ssid * Красивый современный дизайн окон */ (function() { 'use strict'; window.friends = window.friends || {}; const f = window.friends; f.ucodes = f.ucodes || { homepage: '/', userid: 0, _userid: 0, username: 'Гость', _username: 'Гость', avatar: 'https://bro.usite.pro/icon/orig.webp', own: 0, isuser: false, _profurl: '' }; f.message1 = () => `Пользователь [url=${f.ucodes.homepage}index/8-${f.ucodes.userid}]${f.ucodes.username}[/url] добавил Вас в друзья.\nВы также можете его добавить по [url=${f.ucodes.homepage}index/8-${f.ucodes.userid}?friend]этой ссылке[/url].`; f.message2 = () => `Пользователь [url=${f.ucodes.homepage}index/8-${f.ucodes.userid}]${f.ucodes.username}[/url] добавил Вас в друзья.`; f.invite = false; f.adnMess = ''; f.GR = 'Друг'; f.seckey = ''; f.isAdding = false; // ── Стили + модалки ───────────────────────────────────────────────────── if (!document.getElementById('vk-friends-modals')) { const cont = document.createElement('div'); cont.id = 'vk-friends-modals'; cont.innerHTML = ` <style> .vk-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.6); z-index: 100000; display: none; justify-content: center; align-items: center; backdrop-filter: blur(4px); } .vk-modal { background: #fff; border-radius: 16px; box-shadow: 0 20px 64px rgba(0,0,0,0.28); width: 100%; max-width: 480px; max-height: 90vh; overflow-y: auto; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); font-family: system-ui, sans-serif; font-size: 15px; color: #000; z-index: 100001; animation: vkModalAppear 0.22s cubic-bezier(0.4,0,0.2,1); } @keyframes vkModalAppear { from { opacity: 0; transform: translate(-50%, -50%) scale(0.94); } to { opacity: 1; transform: translate(-50%, -50%) scale(1); } } .vk-header { padding: 16px 20px; background: #f0f2f5; border-bottom: 1px solid #e4e6eb; font-size: 17px; font-weight: 600; display: flex; align-items: center; justify-content: space-between; } .vk-close { width: 36px; height: 36px; background: transparent; border: none; font-size: 24px; color: #8a8a8a; cursor: pointer; border-radius: 50%; display: flex; align-items: center; justify-content: center; transition: background 0.14s; } .vk-close:hover { background: rgba(0,0,0,0.08); } .vk-body { padding: 20px; } .vk-btn { padding: 8px 24px; font-size: 15px; font-weight: 500; border-radius: 8px; cursor: pointer; border: none; transition: all 0.13s; min-width: 120px; } .vk-btn-primary { background: #0077ff; color: white; } .vk-btn-primary:hover { background: #0066dd; } .vk-btn-secondary { background: #e4e6eb; color: #050505; } .vk-btn-secondary:hover { background: #d8dade; } select, textarea, input { width: 100%; padding: 10px 12px; font-size: 15px; border: 1px solid #ccd0d5; border-radius: 8px; background: white; box-sizing: border-box; } textarea { resize: vertical; min-height: 100px; } .vk-avatar img { width: 80px; height: 80px; border-radius: 12px; object-fit: cover; border: 1px solid #e4e6eb; } /* Успешный попап */ .vk-success-modal .vk-header { background: linear-gradient(135deg, #0077ff, #0055cc); color: white; border-bottom: none; } .vk-success-icon { font-size: 64px; margin: 0 0 16px; } .vk-success-title { font-size: 22px; font-weight: 600; margin: 0 0 12px; } .vk-success-text { font-size: 15px; color: #333; line-height: 1.5; } </style> <div id="vkOverlay" class="vk-overlay" onclick="friends.closeIfOverlay(event)"></div> <div id="addFriendModal" class="vk-modal" style="display:none;"> <div class="vk-header"> <span>Добавление в друзья</span> <button class="vk-close" onclick="friends.closeModal('addFriendModal')">×</button> </div> <div class="vk-body" id="addFriendBody"></div> </div> <div id="captchaModal" class="vk-modal" style="display:none; max-width:420px;"> <div class="vk-header"> <span>Подтверждение</span> <button class="vk-close" onclick="friends.closeModal('captchaModal')">×</button> </div> <div class="vk-body" id="captchaBody"></div> </div> <div id="successModal" class="vk-modal vk-success-modal" style="display:none; max-width:420px;"> <div class="vk-header"> <span>Успешно!</span> <button class="vk-close" onclick="friends.closeModal('successModal')">×</button> </div> <div class="vk-body" style="text-align:center;"> <div class="vk-success-icon">🎉</div> <div class="vk-success-title">Друг добавлен</div> <div class="vk-success-text"> Запрос отправлен ${f.ucodes._username || 'пользователю'}<br> Всё прошло отлично, спасибо! </div> <button class="vk-btn vk-btn-primary" style="margin-top:20px;" onclick="friends.closeModal('successModal')"> Закрыть </button> </div> </div> `; document.body.appendChild(cont); document.addEventListener('keydown', e => { if (e.key === 'Escape') f.closeAllModals(); }); } f.showModal = function(id, title, html) { const m = document.getElementById(id); if (!m) return; if (title) m.querySelector('.vk-header span').textContent = title; const bodyId = id.replace('Modal','Body'); if (html && document.getElementById(bodyId)) { document.getElementById(bodyId).innerHTML = html; } document.getElementById('vkOverlay').style.display = 'flex'; m.style.display = 'block'; }; f.closeModal = function(id) { const m = document.getElementById(id); if (m) m.style.display = 'none'; document.getElementById('vkOverlay').style.display = 'none'; }; f.closeAllModals = function() { ['addFriendModal','captchaModal','successModal'].forEach(id => f.closeModal(id)); }; f.closeIfOverlay = function(e) { if (e.target.id === 'vkOverlay') f.closeAllModals(); }; f.showSuccess = function() { f.showModal('successModal', 'Успешно!', ''); }; f.sAdd = function() { if (f.ucodes._username === f.ucodes.username) return alert('Нельзя добавить самого себя'); if (!f.ucodes.isuser) return alert('Только зарегистрированным'); const html = ` <div style="display:flex; gap:20px; align-items:flex-start;"> <div style="flex-shrink:0;"> <img src="${f.ucodes.avatar || 'https://bro.usite.pro/icon/orig.webp'}" class="vk-avatar" alt=""> </div> <div style="flex:1;"> <div style="font-size:18px; font-weight:600; margin-bottom:16px;"> Добавить <span style="color:#0077ff;">${f.ucodes._username}</span> в друзья? </div> <div style="margin:16px 0 8px; color:#65676b;">Группа:</div> <select id="selGrFr"> <option>Друг</option> <option>Приятель</option> <option>Знакомый</option> <option>Семья</option> <option>Коллега</option> <option>Кумир</option> </select> <div style="margin:20px 0 12px;"> <a href="javascript:void(0)" style="color:#0077ff; text-decoration:none; font-weight:500;" onclick="let el=document.getElementById('vkMsgBlock');el.style.display=el.style.display==='none'?'block':'none';if(el.style.display==='block')document.getElementById('vkMsgTxt').focus();"> Добавить личное сообщение </a> </div> <div id="vkMsgBlock" style="display:none;margin-top:12px;"> <textarea id="vkMsgTxt" placeholder="Напишите что-нибудь..."></textarea> </div> <div style="margin-top:28px; display:flex; gap:12px; justify-content:flex-end;"> <button class="vk-btn vk-btn-primary" onclick=" friends.adnMess = (document.getElementById('vkMsgTxt')||{}).value?.trim()||''; friends.GR = document.getElementById('selGrFr').value; friends.add(); friends.closeModal('addFriendModal'); ">Отправить запрос</button> <button class="vk-btn vk-btn-secondary" onclick="friends.closeModal('addFriendModal')">Отмена</button> </div> </div> </div> `; f.showModal('addFriendModal', 'Добавление в друзья', html); }; f.add = function() { if (f.isAdding) return; f.isAdding = true; document.body.style.cursor = 'wait'; const target = f.ucodes.userid || f.ucodes._userid || ''; $.get(`/blog/0-0-0-0-17-${target}?${Date.now()}`, data => { if ($(data).find(`.nick:contains('${f.ucodes._username}')`).length > 0) { alert(`${f.ucodes._username} уже в друзьях`); resetCursor(); return; } $.get("/blog/0-0-0-0-1", form => { const ssid = $('input[name="ssid"]', form).val(); if (!ssid) { alert("Не удалось получить ssid"); resetCursor(); return; } $.post("/blog", { title: f.ucodes._username, other1: f.ucodes.avatar, other2: f.GR, other3: f.ucodes._profurl || '', other4: f.ucodes.userid, other5: f.ucodes._userid, a: 2, ssid }).done(() => { f.sendPmWrapper(); }).always(resetCursor); }).always(resetCursor); }).fail(resetCursor); }; function resetCursor() { document.body.style.cursor = 'default'; f.isAdding = false; } f.sendPmWrapper = function() { $.get(`/index/14-${f.ucodes._userid}-0-1`, pm => { if ($("#secuImg", pm).length) { f.seckey = $("input[name='seckey']", pm).val() || ''; const capHtml = ` <div id="capImgSpan" style="margin:20px 0;"></div> <input type="text" id="capcode" maxlength="6" placeholder="Код с картинки" style="font-size:20px;letter-spacing:4px;text-align:center;"> <div style="margin-top:24px;text-align:center;"> <button class="vk-btn vk-btn-primary" onclick="friends.sendPm(true)">Отправить</button> </div> `; f.showModal('captchaModal', 'Подтверждение', capHtml); $("#capImgSpan").html($("#secuImg", pm).clone()); $("#capcode").focus(); } else { f.sendPm(false); } }); }; f.sendPm = function(withCap = false) { const base = f.invite ? f.message2() : f.message1(); const extra = f.adnMess ? `\n\nСообщение:\n${f.adnMess}` : ''; const msg = base + extra + "\n\nХорошего дня!"; $.get(`/index/14-${f.ucodes._username}-0-1`, page => { const ssid = $('input[name="ssid"]', page).val(); if (!ssid) { f.showSuccess(); // друг уже добавлен → успех return; } const data = { s: f.ucodes._username, subject: "Предложение дружбы", message: msg, a: 18, ssid: ssid }; if (withCap) { const code = $("#capcode").val().trim(); if (!code) { alert("Введите код"); return; } data.code = code; data.seckey = f.seckey; } $.post("/index/", data, function(res) { // Не проверяем текст ответа — просто показываем успех // (так как друг уже добавлен, а сообщение — бонус) if (withCap) f.closeModal('captchaModal'); f.showSuccess(); }, "text").fail(() => { // даже если сообщение не ушло — успех if (withCap) f.closeModal('captchaModal'); f.showSuccess(); }); }).fail(() => f.showSuccess()); // друг добавлен → успех }; if (location.search.includes('?friend')) { f.invite = true; setTimeout(f.sAdd, 400); } if (location.search.includes('?myfriend')) { setTimeout(f.sAdd, 400); } })();
Признаюсь, не знаю почему, но глядя на звезды мне всегда хочется мечтать.