|
/** |
|
** Használati útmutatás |
|
* 1. Link megnyitása: https://www.facebook.com/messages/t/ |
|
* 2. Törölni kívánt beszélgetés kiválasztása |
|
* 3. Böngésző Konzol megnyitása |
|
* 4. Ezen fájl kódjának beillesztése, majd ENTER billentyű leütése |
|
* 5. Türelem, türelem és türelem |
|
*/ |
|
|
|
/** |
|
** Kiegészítők |
|
*/ |
|
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ |
|
// Szükséges a https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js importálása a kódfuttatása előtt. |
|
|
|
/** |
|
** Paraméterek |
|
* - Sebesség: mennyi másodpercenként ellenőrizze a törlést? |
|
* - Lassabb gépeken előfordulhat, hogy lassabban kell haladnia a böngésző lassú renderelése miatt. |
|
*/ |
|
const speed = 0.5; // 0.5s - 500ms |
|
|
|
/** |
|
** Görgetés adott elemhez |
|
* - biztosítja a folyamatos törlést |
|
*/ |
|
const scrollingTo = (target = null) => { |
|
const container = $('div[data-release-focus-from="CLICK"]')[0]; |
|
Element.prototype.documentOffsetTop = function () { |
|
return this.offsetTop + ( this.offsetParent ? this.offsetParent.documentOffsetTop() : 0 ); |
|
}; |
|
|
|
const toTop = target == null; |
|
const top = toTop ? 0 : document.getElementById(target).documentOffsetTop() - ( container.innerHeight / 2 ); |
|
container.scrollTo( 0, top ); |
|
} |
|
|
|
/** |
|
** Szimuláció: Adott elemhez egér mozgatása |
|
*/ |
|
const mouseEventOf = (eventType) => (element, x, y) => { |
|
const rect = element.getBoundingClientRect() |
|
|
|
const event = new MouseEvent(eventType, { |
|
view: window, |
|
bubbles: true, |
|
cancelable: true, |
|
clientX: rect.left + x, |
|
clientY: rect.top + y, |
|
}) |
|
element.dispatchEvent(event) |
|
} |
|
|
|
/** |
|
** Szimuláció: Adott elem "click" eseményének megidézése |
|
*/ |
|
const clickOnElement = (element, x, y) => { |
|
mouseEventOf('click')(element, x, y) |
|
} |
|
|
|
/** |
|
** Szimuláció: Adott elem "hover" eseményének megidézése |
|
*/ |
|
const hoverOnElement = (element, x, y) => { |
|
mouseEventOf('mousemove')(element, x, y) |
|
mouseEventOf('mouseover')(element, x, y) |
|
} |
|
|
|
/** |
|
** Adott elem törlése |
|
*/ |
|
const remove = (e, needScroll = false) => { |
|
if(needScroll) { |
|
e.id = "here-removing"; |
|
scrollingTo(e.id); |
|
e.id = ""; |
|
} |
|
// Szimuláció: vidd az egeret az adott elem (1;1) kordinátájába (bal felső sarok) - hover |
|
// Az üzenetet kezelő gombok csak hover esetén jelennek meg javascripttel |
|
hoverOnElement(e, 1, 1); |
|
|
|
// További lehetőségek megnyitása |
|
$("[aria-label='Továbbiak']").click(); |
|
// Üzenet eltávolításának kiválasztása |
|
$("[aria-label='Üzenet eltávolítása']").click(); |
|
|
|
// Ekkor az ablak neve határozza meg, hogy ki küldte az üzenetet |
|
// Ha saját üzenet |
|
if($("[aria-label='Kinek szeretnéd eltávolítani ezt az üzenetet?']").length) { |
|
// Távolítsa el |
|
$("[aria-label='Eltávolítás']").click(); |
|
} |
|
// Ha más üzenete |
|
else if($("[aria-label='Eltávolítás magadnak']").length) { |
|
// Hagyja meg |
|
$("[aria-label='Mégsem']").click(); |
|
// Vegye ki a listából |
|
e.setAttribute('data-testid', ''); |
|
} |
|
} |
|
|
|
/** |
|
** Üzenet törlése megadott időintervallumonként |
|
* - A messenger chat ablak legújabb üzenetei alul vannak, így a legutolsó elemet kiválasztja |
|
* - Eltudja dönteni, hogy saját vagy nem saját üzenetről van e szó (Nem sajátot nem lehet véglegesen törölni, így nincs értelme) |
|
* - Ha saját üzenet, akkor véglegesen törli. Ha nem saját vagy már törölt, akkor átugorja |
|
* - A művelet elvégzését követően eltávolítja az azonosításra használt data-testid értékét, így egy idő után elfogynak az eddig renderelt elemek |
|
* - Ha nincs renderelve a keresett elem, akkor a chaten belül fentebb görget a kód és folytatja a munkáját |
|
*/ |
|
const interval = setInterval(function() { |
|
// Üzenetek mindig message-container data-testid-val vannak ellátva, így ezeket lekérve mindig a 0. elemmel dolgozunk |
|
let item = $('div[data-testid="message-container"]').slice(-1)[0]; |
|
|
|
// Ha nincs ilyen elem, akkor állítsa le a ciklust |
|
/*if(typeof item == 'undefined') { |
|
clearInterval(myInterval); |
|
return false; |
|
}*/ |
|
|
|
// Ha nincs ilyen elem, akkor görgessen fentebb |
|
if(typeof item == 'undefined') { |
|
scrollingTo(); |
|
return false; |
|
} |
|
|
|
// Ha az elem még nem visszavont üzenet, akkor töröld |
|
if(item.innerText.includes("Visszavontál egy üzenetet") == false) { |
|
remove(item); |
|
} |
|
// Ha törölt elemre bukkantunk, akkor csak eltávolítjuk a listából |
|
else { |
|
item.setAttribute('data-testid', ''); |
|
} |
|
|
|
return true; |
|
// Nincs visszatérés, ez nem végtelen ciklus. Hanem 350ms-ként meghívandó ciklus |
|
}, speed*1000); |
|
|
|
/** |
|
** Végtelen ciklus leállítása |
|
* - Ciklus leállításához üsse be a konzolba a következő parancsot, majd nyomjon ENTER billentyűt |
|
*/ |
|
// clearInterval(interval); |