Quizlet Match Hacker

The time will freeze and the answers will be the same color

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Quizlet Match Hacker
// @namespace    Ray D. Adams
// @version      1.1
// @description  The time will freeze and the answers will be the same color
// @author       You
// @match        https://quizlet.com/*/*
// @grant        none
// @license MIT
// ==/UserScript==

//Ignore the variable gravityScore because it doesn't work any more, but I decided to keep the code here
var gravityScore,
	 href = window.location.href;
	//<br><br><button class="UIButton" id="customWaitButton" type="button"><span class="UIButton-wrapper"><span>Inject</span></span></button>
(function() {	
	initLoad();
	function initLoad() {
		if (href.includes("quizlet.com")) {
			if (href.includes("/learn")) {
				cAlert('<h2>Game Mode: Learn</h2>Thank you for using Ray D. Adams Quizlet Exploit<br>Without you, this exploit wouldnt be possible.<br><h4>Instructions:</h4>Just wait for this script to finish!<br><br><button class="UIButton" id="learnButton" type="button"><span class="UIButton-wrapper"><span>Inject</span></span></button>');
				getId("learnButton").addEventListener("click", function() {
					document.getElementById("customMessageContainer").remove();
					learn();
				});

			} else if (href.includes("/flashcards")) {
				cAlert('<h2>Game Mode: Flashcards</h2>Thank you for using Ray D. Adams Quizlet Exploit<br>Without you, this exploit wouldnt be possible.<br><h4>Changelog:</h4>+ Added Match time freeze for regular match and diagrams<br>+ Added Gravity score exploit to get ANY score you want!<br>+ Added custom alert box<br>+ Fixed graphics<br>- Removed useless alert boxes.<h4>Instructions:</h4>Umm why are you here? Go cheat somewhere else...<br><br><button class="UIButton" id="flashcardsButton" type="button"><span class="UIButton-wrapper"><span>Inject</span></span></button>');
				getId("flashcardsButton").addEventListener("click", function() {
					document.getElementById("customMessageContainer").remove();
				});
			} else if (href.includes("/write")) {
				cAlert('<h2>Game Mode: Write</h2>Thank you for using Ray D. Adams Exploit<br>Without you, this exploit wouldnt be possible.<br><h4>Instructions:</h4>You dont even have to wait,<br> this is my favorite one to watch!<br><br><button class="UIButton" id="writeButton" type="button"><span class="UIButton-wrapper"><span>Inject</span></span></button>');
				getId("writeButton").addEventListener("click", function() {
					document.getElementById("customMessageContainer").remove();
					write();
				});
			} else if (href.includes("/spell")) {
				cAlert('<h2>Game Mode: Spell</h2>Thank you for using Ray D. Adams Quizlet Exploit<br>Without you, this exploit wouldnt be possible.<br><h4>Instructions:</h4>Hold down enter and wait.<br><br><button class="UIButton" id="spellButton" type="button"><span class="UIButton-wrapper"><span>Inject</span></span></button>');
				getId("spellButton").addEventListener("click", function() {
					document.getElementById("customMessageContainer").remove();
					spell();
				});
			} else if (href.includes("/test")) {
				cAlert('<h2>Game Mode: Test</h2>Thank you for using Ray D. Adams Quizlet Exploit<br>Without you, this exploit wouldnt be possible.<br><br><h4>Instructions:</h4>Right click to toggle answers.<br>(Be subtle when using)<br><br><button class="UIButton" id="testButton" type="button"><span class="UIButton-wrapper"><span>Inject</span></span></button>');
				getId("testButton").addEventListener("click", function() {
					document.getElementById("customMessageContainer").remove();
					testMode();
				});
			} else if (href.includes("/micromatch")) {
				cAlert('<h2>Game Mode: Micromatch</h2>Thank you for using Ray D. Adams Quizlet Exploit<br>Without you, this exploit wouldnt be possible.<br><h4>Instructions:</h4>The timer will be paused when at choosen time.<br>The answers will also be highlighted for you.<br>At your leisure, solve the questions.<br><h4>Match Time: </h4><input type="text" id="matchTimeInput" value="0"></input><br><br><button class="UIButton" id="micromatchButton" type="button"><span class="UIButton-wrapper"><span>Inject</span></span></button>');
				getId("micromatchButton").addEventListener("click", function() {
					document.getElementById("customMessageContainer").remove();
					micromatch();
				});
			} else if (href.includes("/match")) {
				cAlert('<h2>Game Mode: Match</h2>Thank you for using Ray D. Adams Quizlet Exploit<br>Without you, this exploit wouldnt be possible.<br><h4>Instructions:</h4>The timer will be paused when at choosen time.<br>The answers will also be highlighted for you.<br>At your leisure, solve the questions.<br><h4>Match Time: </h4><input type="text" id="matchTimeInput" value="0"></input><br><br><button class="UIButton" id="matchButton" type="button"><span class="UIButton-wrapper"><span>Inject</span></span></button>');
				getId("matchButton").addEventListener("click", function() {
					document.getElementById("customMessageContainer").remove();
					match();
				});
			} else if (href.includes("/gravity")) {
				try {
					document.getElementsByClassName("UIModal is-white is-open")[0].style.display = "none"
				} catch (e) {}
				cAlert('<h2>Game Mode: Gravity</h2>Thank you for using Ray D. Adams Quizlet Exploit<br>Without you, this exploit wouldnt be possible.<br> <h4>What score would you like?: <input type="number" id="gravityScoreInput" value="4294967295" onchange="gravityScore = parseInt(this.value);"></input></h4><br><br><button class="UIButton" id="gravityButton" type="button"><span class="UIButton-wrapper"><span>Inject</span></span></button>');
				getId("gravityButton").addEventListener("click", function() {
					document.getElementById("customMessageContainer").remove();
					gravity();
				});

			} else {
			}
		}

		function testMode() {
			var question = getClass("TermText notranslate lang-en");
			for (var i = 0; i < question.length; i++) {
				question[i].innerHTML += '<br><small style="font-weight: bold; display: block;" class="answers">' + findAnswerGlobal(question[i].innerHTML) + "</small>";
			}
			window.oncontextmenu = function(e) {
				e.preventDefault();
				var answer = getClass("answers");
				if (answer[0].style.display == "block") {
					for (var i = 0; i < answer.length; i++) {
						answer[i].style.display = "none";
					}
				} else {
					for (var i = 0; i < answer.length; i++) {
						answer[i].style.display = "block"
					}
				}
			}
		}
		
		function gravity() {
			if (gravityScore === undefined) {
				gravityScore = parseInt(prompt("Enter exact score:"));
			}
							
			var t = window.QJP([], [], ["hyek"]).a,
			n = t.grader.grade.bind(t.grader);
			t._startGame(), t.dataMap = t.dataMap.update("points", function(t) {
				return gravityScore;
			});
			for (var o = 0; o < 99; o++) t._advanceLevel();

			function s(e) {
				t.grader.grade = function(e, t, n) {
					return !0;
				}, e(), t.grader.grade = n
			}
			s(function() {
				console.log(null);
			});
			var a = t._promptCopyAnswer.bind(t);
			t._promptCopyAnswer = function(e) {
				a(e), setTimeout(function() {
					s(function() {
						t._checkCopiedAnswer({
							liveTermId: e,
							answer: ""
						});
					});
				}, 0);
			};
		}

		function write() {
			//This is sad... but works better...
			var remaining = parseInt(document.getElementsByClassName("LearnModeProgressBar-value")[0].innerHTML);
			for (var i = 0; i < remaining; i++) {
				getId("user-answer").value = Math.random();
				getId("js-learnModeAnswerButton").click();
				getClass("js-learnModeOverrideIncorrect")[0].click();
			}
			/*
			var buttons = document.querySelectorAll("button"),
				 span = document.querySelectorAll("span");

			if (getId("user-answer")) {
				getId("user-answer").disabled = true;
				getId("user-answer").value = findAnswerGlobal(getClass("qDef lang-en TermText")[0].innerHTML);
				for (var i = 0; i < buttons.length; i++) {
					if (buttons[i].childNodes[0].innerHTML == "Answer") {
						buttons[i].click();
					}
				}
			try {
				for (var i = 0; i < span.length; i++) {
					if (span[i].childNodes[0].childNodes[0].innerHTML == "Override: I was right") {
						span[i].click;
					}
				}
			} catch (e) {}
				write();
			} else {
				for (var i = 0; i < buttons.length; i++) {
					if (buttons[i].innerHTML == "Press any key to continue") {
						buttons[i].click();
					} else if (buttons[i].innerHTML == "Start Over") {
						return 1;
					}
				}
				setTimeout(write, 0);
			}
			*/
		}

		function spell() {
			if (getClass("SpellModeControls-progressValue")[0].innerHTML == "100%") {
				return 1;
			}
			if (getId("js-spellInput") !== null) {
				getId("js-spellInput").value = findAnswerGlobal(getClass("qDef lang-en TermText")[0].innerHTML);
				setTimeout(spell, 10);
			}
		}

		function match() {
			button = getClass("UIButton UIButton--hero")[0], button && button.click();
			setTimeout(function() {
				var matchLoop = setInterval(function() {
					waitForMatch();
				}, 0);
				
				function waitForMatch() {
					if (getClass("MatchModeQuestionScatterTile") || getClass("MatchModeQuestionGridBoard-tile")) {
						for (var F = setTimeout(";"), i = 0; i < F; i++) clearTimeout(i);
						var tiles = getClass("MatchModeQuestionScatterTile");
						var colors = ["#FF0000", "#FF0000", "#FF6600", "#FF6600", "#FFFF00", "#FFFF00", "#00FF00", "#00FF00", "#00FFFF", "#00FFFF", "#0033FF", "#0033FF", "#FF00FF", "#FF00FF", "#CC00FF", "#CC00FF", "#6E0DD0", "#6E0DD0", "#C0C0C0", "#C0C0C0", "#FFFFFF", "#FFFFFF", "#A52A2A", "#A52A2A", "#F6CFFF", "#F6CFFF", "#CFD9FF", "#CFD9FF", "#FBFFA3", "#FBFFA3", "#FFD1A3", "#FFD1A3", "#710000", "#710000"];
						for (var i = 0; i < tiles.length; i++) {
							tiles[i].style.backgroundColor = colors[i];
							for (var j = 0; j < tiles.length; j++) {
								if (tiles[j].childNodes[0].innerHTML == findAnswerGlobal(tiles[j].childNodes[0].innerHTML)) {
									tiles[j].style.backgroundColor = colors[i];
								}
							}
						}
						clearTimeout(matchLoop);
					}
				}
			}, 500);
		}
			
		function micromatch() {
			button = getClass("UIButton UIButton--hero")[0], button && button.click();
			setTimeout(function() {
				setTimeout(function() {
					for (var F = setTimeout(";"), o = 0; o < F; o++) clearTimeout(o);
				}, 0);

				var tiles = getClass("MatchModeQuestionGridTile-text"); //[0].childNodes[0].innerHTML
				for (var i = 0; i < tiles.length; i++) {
					
					if (getClass("MatchModeQuestionGridTile")[i].classList[1] != "is-selected") {
						click(getClass("MatchModeQuestionGridBoard-tile")[i].childNodes[0], "pointerdown");
					}
					for (var j = 0; j < tiles.length; j++) {
						if (tiles[j].childNodes[0].innerHTML == findAnswerGlobal(tiles[i].childNodes[0].innerHTML)) {
							if (getClass("MatchModeQuestionGridTile")[j].classList[1] != "is-selected") {
								click(getClass("MatchModeQuestionGridBoard-tile")[j].childNodes[0], "pointerdown");
								j = tiles.length;
							}
						}
					}
				}
				function click(e, t) {
					if (e.fireEvent) e.fireEvent("on" + t);
					else {
						var n = document.createEvent("Events");
						n.initEvent(t, !0, !1), e.dispatchEvent(n);
					}
				}
			}, 500);
		}

		function learn() {
			if (getClass("ProgressSegmentedSemicircle-percent")[0].innerHTML = "100%") {
				return 1;
			}
			checkCheckbox();
			if (getClass("AssistantMultipleChoiceQuestionPromptView-inner")[0] !== undefined) {
				var answer = findAnswerGlobal(getClass("FormattedText notranslate TermText lang-en")[0].innerHTML);
				var q1 = getClass("FormattedText notranslate TermText lang-en")[1];
				var q2 = getClass("FormattedText notranslate TermText lang-en")[2];
				var q3 = getClass("FormattedText notranslate TermText lang-en")[3];
				var q4 = getClass("FormattedText notranslate TermText lang-en")[4];
				if (answer == q1.innerHTML) {
					q1.click();
				} else if (answer == q2.innerHTML) {
					q2.click();
				} else if (answer == q3.innerHTML) {
					q3.click();
				} else if (answer == q4.innerHTML) {
					q4.click();
				} else {
					console.error("ERROR: Unable to find / click answer");
					return 0;
				}
				getClass("UIButton")[4].click();
				setTimeout(learn, 10);
			} else {
				setTimeout(learn, 100);
			}
		}

		function checkCheckbox() {
			document.getElementsByClassName("UIButton UIButton--whiteBorder UIButton--fill")[0].click();
			if (document.getElementsByClassName("UICheckbox-input")[3].checked && document.getElementsByClassName("UICheckbox-input")[2].checked !== true && document.getElementsByClassName("UICheckbox-input")[4].checked !== true) { 
				document.getElementsByClassName("UIButton UIButton--inverted")[0].click();
				return 1;
			}  
			if (document.getElementsByClassName("UICheckbox-input")[4].checked === true) {
				document.getElementsByClassName("UICheckbox-input")[4].click();	
			} 
			if (document.getElementsByClassName("UICheckbox-input")[2].checked === true) {
				document.getElementsByClassName("UICheckbox-input")[2].click();
			} 
			if (document.getElementsByClassName("UICheckbox-input")[3].checked === false) {
				document.getElementsByClassName("UICheckbox-input")[3].click();	
			}
			document.getElementsByClassName("UIButton UIButton--inverted")[0].click();
		}
		
		function findAnswerGlobal(question) {
			if (Quizlet.assistantModeData !== undefined) { //Quizlet.assistantModeData.terms
				return getAnswer(Quizlet.assistantModeData.terms, question);
			} else if (Quizlet.learnGameData !== undefined) { //Quizlet.learnGameData.allTerms
				return getAnswer(Quizlet.learnGameData.allTerms, question);
			} else if (Quizlet.testModeData !== undefined) { //Quizlet.testModeData.terms
				return getAnswer(Quizlet.testModeData.terms, question);
			} else if (Quizlet.spellModeData !== undefined) { //Quizlet.spellModeData.spellGameData.termsById
				return getAnswer(Quizlet.spellModeData.spellGameData.termsById, question);
			} else if (Quizlet.matchModeData !== undefined) { //Quizlet.matchModeData.terms
				return getAnswer(Quizlet.matchModeData.terms, question);
			} else if (Quizlet.gravityModeData !== undefined) { //Quizlet.gravityModeData.terms
				return getAnswer(Quizlet.gravityModeData.terms, question);
			} else {
				return 0;
			}

			function getAnswer(s, t) {
				var e = s;
				if (t.indexOf("_") != "-1") {
					if (t.slice(-1) == "_") { //Underscore at end
						for (var i=0; i<e.length; i++) {
							if (e[i].definition.indexOf(getClass("qDef lang-en TermText")[0].innerHTML.split("_")[0]) != "-1") {
								return e[i].word;
							} else if (e[i].word.indexOf(getClass("qDef lang-en TermText")[0].innerHTML.split("_")[0]) != "-1") {
								return e[i].definition;
							}
						}
					} else if (t[0] == "_") {
						for (var i=0; i<e.length; i++) { //Underscore at start
							if (e[i].definition.indexOf(getClass("qDef lang-en TermText")[0].innerHTML.split("_").slice(-1)[0]) != "-1") {
								return e[i].word;
							} else if (e[i].word.indexOf(getClass("qDef lang-en TermText")[0].innerHTML.split("_").slice(-1)[0]) != "-1") {
								return e[i].definition;
							}
						}
					} else {
						for (var i=0; i<e.length; i++) { //Underscore in middle
							if (e[i].definition.indexOf(getClass("qDef lang-en TermText")[0].innerHTML.split("_").slice(-1)[0]) != "-1" && e[i].definition.indexOf(getClass("qDef lang-en TermText")[0].innerHTML.split("_")[0]) != "-1") {
								return e[i].word;
							} else if (e[i].word.indexOf(getClass("qDef lang-en TermText")[0].innerHTML.split("_").slice(-1)[0]) != "-1" && e[i].word.indexOf(getClass("qDef lang-en TermText")[0].innerHTML.split("_")[0]) != "-1") {
								return e[i].definition;
							}
						}
					}
				}
				var answers = [];
				for (var i=0; i<e.length; i++) {
					e[i].definition = e[i].definition.replace("\n", "<br>");
					e[i].word = e[i].word.replace("\n", "<br>");
					if (t == e[i].word) {
						answers.push(e[i].definition);
					} else if (t == e[i].definition) {
						answers.push(e[i].word);
					}
				}
				return answers[Math.floor(Math.random() * answers.length)];
			}
		}
	}
	
	function cAlert(message) {
		var html = '<div class="UIModal is-white is-open" id="customMessageContainer" role="document" tabindex="-1"> <div class="UIModal-box"> <div class="UIModalHeader"> <div class="UIModalHeader-wrapper"> <span class="UIModalHeader-close"> <div class="UIModalHeader-closeIconButton"> <span class="UIIconButton"> <button class="UIButton UIButton--inverted" type="button" id="customCloseButton" onclick="document.getElementById(&quot;customMessageContainer&quot;).remove();"> <span class="UIButton-wrapper"> <svg class="UIIcon UIIcon--x-thin"> <noscript></noscript> <use xlink:href="#x-thin"></use> <noscript></noscript> </svg> </span> </button> </span> </div> </span> <div class="UIModalHeader-childrenWrapper"> <h3 class="UIHeading UIHeading--three"><span id="customTitle">Ray D. Adams Quizlet Exploit</span></h3> </div> </div> </div> <div class="UIModalBody"> <div class="UIDiv SetPageEmbedModal-content"> <div> <p class="UIParagraph"><span id="customMessage">'+message+'</span></p></div></div></div></div></div>';
		var j = document.createElement('div');
		j.innerHTML = html;
		document.body.appendChild(j);
	}
})();

function getId(id) {
	return document.getElementById(id);
}

function getClass(id) {
	return document.getElementsByClassName(id);
}

//var learnInsertJs = "function figure(match) {termsWord = window.Quizlet.assistantModeData.terms.filter(function z(x) {return x.word == match}); termsDefinition = window.Quizlet.assistantModeData.terms.filter(function z(x) {return x.definition === match}); if (termsWord.length > 0) {return termsWord[0].definition;}; if (termsDefinition.length > 0) {return termsDefinition[0].word;}}; function solve() {input = document.querySelector('#AssistantModeTarget > div > div > div > div.ModeLayout-content > div > span:nth-child(2) > div > div > div.AssistantScrollableViewLayout-content > div > div.AssistantMultipleChoiceQuestionPromptView-promptArea > div > div > div > span').innerHTML; output = figure(input); outs = document.querySelectorAll('.AssistantMultipleChoiceQuestionPromptView-termOptionInner > div > span'); for (var i = 0; i < outs.length; i++) {if (outs[i].innerText === output) {outs[i].click();}}; document.querySelector('#AssistantModeTarget > div > div > div > div.ModeLayout-content > div > span:nth-child(3) > div > div.AssistantFixedActionLayout-action > div > button').click(); if (document.querySelector('#AssistantModeTarget > div > div > div > div.ModeLayout-controls > div > div > div > div.ModeControls-main > div.ModeControls-progress > div > div > div > svg > text.ProgressSegmentedSemicircle-text.ProgressSegmentedSemicircle-progressText > tspan').innerHTML.slice(0, -1) !== '100') {setTimeout(solve, 10);};}; solve();"

//backupOptionsSet = "/*document.querySelector('#AssistantModeTarget > div > div > div > div.ModeLayout-controls > div > div > div > div.ModeControls-main > div.ModeControls-actions > div > button > span > span').click(); if (document.querySelector('body > div:nth-child(4) > div.UIModal.is-white.is-open > div > div.UIModalBody > div > div:nth-child(3) > div > div > div > div > div > div:nth-child(3) > label > input').checked) {document.querySelector('body > div:nth-child(4) > div.UIModal.is-white.is-open > div > div.UIModalBody > div > div:nth-child(3) > div > div > div > div > div > div:nth-child(3) > label > input').click();}; if (document.querySelector('body > div:nth-child(4) > div.UIModal.is-white.is-open > div > div.UIModalBody > div > div:nth-child(3) > div > div > div > div > div > div:nth-child(1) > label > input').checked) {document.querySelector('body > div:nth-child(4) > div.UIModal.is-white.is-open > div > div.UIModalBody > div > div:nth-child(3) > div > div > div > div > div > div:nth-child(1) > label > input').click();}; document.querySelector('body > div:nth-child(4) > div.UIModal.is-white.is-open > div > div.UIModalHeader > div > span > div > span > button > span').click();*/"
/*
function solveLearn() {
    script = document.createElement('script');
    script.textContent = learnInsertJs;
    (document.head||document.documentElement).appendChild(script);
    script.remove();
}

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.run == "write") {
      iters = parseInt($(".LearnModeProgressBar-value").html())
      for (var i = 0; i < iters; i++) {
        
        $("#user-answer")[0].value = "*"; 
        $("#js-learnModeAnswerButton")[0].click();
        document.evaluate('//*[@id="js-learnModeInner"]/div[1]/div/div[2]/div/div[2]/span/a', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();
      }
      sendResponse({out: 0});
    }
    else if (request.run === "learn") {
      solveLearn();
      sendResponse({out: 0});
    }
    else {
      sendResponse({out: 1});
    }
});
*/