// ==UserScript==
// @name Mass Delete Facebook Messenger Tool - WORDLY FREE by Darkside
// @namespace http://tampermonkey.net/
// @version 0.2
// @description Mass Delete Messages
// @author Projekt Darkside - DevIT Brno - EU
// @match https://www.facebook.com/messages/*
// @grant GM_addStyle
// @license MIT; https://opensource.org/licenses/MIT
// @require https://code.jquery.com/jquery-3.7.1.min.js
// ==/UserScript==
/* global $ */
// ███████ ███████ ███████ ███████ ███████ ███████ ███████ ███████
// ███████ ███████ ███████ ███████ ███████ ███████ ███████ ███████
(function() {
'use strict';
// Add CSS for the icon in the bottom right
GM_addStyle(`
#cleanerIcon {
position: fixed;
bottom: 20px;
right: 20px;
background-color: #0078D4;
color: white;
border-radius: 50%;
padding: 10px;
font-size: 24px;
cursor: pointer;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
#cleanerIcon:hover {
background-color: #005a8f;
}
`);
// Function to create and append the icon if not already present
const createIcon = () => {
// Check if the icon already exists
if (!document.getElementById('cleanerIcon')) {
const icon = document.createElement('div');
icon.id = 'cleanerIcon';
icon.textContent = '🧹'; // You can use any icon here
document.body.appendChild(icon);
// Add click event listener to trigger the script
icon.addEventListener('click', () => {
console.log('Starting Facebook Chat Cleaner...');
startInterval(); // Start the interval for cleaning and removing
});
}
};
// Function to remove unwanted elements
const SELECTORS_REMOVE = [
"div[class='xds687c x1pi30zi x1e558r4 xixxii4 x13vifvy xzkaem6']:eq(0)",
"div[class='layout-footer']:eq(0)"
];
const REMOVE_INTERVAL = 1200; // Interval for repeating the cleaning process
let removedCount = 0; // Counter for removed elements
// Language mappings for various labels
const LANG_MAP = {
menu: {
en: "Menu",
cs: "Nabídka",
sk: "Ponuka",
fr: "Menu",
es: "Menú",
de: "Menü",
it: "Menu",
pt: "Menu",
ru: "Меню",
ja: "メニュー"
},
deleteChat: {
en: "Delete Chat",
cs: "Odstranění chatu",
sk: "Odstránenie chatu",
fr: "Supprimer la discussion",
es: "Eliminar chat",
de: "Löschen Chat",
it: "Elimina chat",
pt: "Excluir chat",
ru: "Удалить чат",
ja: "チャットを削除"
},
confirmDelete: {
en: "Delete chat",
cs: "Odstranit chat",
sk: "Odstrániť chat",
fr: "Supprimer le chat",
es: "Eliminar el chat",
de: "Chat löschen",
it: "Elimina chat",
pt: "Excluir o chat",
ru: "Удалить чат",
ja: "チャットを削除"
}
};
// Function to clean unwanted elements
const cleanElements = () => {
$(SELECTORS_REMOVE.join(", ")).each((index, element) => {
console.log('%c Removing element ', 'background: black; color: yellow;', element);
$(element).remove();
removedCount++;
});
console.log(`%c Total elements removed: ${removedCount}`, 'background: black; color: cyan; font-size: 14px;');
};
// Function to handle chat removal process
const removeChats = async () => {
console.log("Starting chat removal process...");
try {
// Step 1: Click "Menu" (localized)
const menuButtonLabel = Object.values(LANG_MAP.menu).map(label => `[aria-label^='${label}']:eq(0)`).join(", ");
const menuButton = $(menuButtonLabel);
if (menuButton.is(':visible')) {
console.log("Kliknutí na Nabídka - 1");
menuButton.click();
await wait(1000);
}
// Step 2: Click "Delete Chat" (localized)
const deleteButtonLabel = Object.values(LANG_MAP.deleteChat).map(label => `span:contains('${label}')`).join(", ");
const $deleteBtn = $(deleteButtonLabel + ":eq(0)");
if ($deleteBtn.is(':visible')) {
console.log("Kliknutí na SMAZAT - 2");
$deleteBtn.click();
await wait(1000);
} else {
console.warn("Tlačítko 'Odstranění chatu' není viditelné nebo není v podporovaném jazyce.");
return;
}
// Step 3: Confirm deletion (localized)
const confirmButtonLabel = Object.values(LANG_MAP.confirmDelete).map(label => `span:contains('${label}')`).join(", ");
const $confirmBtn = $(confirmButtonLabel + ":eq(0)");
if ($confirmBtn.is(':visible')) {
console.log("Potvrzení Smazání - 3");
$confirmBtn.click();
removedCount++;
console.log(`%c Chats removed: ${removedCount}`, 'background: black; color: lime; font-size: 14px;');
await wait(1000);
} else {
console.warn("Tlačítko 'Potvrdit' není viditelné nebo není v podporovaném jazyce.");
}
} catch (error) {
console.error("Chyba při mazání chatu: ", error);
}
};
// Utility function for delay
const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));
// Periodic cleaning and removal
const startInterval = () => {
setInterval(() => {
cleanElements(); // Clean unwanted elements
removeChats(); // Trigger chat removal process
}, REMOVE_INTERVAL);
};
// Check if we are on the Facebook messages page
const isFacebookMessagesPage = () => window.location.hostname === "www.facebook.com" && window.location.pathname.startsWith("/messages/");
// Function to check and handle icon visibility based on URL
const checkPageAndCreateIcon = () => {
if (isFacebookMessagesPage()) {
createIcon(); // Create the icon only on the message page
} else {
const icon = document.getElementById('cleanerIcon');
if (icon) {
icon.remove(); // Remove icon if we're not on the correct page
}
}
};
// Constantly check every second (1000ms)
setInterval(checkPageAndCreateIcon, 1000);
console.log('%c Script initialized and running...', 'background: black; color: green; font-size: 14px;');
})();
// ███████ ███████ ███████ ███████ ███████ ███████ ███████ ███████
// ███████ ███████ ███████ ███████ ███████ ███████ ███████ ███████