a standalone decent antibot for blooket
// ==UserScript==
// @name Blooket AntiBot
// @namespace https://cryptodude3.github.io/
// @version 1.4
// @description a standalone decent antibot for blooket
// @author ducklife3141
// @match https://*.blooket.com/*
// @icon https://ac.blooket.com/play-l/favicon.ico
// @grant none
// @license MIT
// ==/UserScript==
function reactHandler() {
return Object.values(document.querySelector('#app>div>div'))[1].children[0]._owner.stateNode;
}
// antibot code
window.bannedbots = [];
var bind = 0;
var breg = /^([^\d]+)([\d]+)$/;
window.run = 0;
async function antibot(){
if(window.run>1){return;}
if(window.run>0){
if(reactHandler().props.liveGameController._liveApp.database()._delegate._repo.server_.listens.size < 1){
patchab();
console.log("Game listener added!");
window.run++;
}
return;
}
if(!reactHandler().props.liveGameController){return;}
if(!reactHandler().props.liveGameController.getDatabaseVal){return;}
if(!reactHandler().props.liveGameController._liveApp){return;}
if(!reactHandler().props.liveGameController._liveApp.database()){return;}
if(!reactHandler().props.liveGameController._liveApp.database()._delegate._repoInternal.server_){return;}
if(!document.querySelector("#idNum")){return;}
console.log("Anti-Bot listener added!");
patchab();
window.run++;
}
function patchab(){
reactHandler().props.liveGameController._liveApp.database().ref(`${reactHandler().props.liveGameController._liveGameCode}/c`).on("value",v=>antib(v.val()));
}
async function antib(e) {
console.log(e);
if(!e){return;}
var fa = Object.keys(e).filter(e => breg.test(e));
checkForBots(fa);
fa.forEach(e => {
bannedbots.forEach(async a => {
if (e.includes(a)) {
reactHandler().props.liveGameController.blockUser(e);
bind++;
if(bind>15){
bind=0;console.log("ws");
await wait(420);console.log("we");}
}
});
});
for (var i in e) {
if (typeof e[i].b === "object" || typeof e[i].tat === "object" || i === "constructor" || e[i].rt || i.includes("sahar")) {
reactHandler().props.liveGameController.blockUser(i);
}
}
}
function wait(d) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, d);
});
}
function check(array, amt) {
const occurrences = {};
const result = [];
for (let str of array) {
occurrences[str] = (occurrences[str] || 0) + 1;
if (occurrences[str] >= amt && !result.includes(str)) {
result.push(str);
}
}
return result.length > 0 ? result : null;
}
function checkForBots(names) {
var n = names;
if (n.length > 0) {
var t = n.map(e => e.match(breg)[1]);
var ch = check(t, 2);
if (ch) {
if (ch.length > 0) {
console.log(ch);
ch.forEach(f => {
if (window.bannedbots.indexOf(f) === -1) {
window.bannedbots.push(f);
}
n.filter(a => a.includes(f)).forEach(d => {
reactHandler().props.liveGameController.removeVal("c/" + d);
});
});
}
}
}
return [];
}
// end
setInterval(munfun,100);