Автоматически покидает выбранные переписки.
当前为
// ==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));
}
})();