Last active
March 16, 2025 05:09
-
-
Save minimasoft/b423fd6b6416b53fe8351137acb3e87d to your computer and use it in GitHub Desktop.
blockatroll 9000
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Esto funciona pegandolo a la consola en x.com, guarda una lista en local storage de los ya bloqueados. | |
Hace falta hacer click en el boton para que arranque, luego es automático, va bloqueando cada 2 segundos | |
un troll. | |
PERO PARA!!! | |
¡¿Vas a pegar código a la consola del navegador sin saber lo que hace?! | |
🤪 🤪 🤪 | |
Es peligroso eso. Solo hacelo con este código que fue aprobado por el mismísimo Elon Musk. | |
Dale... Pegalo... Fácil, tocás RAW, seleccionás todo y lo pegás en la consola. | |
También podés seguir leyendo y si hace falta consultar con gente que sepa antes de hacerlo. | |
Se utiliza client_event.json (llamada de tracking) para obtener un request válido. (osea, digamos, :V | |
si dejan el tab en el fondo y no usan twitter no se generan eventos de tracking y no se bloquean trolls). | |
El código está al fondo de la lista de trolls. | |
*/ | |
const troll_list = [ | |
{ | |
"id": "1463988037277397000", | |
"screen_name": "GordoDan_", | |
"name": "FLAN" | |
}//hackeado^2 | |
]; | |
// Guarda la lista de ya bloqueados, si exportás tu lista de bloqueados podes agregarla | |
// Igual por ahora si intentás bloquear a alguien ya bloqueado no pasa nada, para unblock es otra API | |
let blocked_trolls = []; | |
if(window.localStorage.getItem("blocked_trolls")){ | |
blocked_trolls = window.localStorage.getItem("blocked_trolls").split(','); | |
} | |
// Hace falta optimizar esto un poco, pero elige random de la lista un troll que no esté en 'blocked_trolls' | |
function troll_lottery() { | |
let current_troll; | |
do{ | |
troll_candidate = Math.floor(Math.random()*troll_list.length); | |
current_troll = troll_list[troll_candidate]; | |
}while(current_troll["id"] in blocked_trolls); | |
return current_troll; | |
} | |
// Guardamos las funciones originales de http open y send | |
const XMLHttpRequest_open = XMLHttpRequest.prototype.open; | |
const XMLHttpRequest_send = XMLHttpRequest.prototype.send; | |
// Variables globales para facilitar debugging, marcan el próximo request | |
let inject_url = ""; //"https://x.com/i/api/1.1/blocks/create.json"; | |
let inject_data = ""; //"user_id=993940977927774210"; | |
let inject_now = false; | |
let inject_callback = () => 1; | |
// Colocamos funciones para modificar requests hechos por la API de tracking de twitter | |
// A estos les conservamos los headers y autorizacion pero modificamos URL y datos | |
function patch_requests(){ | |
console.log("patching requests"); | |
XMLHttpRequest.prototype.open = function(method,url) { | |
if (method == "POST" && url == "https://x.com/i/api/1.1/jot/client_event.json"){ | |
if(inject_url.length > 1) | |
{ | |
url = inject_url; | |
inject_now = true; | |
} | |
} | |
return XMLHttpRequest_open.apply(this, [method, url]) | |
} | |
XMLHttpRequest.prototype.send = function(data) { | |
if(inject_now){ | |
inject_now=false; | |
inject_url=""; | |
data = inject_data; | |
inject_callback(); | |
} | |
return XMLHttpRequest_send.apply(this, [data]); | |
} | |
} | |
function unpatch_requests(){ | |
console.log("un-patching requests"); | |
XMLHttpRequest.prototype.open = XMLHttpRequest_open; | |
XMLHttpRequest.prototype.send = XMLHttpRequest_send; | |
} | |
// Una interfaz minimalista y lineas de log explican lo que va sucediendo | |
function add_blockatroll() { | |
console.log('holis'); | |
const button = document.createElement('button'); | |
button.style.position = 'fixed'; | |
button.style.top = '10px'; | |
button.style.right = '10px'; | |
button.style.padding = '8px 12px'; | |
button.style.backgroundColor = '#4CAF50'; | |
button.style.color = 'white'; | |
button.style.border = 'none'; | |
button.style.cursor = 'pointer'; | |
document.body.appendChild(button); | |
function assign_troll(troll){ | |
button.textContent = 'Block ' + troll["name"] + ' (@' + troll["screen_name"] + ')'; | |
// Esto no hace falta guardarlo en el botón, pero troll botón sonaba bien | |
button.__troll = troll; | |
button.__ignore_click = false; | |
} | |
assign_troll(troll_lottery()); | |
function start_block() { | |
if (button.__ignore_click == true) | |
return; | |
patch_requests(); | |
button.textContent = 'Blocking ' + button.__troll["name"] +'...'; | |
button.__ignore_click = true; | |
inject_url = "https://x.com/i/api/1.1/blocks/create.json"; | |
inject_data = "user_id=" + button.__troll["id"]; | |
inject_callback = () => { | |
blocked_trolls.push(button.__troll["id"]); | |
window.localStorage.setItem("blocked_trolls", blocked_trolls); | |
console.log("just blocked: " + button.__troll["id"] + " total: " + blocked_trolls.length); | |
assign_troll(troll_lottery()); | |
unpatch_requests(); | |
// Activa el bloqueo automático cada 2.222 segundos, si tienen paciencia 5 segundos es mejor. | |
setTimeout(start_block, 2222) | |
}; | |
}; | |
button.addEventListener('click', start_block); | |
} | |
add_blockatroll(); |
Código documentado para que sea fácil reutilizar y modificar. Por ahora esta metodología permite hacer cualquier tipo de llamadas a la API de twitter como si fueran legítimas gracias al excesivo tracking de las acciones del usuario utilizando el mismo protocolo de seguridad de transacciones y autorización.
LICENCIA:
Si crees que se justifica la violencia por diferencias ideológicas usar este código te puede contagiar zurditis aguda.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
TODO: