| (function () {
|
| console.log("%c Monkeytype Auto-Typer (Anti-Cheat Bypass) Initiated ", "background: #222; color: #00ff00; font-size: 20px");
|
|
|
|
|
| const CONFIG = {
|
|
|
| startDelay: 50,
|
|
|
|
|
|
|
| typingDelay: 10,
|
|
|
| typeSpaces: true
|
| };
|
|
|
| let isArmed = true;
|
|
|
|
|
| function typeChar(char) {
|
| const target = document.activeElement || document.body;
|
|
|
| let key = char;
|
| let code, keyCode;
|
|
|
|
|
| if (char === ' ') {
|
| code = 'Space';
|
| keyCode = 32;
|
| }
|
|
|
| else if (char === '\n') {
|
| code = 'Enter';
|
| keyCode = 13;
|
| }
|
| else {
|
|
|
| code = `Key${char.toUpperCase()}`;
|
| keyCode = char.charCodeAt(0);
|
| }
|
|
|
| const eventOptions = {
|
| key: key,
|
| code: code,
|
| keyCode: keyCode,
|
| which: keyCode,
|
| bubbles: true,
|
| cancelable: true,
|
| isTrusted: true
|
| };
|
|
|
|
|
| target.dispatchEvent(new KeyboardEvent('keydown', eventOptions));
|
|
|
|
|
| target.dispatchEvent(new KeyboardEvent('keypress', eventOptions));
|
|
|
|
|
| const inputEvent = new InputEvent('input', {
|
| data: char,
|
| inputType: 'insertText',
|
| bubbles: true,
|
| cancelable: true
|
| });
|
| target.dispatchEvent(inputEvent);
|
|
|
|
|
| target.dispatchEvent(new KeyboardEvent('keyup', eventOptions));
|
| }
|
|
|
| async function autoType(text) {
|
| console.log(`Taking over! Typing ${text.length} characters...`);
|
|
|
| for (let i = 0; i < text.length; i++) {
|
| typeChar(text[i]);
|
|
|
| if (CONFIG.typingDelay > 0) {
|
| await new Promise(r => setTimeout(r, CONFIG.typingDelay));
|
| }
|
| }
|
| }
|
|
|
|
|
| const triggerHandler = (e) => {
|
| if (!isArmed) return;
|
|
|
|
|
|
|
|
|
| if (e.key.length === 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
|
| const activeWord = document.querySelector('#words .word.active');
|
| if (!activeWord) return;
|
|
|
| const firstLetterElement = activeWord.querySelector('letter');
|
|
|
|
|
|
|
|
|
| const firstLetter = firstLetterElement ? firstLetterElement.textContent : null;
|
|
|
|
|
| if (firstLetter && e.key === firstLetter) {
|
| isArmed = false;
|
|
|
|
|
| const allWords = document.querySelectorAll('#words .word');
|
| let fullBuffer = "";
|
| let foundActive = false;
|
|
|
| allWords.forEach(word => {
|
| if (word === activeWord) {
|
| foundActive = true;
|
|
|
|
|
|
|
|
|
| const letters = word.querySelectorAll('letter');
|
|
|
| for (let i = 1; i < letters.length; i++) {
|
| fullBuffer += letters[i].textContent;
|
| }
|
| if (CONFIG.typeSpaces) fullBuffer += " ";
|
| } else if (foundActive) {
|
|
|
| const letters = word.querySelectorAll('letter');
|
| letters.forEach(l => fullBuffer += l.textContent);
|
| if (CONFIG.typeSpaces) fullBuffer += " ";
|
| }
|
| });
|
|
|
|
|
| if (fullBuffer.endsWith(" ")) {
|
| fullBuffer = fullBuffer.slice(0, -1);
|
| }
|
|
|
|
|
| window.removeEventListener('keydown', triggerHandler);
|
|
|
| console.log("Trigger detected. Typer starting in " + CONFIG.startDelay + "ms");
|
|
|
| setTimeout(() => {
|
| autoType(fullBuffer);
|
| }, CONFIG.startDelay);
|
| }
|
| }
|
| };
|
|
|
|
|
|
|
| window.addEventListener('keydown', triggerHandler);
|
|
|
| console.log("READY! Start the test by typing the first letter manually.");
|
| })();
|
|
|