Blooket GUI

Hover over text and press control-A and then control-C

(() => {

  let n = document.createElement("iframe");


  document.body.append(n);


  window.alert = n.contentWindow.alert.bind(window);


  window.prompt = n.contentWindow.prompt.bind(window);


  window.confirm = n.contentWindow.confirm.bind(window);


  n.remove();

})();


(() => {

  let style = document.createElement("style");


  style.innerHTML = `details > summary {


  cursor: pointer;


  transition: 0.15s;


  list-style: none;


}


details > summary:hover {


  color: hsl(0, 0%, 50%)


}


details > summary::-webkit-details-marker {


  display: none;


}


details summary ~ * {


  animation: sweep .5s ease-in-out;


}




@keyframes sweep {


  0%  {opacity: 0; transform: translateY(-10px)}


  100% {opacity: 1; transform: translateY(0)}


}


.cheat {


  border: none;


  background: hsl(0, 0%, 20%);


  padding: 5px;


  margin: 3px;


  width: 60%;


  color: hsl(0, 0%, 100%);


  transition: 0.2s;


  border-radius: 5px;


  cursor: pointer;


}


.cheat:hover {


  background: hsl(0, 0%, 30%);


}`;


  const GUI = document.createElement("div");


  GUI.appendChild(style);


  GUI.style.width = "400px";


  //GUI.style.height = '500px';


  GUI.style.background = "hsl(0, 0%, 10%)";


  GUI.style.borderRadius = "10px";


  GUI.style.position = "absolute";


  GUI.style.textAlign = "center";


  GUI.style.fontFamily = "Nunito";


  GUI.style.color = "white";


  GUI.style.overflow = "hidden";


  GUI.style.top = "50px";


  GUI.style.left = "50px";


  var pos1 = 0,

    pos2 = 0,

    pos3 = 0,

    pos4 = 0;


  GUI.onmousedown = (e = window.event) => {

    e.preventDefault();


    pos3 = e.clientX;


    pos4 = e.clientY;


    document.onmouseup = () => {

      document.onmouseup = null;


      document.onmousemove = null;

    };


    document.onmousemove = (e) => {

      e = e    window.event;


      e.preventDefault();


      pos1 = pos3 - e.clientX;


      pos2 = pos4 - e.clientY;


      pos3 = e.clientX;


      pos4 = e.clientY;


      GUI.style.top = GUI.offsetTop - pos2 + "px";


      GUI.style.left = GUI.offsetLeft - pos1 + "px";

    };

  };


  let header = document.createElement("div");


  GUI.appendChild(header);


  header.style.width = "100%";


  header.style.height = "35px";


  header.style.paddingTop = "2px";


  header.style.fontSize = "1.5rem";


  header.style.textAlign = "center";


  header.innerHTML = `Blooket Cheats <span style="font-size: 0.75rem">v4.10.22</span>`;


  let loop;


  let close = document.createElement("button");


  header.appendChild(close);


  close.style.background = "red";


  close.style.height = "45px";


  close.style.width = "45px";


  close.style.border = "none";


  close.style.cursor = "pointer";


  close.style.position = "absolute";


  close.style.top = "-10px";


  close.style.right = "-10px";


  close.style.fontSize = "1.5rem";


  close.style.borderRadius = "10px";


  close.style.fontFamily = "Nunito";


  close.style.fontWeight = "bolder";


  close.style.paddingTop = "10px";


  close.style.paddingRight = "15px";


  close.innerText = "X";


  close.onclick = () => {

    GUI.remove();


    clearInterval(loop);


    removeEventListener("keypress", toggleHidden);

  };


  let minimize = document.createElement("button");


  header.appendChild(minimize);


  minimize.style.background = "#444444";


  minimize.style.height = "45px";


  minimize.style.width = "45px";


  minimize.style.border = "none";


  minimize.style.cursor = "pointer";


  minimize.style.position = "absolute";


  minimize.style.top = "-10px";


  minimize.style.left = "-10px";


  minimize.style.fontSize = "1.5rem";


  minimize.style.borderRadius = "10px";


  minimize.style.fontFamily = "Nunito";


  minimize.style.fontWeight = "bolder";


  minimize.style.paddingTop = "10px";


  minimize.style.paddingLeft = "15px";


  minimize.innerText = "-";


  minimize.onclick = () => {

    bodyDiv.hidden = !bodyDiv.hidden;

  };


  let bodyDiv = document.createElement("div");


  let body = document.createElement("div");


  bodyDiv.appendChild(body);


  GUI.appendChild(bodyDiv);


  body.innerHTML = `<span id="curPageEl">${

    getSite(true)

      ? `Current gamemode: ${getSite(true)}`

      : "No game detected"

  }</span><br><span>(Press E to hide)</span><br>`;


  body.style.display = "block";


  body.style.margin = "10px";


  //body.style.background = 'white';


  body.style.minHeight = "70px";


  let activeCheats = document.createElement("span");


  body.appendChild(activeCheats);


  document.body.append(GUI);


  let footer = document.createElement("div");


  bodyDiv.appendChild(footer);


  footer.style.fontSize = "0.9rem";


  footer.style.paddingBottom = "5px";


  footer.innerHTML = `<span>GUI by OneMinesraft2#5394<br>Cheats by <a style="color: lightblue" href="https://twitter.com/glizuwu">gliz</a></span>`;


  var getValues = () =>

    new Promise((e, t) => {

      try {

        let n = window.webpackJsonp

          .map((e) => Object.keys(e[1]).map((t) => e[1][t]))

          .reduce((e, t) => [...e, ...t], [])

          .find(

            (e) =>

              /\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/.test(

                e.toString()

              ) &&

              /\(new TextEncoder\)\.encode\(\"(.+?)\"\)/.test(

                e.toString()

              )

          )

          .toString();


        e({

          blooketBuild: n.match(/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/)[0],


          secret: n.match(

            /\(new TextEncoder\)\.encode\(\"(.+?)\"\)/

          )[1],

        });

      } catch {

        t("Could not fetch auth details");

      }

    });


  var encodeValues = async (e, t) => {

    let d = window.crypto.getRandomValues(new Uint8Array(12));


    return window.btoa(

      Array.from(d)

        .map((e) => String.fromCharCode(e))

        .join("") +

        Array.from(

          new Uint8Array(

            await window.crypto.subtle.encrypt(

              {

                name: "AES-GCM",


                iv: d,

              },

              await window.crypto.subtle.importKey(

                "raw",

                await window.crypto.subtle.digest(

                  "SHA-256",

                  new TextEncoder().encode(t)

                ),

                {

                  name: "AES-GCM",

                },

                !1,

                ["encrypt"]

              ),

              new TextEncoder().encode(JSON.stringify(e))

            )

          )

        )

          .map((e) => String.fromCharCode(e))

          .join("")

    );

  };


  function reactHandler() {

    return Object.values(document.querySelector("#app > div > div"))[1]

      .children[1]._owner;

  }


  let autoAnswer, highlightAnswers, choiceESP, autoPassword, chestESP;


  let cheats = {

    global: {

      "Get Daily Rewards": () => {

        fetch("https://api.blooket.com/api/users", {

          credentials: "include",

        })

          .then((x) => x.json())

          .then((x) => {

            getValues()

              .then(async (e) => {

                fetch(

                  "https://api.blooket.com/api/users/add-rewards",

                  {

                    method: "put",


                    credentials: "include",


                    headers: {

                      "content-type": "application/json",


                      "X-Blooket-Build": e.blooketBuild,

                    },


                    body: await encodeValues(

                      {

                        name: x.name,


                        addedTokens: 250,


                        addedXp: 300,

                      },

                      e.secret

                    ),

                  }

                );


                fetch(

                  "https://api.blooket.com/api/users/add-rewards",

                  {

                    method: "put",


                    credentials: "include",


                    headers: {

                      "content-type": "application/json",


                      "X-Blooket-Build": e.blooketBuild,

                    },


                    body: await encodeValues(

                      {

                        name: x.name,


                        addedTokens: 250,


                        addedXp: 300,

                      },

                      e.secret

                    ),

                  }

                )

                  .then(() => alert("Added daily rewawrds!"))

                  .catch(() =>

                    alert(

                      "There was an error when adding rewards!"

                    )

                  );

              })

              .catch(() =>

                alert("There was an error encoding requests!")

              );

          })

          .catch(() => alert("There was an error getting username!"));

      },


      "Spoof Blooks": () => {

        if (!window.location.pathname.split("/").includes("lobby"))

          return alert(

            "You must be in a game lobby! (e.g. https://www.blooket.com/play/lobby)"

          );


        reactHandler().stateNode.setState({

          lockedBlooks: [],

          takenBlooks: [],

        });

      },


      "Toggle Auto Answer": () => {

        autoAnswer = !autoAnswer;

      },


      "Toggle Highlight Answers": () => {

        highlightAnswers = !highlightAnswers;

      },


      "Spam Open Boxes": () => {

        let box = prompt(`Which box do you want to open? (e.g. Space)`);


        let boxes = {

          safari: 25,


          aquatic: 20,


          bot: 20,


          space: 20,


          breakfast: 15,


          medieval: 15,


          wonderland: 15,

        };


        if (!Object.keys(boxes).includes(box.toLowerCase()))

          return alert("I could not find that box!");


        let amount = prompt("How many boxes do you want to open?");


        fetch("https://api.blooket.com/api/users", {

          credentials: "include",

        })

          .then((x) => x.json())

          .then((x) => {

            if (x.tokens < boxes[box.toLowerCase()] * amount)

              amount = Math.floor(

                x.tokens / boxes[box.toLowerCase()]

              );


            if (!amount)

              return alert("You do not have enough tokens!");


            let wait = (ms) =>

              new Promise((r) => setTimeout(r, ms));


            getValues()

              .then(async (e) => {

                let error = false,

                  blooks = [];


                for (let i = 0; i < amount; i++) {

                  fetch(

                    "https://api.blooket.com/api/users/unlockblook",

                    {

                      method: "put",


                      credentials: "include",


                      headers: {

                        "content-type":

                          "application/json",


                        "X-Blooket-Build":

                          e.blooketBuild,

                      },


                      body: await encodeValues(

                        {

                          name: x.name,


                          box:

                            box

                              .charAt(0)

                              .toUpperCase() +

                            box

                              .slice(1)

                              .toLowerCase(),

                        },

                        e.secret

                      ),

                    }

                  )

                    .then(async (x) => {

                      let blook = await x.json();


                      blooks.push(blook.unlockedBlook);


                      alert(

                        `${blook.unlockedBlook} (${

                          i + 1

                        }/${amount})`

                      );

                    })

                    .catch(() => {

                      error = true;

                    });


                  await wait(750);


                  if (error) break;

                }


                let count = {};


                blooks.forEach((blook) => {

                  count[blook] = (count[blook]    0) + 1;

                });


                alert(

                  `Results:\n` +

                    Object.entries(count)

                      .map((x) => `  ${x[1]} ${x[0]}`)

                      .join(`\n`)

                );

              })

              .catch(() =>

                alert("There was an error encoding requests!")

              );

          })

          .catch(() => alert("There was an error getting username!"));

      },


      "Auto Sell Dupes": () => {

        fetch("https://api.blooket.com/api/users", {

          credentials: "include",

        })

          .then((x) => x.json())

          .then((x) => {

            let blooks = Object.entries(x.unlocks)

              .map((x) => [x[0], x[1] - 1])

              .filter((x) => x[1] > 0);


            let wait = (ms) =>

              new Promise((r) => setTimeout(r, ms));


            getValues()

              .then(async (e) => {

                let error = false;


                alert("Selling duplicate blooks, please wait");


                for (let [blook, numSold] of blooks) {

                  fetch(

                    "https://api.blooket.com/api/users/sellblook",

                    {

                      method: "put",


                      credentials: "include",


                      headers: {

                        "content-type":

                          "application/json",


                        "X-Blooket-Build":

                          e.blooketBuild,

                      },


                      body: await encodeValues(

                        {

                          name: x.name,


                          blook,


                          numSold,

                        },

                        e.secret

                      ),

                    }

                  ).catch(() => {

                    error = true;

                  });


                  await wait(750);


                  if (error) break;

                }


                alert(

                  `Results:\n` +

                    blooks

                      .map((x) => `  ${x[1]} ${x[0]}`)

                      .join(`\n`)

                );

              })

              .catch(() =>

                alert("There was an error encoding requests!")

              );

          })

          .catch(() =>

            alert("There was an error getting user data!")

          );

      },

    },


    cafe: {

      "Infinite Food": () => {

        if (document.location.pathname != "/cafe")

          return alert("This cheat doesn't work in the shop!");


        reactHandler().stateNode.state.foods.forEach(

          (e) => (e.stock = 99999)

        );


        reactHandler().stateNode.forceUpdate();

      },


      "Max Levels": () => {

        if (document.location.pathname != "/cafe/shop")

          return alert("This cheat only works in the shop!");


        Object.keys(reactHandler().stateNode.state.items).forEach(

          (x) => (reactHandler().stateNode.state.items[x] = 5)

        );


        reactHandler().stateNode.forceUpdate();

      },


      "Set Cash": () => {

        reactHandler().stateNode.setState({

          cafeCash: Number(

            parseFloat(prompt("How much cash would you like?"))

          ),

        });

      },


      "Reset Abilities": () => {

        Object.keys(reactHandler().stateNode.state.abilities).forEach(

          (x) => (reactHandler().stateNode.state.abilities[x] = 5)

        );


        reactHandler().stateNode.forceUpdate();

      },

    },


    kingdom: {

      "Choice ESP": () => {

        choiceESP = !choiceESP;

      },


      "Max Stats": () => {

        reactHandler().stateNode.setState({

          materials: 100,

          people: 100,

          happiness: 100,

          gold: 100,

        });

      },


      "Disable Toucan": () => {

        reactHandler().stateNode.taxCounter = Number.MAX_VALUE;

      },


      "Set Guests": () => {

        let guestScore = Number(

          parseFloat(prompt("How many guests do you want?"))

        );


        reactHandler().stateNode.setState({ guestScore });

      },


      "Skip Guest": () => {

        reactHandler().stateNode.nextGuest();

      },

    },


    crypto: {

      "Auto Hack": () => {

        autoPassword = !autoPassword;

      },


      "Set Crypto": () => {

        let amount = Number(

          parseFloat(prompt("How much crypto do you want?"))

        );


        reactHandler().stateNode.setState({

          crypto2: amount,

          crypto: amount,

        });

      },


      "Custom Password": () => {

        let password = Number(

          parseFloat(

            prompt("What do you want to set your password to?")

          )

        );


        reactHandler().stateNode.setState({ password });

      },


      "Remove Hack": () => {

        reactHandler().stateNode.setState({ hack: "" });

      },


      "Reset Player's Crypto": () => {

        let target = prompt("Name of player");


        let e = reactHandler();


        !target   

          e.memoizedProps.firebase.getDatabaseVal(

            e.memoizedProps.client.hostId,

            "c",

            (...o) => {

              let data = Object.keys(o[0]);


              if (data.some((e) => e == target))

                data.forEach((player) => {

                  if (player == target) {

                    e.memoizedProps.firebase.setVal({

                      id: e.memoizedProps.client.hostId,


                      path:

                        "c/" +

                        e.memoizedProps.client.name,


                      val: {

                        p: e.stateNode.state.password,


                        b: e.memoizedProps.client.blook,


                        cr: e.stateNode.state.crypto,


                        tat:

                          player +

                          ":" +

                          (o[0][player].cr    0),

                      },

                    });

                    alert("Reset player's crypto");

                  }

                });

              else alert("Player does not exist");

            }

          );

      },

    },


    factory: {

      "All Mega Bot": () => {

        let blooks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0].fill({

          name: "Mega Bot",

          color: "#d71f27",

          class: "🤖",

          rarity: "Legendary",

          cash: [80000, 430000, 4200000, 62000000, 1000000000],

          time: [5, 5, 3, 3, 3],

          price: [7000000, 120000000, 1900000000, 35000000000],

          active: false,

          level: 4,

          bonus: 5.5,

        });


        reactHandler().stateNode.setState({ blooks });

      },


      "Remove Glitches": () => {

        reactHandler().stateNode.setState({

          glitch: "",


          bites: 0,


          ads: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


          hazards: ["", "", "", "", ""],


          lol: false,


          joke: false,


          slow: false,


          dance: false,


          popUpAmount: 0,

        });

      },


      "Max Blooks": () => {

        reactHandler().stateNode.state.blooks.forEach((blook) => {

          blook.level = 4;

        });

      },


      "Set Cash": () => {

        let cash = Number(

          parseFloat(prompt("How much cash do you want?"))

        );


        reactHandler().stateNode.setState({ cash });

      },

    },


    fishing: {

      "Set Weight": () => {

        let weight = Number(

          parseFloat(prompt("How much weight do you want?"))

        );


        reactHandler().stateNode.setState({ weight2: weight, weight });

      },


      "Set Lure": () => {

        let lure =

          Number(

            parseFloat(

              prompt(

                "What do you want to set your lure to? (1 - 5)"

              )

            )

          ) - 1;


        reactHandler().stateNode.setState({

          lure: lure < 0 ? 0 : lure > 4 ? 4 : lure,

        });

      },

    },


    gold: {

      "Set Gold": () => {

        let gold = Number(

          parseFloat(prompt("How much gold do you want?"))

        );


        reactHandler().stateNode.setState({ gold2: gold, gold });

      },


      "Chest ESP": () => {

        chestESP = !chestESP;

      },


      "Set Player's Gold": () => {

        let e = reactHandler(),

          player = prompt("Player to set gold"),

          amount = Number(

            parseFloat(prompt("Amount to set gold to"))

          );


        e.memoizedProps.firebase.setVal({

          id: e.memoizedProps.client.hostId,


          path: "c/" + e.memoizedProps.client.name,


          val: {

            b: e.memoizedProps.client.blook,


            g: e.stateNode.state.gold,


            tat: player + ":swap:" + amount,

          },

        });

      },

    },


    racing: {

      "Instant Win": () => {

        reactHandler().stateNode.setState({

          progress: reactHandler().stateNode.state.goalAmount,

        });


        setTimeout(() => {

          try {

            Array.from(

              document.body.querySelectorAll(

                'div[class*="answerText"]'

              )

            )

              .filter(

                (t) =>

                  t.firstChild.innerHTML ==

                  reactHandler().memoizedState.question

                    .correctAnswers[0]

              )[0]

              .click();

          } catch {

            try {

              Array.from(

                document.body.querySelectorAll(

                  'div[class*="answerText"]'

                )

              )

                .filter(

                  (t) =>

                    t.firstChild.innerHTML ==

                    reactHandler().memoizedProps.client

                      .question.correctAnswers[0]

                )[0]

                .click();

            } catch {}

          }

        }, 100);

      },

    },


    defense: {

      "Clear Enemies": () => {

        reactHandler().stateNode.enemies = [];

      },


      "Max Towers": () => {

        reactHandler().stateNode.towers.forEach((tower) => {

          tower.damage = 99999999;


          tower.range = 99999999;


          tower.fullCd = 0;

        });

      },


      "Remove Ducks": () => {

        data = reactHandler().stateNode;


        data.ducks.forEach((x) => {

          data.tiles[x.y][x.x] = 0;

        });


        data.ducks.length = 0;

      },


      "Place Towers Anywhere": () => {

        reactHandler().stateNode.tiles =

          reactHandler().stateNode.tiles.map((x) =>

            x.map((e) => (e == 2 ? 0 : e))

          );

      },


      "Set Damage": () => {

        let dmg = Number(

          parseFloat(prompt("How much damage do you want?"))

        );


        reactHandler().stateNode.dmg = dmg;

      },


      "Set Round": () => {

        let round = Number(

          parseFloat(prompt("What round do you want to set it to?"))

        );


        reactHandler().stateNode.setState({ round });

      },


      "Set Tokens": () => {

        let tokens = Number(

          parseFloat(prompt("How many tokens do you want?"))

        );


        reactHandler().stateNode.setState({ tokens });

      },

    },


    doom: {

      "Set Coins": () => {

        try {

          reactHandler().stateNode.props.setTowerCoins(

            Number(

              parseFloat(prompt("How many coins do you want?"))

            )

          );

        } catch {}

      },


      "Lower Enemy Stats": () => {

        let data = reactHandler().stateNode.state;


        if (data.phase != "select")

          return alert(

            "You must be on the attribute selection page!"

          );


        reactHandler().stateNode.setState({

          enemyCard: {

            ...data.enemyCard,

            strength: 0,

            charisma: 0,

            wisdom: 0,

          },

        });

      },


      "Max Player Stats": () => {

        let data = reactHandler().stateNode.state;


        if (data.phase != "select")

          return alert(

            "You must be on the attribute selection page!"

          );


        reactHandler().stateNode.setState({

          myCard: {

            ...data.myCard,

            strength: 20,

            charisma: 20,

            wisdom: 20,

          },

        });

      },


      "Heal Player": () => {

        reactHandler().stateNode.setState({ myLife: 100 });

      },

    },


    rush: {

      "Set Defense": () => {

        let e = reactHandler();


        e.stateNode.props.firebase.setVal({

          id: e.stateNode.props.client.hostId,


          path: "c/" + e.stateNode.props.client.name + "/d",


          val: Number(

            parseFloat(prompt("How much defense do you want?"))

          ),

        });

      },


      "Set Blooks": () => {

        let e = reactHandler();


        e.stateNode.props.firebase.setVal({

          id: e.stateNode.props.client.hostId,


          path: "c/" + e.stateNode.props.client.name + "/bs",


          val: Number(

            parseFloat(prompt("How many blooks do you want?"))

          ),

        });

      },

    },

  };


  let global = document.createElement("details");


  global.innerHTML = `<summary style="padding: 10px; font-size: 1.5em; font-weight: bolder">Global</summary>`;


  for (var i = 0; i < Object.keys(cheats.global).length; i++) {

    let cheat = createButton(Object.keys(cheats.global)[i]);


    cheat.onclick = cheats.global[Object.keys(cheats.global)[i]];


    global.appendChild(cheat);

  }


  global.open = true;


  global.style.paddingBottom = "10px";


  body.appendChild(global);


  let cheatDiv = document.createElement("div");


  body.appendChild(cheatDiv);


  loop = setInterval(() => {

    if (curPage != getSite()) {

      curPage = getSite();


      curPageEl.innerText = getSite(true)

        ? `Current gamemode: ${getSite(true)}`

        : "No game detected";


      Array.from(cheatDiv.children).forEach((x) => x.remove());


      if (curPage && cheats[curPage])

        Object.keys(cheats[curPage]).forEach((cheat) => {

          let button = createButton(cheat);


          button.onclick = cheats[curPage][cheat];


          cheatDiv.appendChild(button);


          cheatDiv.appendChild(document.createElement("br"));

        });

    }


    let activeCheatsText = `Auto Answer: ${

      autoAnswer ? "Enabled" : "Disabled"

    }\nHighlight Answers: ${highlightAnswers ? "Enabled" : "Disabled"}${

      curPage == "kingdom"

        ? `\nChoice ESP: ${choiceESP ? "Enabled" : "Disabled"}`

        : curPage == "crypto"

        ? `\nAuto Hack: ${autoPassword ? "Enabled" : "Disabled"}`

        : curPage == "gold"

        ? `\nChest ESP: ${chestESP ? "Enabled" : "Disabled"}`

        : ""

    }`;


    activeCheats.innerText != activeCheatsText &&

      (activeCheats.innerText = activeCheatsText);


    if (autoAnswer) {

      try {

        Array.from(

          document.body.querySelectorAll('div[class*="answerText"]')

        )

          .filter(

            (t) =>

              t.firstChild.innerHTML ==

              reactHandler().memoizedState.question

                .correctAnswers[0]

          )[0]

          .click();

      } catch {

        try {

          Array.from(

            document.body.querySelectorAll(

              'div[class*="answerText"]'

            )

          )

            .filter(

              (t) =>

                t.firstChild.innerHTML ==

                reactHandler().memoizedProps.client.question

                  .correctAnswers[0]

            )[0]

            .click();

        } catch {}

      }

    }


    if (highlightAnswers) {

      try {

        Array.from(

          document.querySelector('div[class*="answersHolder"')

            .children

        ).forEach((x) => {

          if (

            reactHandler().memoizedState.question.correctAnswers.includes(

              x.innerText

            )   

            reactHandler().memoizedProps.client.question.correctAnswers.includes(

              x.innerText

            )

          )

            x.firstChild.style =

              "background-color: rgb(0, 207, 119);";

          else

            x.firstChild.style =

              "background-color: rgb(225, 40, 33);";

        });

      } catch {}

    }


    if (curPage == "kingdom") {

      Array.from(document.getElementsByClassName("choiceESP")).forEach(

        (x) => x.remove()

      );


      if (choiceESP) {

        try {

          let elements = {

            materials: Array.from(

              document.querySelectorAll("div")

            ).find((x) =>

              Array.from(x.children).find((e) =>

                e.className.includes("tree")

              )

            ),


            people: Array.from(

              document.querySelectorAll("div")

            ).find((x) =>

              Array.from(x.children).find(

                (e) =>

                  e.className.includes("users") &&

                  e.parentElement.className.includes(

                    "statContainer"

                  )

              )

            ),


            happiness: Array.from(

              document.querySelectorAll("div")

            ).find((x) =>

              Array.from(x.children).find((e) =>

                e.className.includes("grin")

              )

            ),


            gold: Array.from(document.querySelectorAll("div")).find(

              (x) =>

                Array.from(x.children).find((e) =>

                  e.className.includes("coins")

                )

            ),

          };


          let data = reactHandler().stateNode.state.guest;


          Object.entries(data.yes).forEach((x) => {

            if (x[0] == "msg") return;


            let element = document.createElement("div");


            element.className = "choiceESP";


            element.style =

              "font-size: 24px; color: rgb(75, 194, 46); font-weight: bolder;";


            element.innerText = String(x[1]);


            elements[x[0]].appendChild(element);

          });


          Object.entries(data.no).forEach((x) => {

            if (x[0] == "msg") return;


            let element = document.createElement("div");


            element.className = "choiceESP";


            element.style =

              "font-size: 24px; color: darkred; font-weight: bolder;";


            element.innerText = String(x[1]);


            elements[x[0]].appendChild(element);

          });

        } catch (e) {}

      }

    }


    if (curPage == "crypto" && autoPassword) {

      let { stage, correctPassword } = Object.values(

        document.querySelector("#app > div > div")

      )[1].children[1]._owner.stateNode.state;


      if (stage == "hack")

        Array.from(document.querySelectorAll("div"))

          .filter((x) => x.innerHTML == correctPassword)[0]

          .click();

    }


    if (curPage == "gold" && chestESP) {

      try {

        if (reactHandler().stateNode.state.stage == "prize") {

          let { choices } = reactHandler().stateNode.state;


          let div = document.querySelector(

            "div[class*='regularBody']"

          ).children[1];


          if (div) {

            if (!document.querySelectorAll(".chest-esp").length)

              choices.forEach((box, i) => {

                textElement = document.createElement("p");


                textElement.className = "chest-esp";


                textElement.innerText = box.text;


                textElement.style = `text-align: center;


          font-size: 30px;


          color: white;


          font-family:Titan One;


          sans-serif;


          border-color: black;


          margin-top: 200px;`;


                try {

                  div.children[i].appendChild(textElement);

                } catch (e) {

                  console.log(e);

                }

              });

            else

              choices.forEach((box, i) => {

                if (

                  div.children.length == 3 &&

                  div.children[i].children[1].innerText !=

                    box.text

                )

                  div.children[i].children[1].innerText =

                    box.text;

              });

          }

        }

      } catch (e) {

        console.log(e);

      }

    }

  });


  let curPage = getSite();


  if (curPage && cheats[curPage])

    Object.keys(cheats[curPage]).forEach((cheat) => {

      let button = createButton(cheat);


      button.onclick = cheats[curPage][cheat];


      cheatDiv.appendChild(button);


      cheatDiv.appendChild(document.createElement("br"));

    });


  function createButton(cheat) {

    let button = document.createElement("button");


    button.classList.add("cheat");


    button.innerText = cheat;


    return button;

  }


  function getSite(capitalize) {

    switch (window.location.pathname.split("/")[2]) {

      case "rush":

        return capitalize ? "Blook Rush" : "rush";


      case "gold":

        return capitalize ? "Gold Quest" : "gold";


      case "fishing":

        return capitalize ? "Fishing Frenzy" : "fishing";


      case "hack":

        return capitalize ? "Crypto Hack" : "crypto";


      case "battle-royale":

        return capitalize ? "Battle Royale" : "royale";


      case "factory":

        return capitalize ? "Factory" : "factory";


      case "racing":

        return capitalize ? "Racing" : "racing";


      case "classic":

        return capitalize ? "Classic" : "classic";


      default:

        switch (window.location.pathname.split("/")[1]) {

          case "defense":

            return capitalize ? "Tower Defense" : "defense";


          case "cafe":

            return capitalize ? "Café" : "cafe";


          case "tower":

            return capitalize ? "Tower of Doom" : "doom";


          case "kingdom":

            return capitalize ? "Crazy Kingdom" : "kingdom";


          default:

            return false;

        }

    }

  }


  function toggleHidden(e) {

    e.code == "KeyE" && (GUI.hidden = !GUI.hidden);

  }


  addEventListener("keypress", toggleHidden);

})();


Share by: