您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Автоматически покидает выбранные переписки.
当前为
// ==UserScript== // @name Auto Leave Conversations // @namespace http://tampermonkey.net/ // @version 1.0 // @description Автоматически покидает выбранные переписки. // @author eretly // @match https://zelenka.guru/conversations/* // @match https://lolz.guru/conversations/* // @match https://lolz.live/conversations/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; const selectedConversations = JSON.parse(localStorage.getItem('selectedConversations')) || []; const leavingInProgress = localStorage.getItem('leavingInProgress') === 'true'; let isLeaving = false; document.addEventListener('click', (e) => { if (e.ctrlKey && e.target.closest('.conversationItem')) { e.preventDefault(); toggleConversationSelection(e.target.closest('.conversationItem')); } }); document.addEventListener('keydown', (e) => { if (e.ctrlKey && e.key === 'Enter') { e.preventDefault(); leaveSelectedConversations(); } }); if (leavingInProgress) { setTimeout(() => { leaveSelectedConversations(); }, 2000); } function toggleConversationSelection(conversationItem) { const conversationId = conversationItem.dataset.cid; if (selectedConversations.includes(conversationId)) { selectedConversations.splice(selectedConversations.indexOf(conversationId), 1); conversationItem.style.backgroundColor = ''; // Убираем выделение } else { selectedConversations.push(conversationId); conversationItem.style.backgroundColor = '#48b04cb2'; // Подсветка выделения } localStorage.setItem('selectedConversations', JSON.stringify(selectedConversations)); } async function leaveSelectedConversations() { if (isLeaving) return; if (selectedConversations.length === 0) { console.log("Нет выбранных переписок."); return; } isLeaving = true; localStorage.setItem('leavingInProgress', 'true'); const remainingConversations = [...selectedConversations]; for (const cid of remainingConversations) { // Кликаем по кнопке меню внутри блока membersAndActions const menuButton = document.querySelector('.membersAndActions .PopupControl'); if (menuButton) { simulateClick(menuButton); // Открываем меню await delay(200); // Задержка для отображения меню // Находим и кликаем на ссылку "Покинуть переписку" const leaveLink = document.querySelector(`a[href="conversations/${cid}/leave"]`); if (leaveLink) { simulateClick(leaveLink); // Кликаем "Покинуть переписку" await delay(400); // Ждем, пока откроется форма const form = document.querySelector('form.xenForm'); if (form) { const submitButton = form.querySelector('input[type="submit"]'); if (submitButton) { simulateClick(submitButton); // Отправляем форму console.log(`Покинута переписка с ID: ${cid}`); selectedConversations.splice(selectedConversations.indexOf(cid), 1); // Удаляем только покинутую переписку localStorage.setItem('selectedConversations', JSON.stringify(selectedConversations)); // Обновляем хранилище await delay(200); // Ждем завершения // Открываем следующую переписку if (selectedConversations.length > 0) { window.location.href = `https://lolz.live/conversations/${selectedConversations[0]}/`; // Открываем следующую переписку await delay(700); // Ждем 700 мс перед следующим удалением location.reload(); } } } } } } localStorage.removeItem('leavingInProgress'); isLeaving = false; } function simulateClick(element) { const mouseEvent = new MouseEvent('click', { view: window, bubbles: true, cancelable: true }); element.dispatchEvent(mouseEvent); } function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } })();