Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (window.location.href.search("quizizz.com/join/game/") == -1 && window.location.href.search("gameType=") == -1) {
- throw new Error("Nie bierzesz udziału w quizie jeżeli uważasz, że to błąd zgłoś się na 🔥Kai🔥#2041");
- }
- if (window.QuizizzBot && !window.QuizizzBotDebug) {
- throw new Error("Bot Quizizz jest już uruchomiony! Zaawansowane: użyj w konsoli Window.QuizizzBotDebug");
- }
- window.QuizizzBot = true
- document.head.insertAdjacentHTML('beforeend', `<style type="text/css">
- correct-answer-x3Ca8B {
- color: lime !important;
- }
- </style>`);
- class Encoding {
- static encodeRaw(t, e, o="quizizz.com") {
- let s = 0;
- s = e ? o.charCodeAt(0) : o.charCodeAt(0) + o.charCodeAt(o.length - 1);
- let r = [];
- for (let o = 0; o < t.length; o++) {
- let n = t[o].charCodeAt(0)
- , c = e ? this.safeAdd(n, s) : this.addOffset(n, s, o, 2);
- r.push(String.fromCharCode(c))
- }
- return r.join("")
- }
- static decode(t, e=!1) {
- if (e) {
- let e = this.extractHeader(t);
- return this.decodeRaw(e, !0)
- }
- {
- let e = this.decode(this.extractHeader(t), !0)
- , o = this.extractData(t);
- return this.decodeRaw(o, !1, e)
- }
- }
- static decodeRaw(t, e, o="quizizz.com") {
- let s = this.extractVersion(t);
- let r = 0;
- r = e ? o.charCodeAt(0) : o.charCodeAt(0) + o.charCodeAt(o.length - 1),
- r = -r;
- let n = [];
- for (let o = 0; o < t.length; o++) {
- let c = t[o].charCodeAt(0)
- , a = e ? this.safeAdd(c, r) : this.addOffset(c, r, o, s);
- n.push(String.fromCharCode(a))
- }
- return n.join("")
- }
- static addOffset(t, e, o, s) {
- return 2 === s ? this.verifyCharCode(t) ? this.safeAdd(t, o % 2 == 0 ? e : -e) : t : this.safeAdd(t, o % 2 == 0 ? e : -e)
- }
- static extractData(t) {
- let e = t.charCodeAt(t.length - 2) - 33;
- return t.slice(e, -2)
- }
- static extractHeader(t) {
- let e = t.charCodeAt(t.length - 2) - 33;
- return t.slice(0, e)
- }
- static extractVersion(t) {
- if ("string" == typeof t && t[t.length - 1]) {
- let e = parseInt(t[t.length - 1], 10);
- if (!isNaN(e))
- return e
- }
- return null
- }
- static safeAdd(t, e) {
- let o = t + e;
- return o > 65535 ? o - 65535 + 0 - 1 : o < 0 ? 65535 - (0 - o) + 1 : o
- }
- static verifyCharCode(t) {
- if ("number" == typeof t)
- return !(t >= 55296 && t <= 56319 || t >= 56320 && t <= 57343)
- }
- }
- function GetSetData() {
- let URL = window.location.href
- , GameType = URL.slice(URL.search("gameType=") + 9, URL.length)
- , prevConx = localStorage.getItem("previousContext")
- , parsedConx = JSON.parse(prevConx)
- , encodedRoomHash = parsedConx.game.roomHash
- , roomHash = Encoding.decode(encodedRoomHash.split("-")[1])
- , data = {
- roomHash: roomHash,
- type: GameType
- };
- let xhttp = new XMLHttpRequest
- xhttp.open("POST", "https://game.quizizz.com/play-api/v3/getQuestions", false)
- xhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
- xhttp.send(JSON.stringify(data))
- return JSON.parse(xhttp.responseText)
- }
- function GetAnswer(Question) {
- switch (Question.structure.kind) {
- case "BLANK":
- // Text Response, we have no need for image detection in answers
- let ToRespond = []
- for (let i = 0; i < Question.structure.options.length; i++) {
- ToRespond.push(Question.structure.options[i].text)
- }
- return ToRespond;
- case "MSQ":
- // Multiple Choice
- let Answers = Encoding.decode(Question.structure.answer)
- Answers = JSON.parse(Answers)
- let TextArray = []
- for (let i = 0; i < Answers.length; i++) {
- if (Answers[i].text == "") {
- TextArray.push(Question.structure.options[Answers[i]].media[0].url)
- } else {
- TextArray.push(Question.structure.options[Answers[i]].text)
- }
- }
- return TextArray;
- case "MCQ":
- // Single Choice
- let AnswerNum = Encoding.decode(Question.structure.answer)
- let Answer = Question.structure.options[AnswerNum].text
- if (Answer == "") {
- Answer = Question.structure.options[AnswerNum].media[0].url
- }
- return Answer;
- }
- }
- function GetQuestion(Set) {
- for (let v of Object.keys(Set.questions)) {
- v = Set.questions[v]
- switch (GetQuestionType()) {
- case "Both":
- let BothSRC = document.getElementsByClassName("question-media")[0].children[0].src
- BothSRC = BothSRC.slice(0, BothSRC.search("/?w=") - 1)
- if (v.structure.query.media[0]) {
- if (v.structure.query.media[0].url == BothSRC) {
- let BothQuestion = document.getElementsByClassName("question-text")[0].children[0].children[0].innerHTML
- if (BothQuestion.replace(/ /g, "") == v.structure.query.text.replace(/ /g, "")) {
- return (v)
- }
- }
- }
- break
- case "Media":
- let CurrentSRC = document.getElementsByClassName("question-media")[0].children[0].src
- CurrentSRC = CurrentSRC.slice(0, CurrentSRC.search("/?w=") - 1)
- if (v.structure.query.media[0]) {
- if (v.structure.query.media[0].url == CurrentSRC) {
- return (v)
- }
- }
- break
- case "Text":
- let ToSearchA = document.getElementsByClassName("question-text")[0].children[0].children[0].innerHTML
- let ToSearchB = v.structure.query.text
- ToSearchB = ToSearchB.replace('<br/>', '<br>')
- if (ToSearchA == ToSearchB) {
- return (v)
- }
- break
- }
- }
- return "Error: No question found"
- }
- function GetQuestionType() {
- if (document.getElementsByClassName("question-media")[0]) {
- // Media was detected, check if text is too
- if (document.getElementsByClassName("question-text")[0]) {
- // Detected text aswell, send it to the onchanged
- return ("Both")
- } else {
- // Failed to detect text aswell, Media is all that we need to send
- return ("Media")
- }
- } else {
- // Media wasn't detected, no need to check if text was because it has to be
- return ("Text")
- }
- }
- let CurrentQuestionNum = ""
- let LastRedemption
- function QuestionChangedLoop() {
- setTimeout(function() {
- let NewNum = document.getElementsByClassName("current-question")[0]
- let RedemptionQues = document.getElementsByClassName("redemption-marker")[0]
- if (NewNum) {
- if (NewNum.innerHTML != CurrentQuestionNum) {
- if (document.getElementsByClassName("typed-option-input")[0]) {
- let Set = GetSetData()
- let Question = GetQuestion(Set)
- if (Question == "Error: No question found") {
- alert("Failed to find question! This is a weird issue I don't understand, you will just have to answer this question legit for now.")
- } else {
- let Answer = GetAnswer(Question)
- if (Array.isArray(Answer)) {
- // We are on a question with multiple answers
- let ToShow = ""
- for (let x = 0; x < Answer.length; x++) {
- if (ToShow == "") {
- ToShow = Answer[x]
- } else {
- ToShow = ToShow + " | " + Answer[x]
- }
- }
- let ToShowNew = "Press Ctrl+C to copy (Answers are seperated by ' | ')"
- prompt(ToShowNew, ToShow)
- } else {
- let NewAnswer = "Press Ctrl+C to copy."
- prompt(NewAnswer, Answer);
- }
- }
- } else {
- let Choices = document.getElementsByClassName("options-container")[0].children[0].children
- for (let i = 0; i < Choices.length; i++) {
- if (!Choices[i].classList.contains("emoji")) {
- let Choice = Choices[i].children[0].children[0].children[0].children[0]
- let Set = GetSetData()
- let Question = GetQuestion(Set)
- if (Question === "Error: No question found") {
- alert("Failed to find question! This is a weird issue I don't understand, you will just have to answer this question legit for now.")
- } else {
- let Answer = GetAnswer(Question)
- if (Array.isArray(Answer)) {
- // We are on a question with multiple answers
- for (let x = 0; x < Answer.length; x++) {
- if (Choice.innerHTML.replace(/ /g, "") == Answer[x].replace(/ /g, "")) {
- Choice.innerHTML = "<correct-answer-x3Ca8B><u>" + Choice.innerHTML + "</u></correct-answer-x3Ca8B>"
- }
- }
- } else {
- if (Choice.innerHTML.replace(/ /g, "") == Answer.replace(/ /g, "")) {
- Choice.innerHTML = "<correct-answer-x3Ca8B><u>" + Choice.innerHTML + "</u></correct-answer-x3Ca8B>"
- } else if (Choice.style.backgroundImage.slice(5, Choice.style.backgroundImage.length - 2).slice(0, Choice.style.backgroundImage.slice(5, Choice.style.backgroundImage.length - 2).search("/?w=") - 1) == GetAnswer(GetQuestion(GetSetData()))) {
- Choice.innerHTML = "<correct-answer-x3Ca8B><u>Correct Answer</u></correct-answer-x3Ca8B>"
- }
- }
- }
- }
- }
- }
- CurrentQuestionNum = NewNum.innerHTML
- }
- } else if (RedemptionQues) {
- if (LastRedemption != GetQuestion(GetSetData())) {
- let Choices = document.getElementsByClassName("options-container")[0].children[0].children
- for (let i = 0; i < Choices.length; i++) {
- if (!Choices[i].classList.contains("emoji")) {
- let Choice = Choices[i].children[0].children[0].children[0].children[0]
- if (Choice.innerHTML.replace(/ /g, "") == GetAnswer(GetQuestion(GetSetData())).replace(/ /g, "")) {
- Choice.innerHTML = "<correct-answer-x3Ca8B><u>" + Choice.innerHTML + "</u></correct-answer-x3Ca8B>"
- }
- }
- }
- LastRedemption = GetQuestion(GetSetData())
- }
- }
- QuestionChangedLoop()
- }, 100)
- }
- QuestionChangedLoop()
Add Comment
Please, Sign In to add comment