-
-
Save Domiii/52cf49d780ec8c9f01771973c36197af to your computer and use it in GitHub Desktop.
/** | |
* This script types for you automatically on www.typingclub.com: | |
* 1. Open the website | |
* 2. Blaze past the tutorials | |
* 3. Go into a level | |
* 4. Open Console | |
* 5. Paste the script and press ENTER | |
*/ | |
// NOTE: When delay (in ms between two strokes) is too low, the site might bug out and the result page will not be shown | |
const minDelay = 60; | |
const maxDelay = 60; | |
const keyOverrides = { | |
[String.fromCharCode(160)]: ' ' // convert hardspace to normal space | |
}; | |
function getTargetCharacters() { | |
const els = Array.from(document.querySelectorAll('.token span.token_unit')); | |
const chrs = els | |
.map(el => { | |
// get letter to type from each letter DOM element | |
if (el.firstChild?.classList?.contains('_enter')) { | |
// special case: ENTER | |
return '\n'; | |
} | |
let text = el.textContent[0]; | |
return text; | |
}) | |
.map(c => keyOverrides.hasOwnProperty(c) ? keyOverrides[c] : c); // convert special characters | |
return chrs; | |
} | |
function recordKey(chr) { | |
// send it straight to the internal API | |
window.core.record_keydown_time(chr); | |
} | |
function sleep(ms) { | |
return new Promise(r => setTimeout(r, ms)); | |
} | |
async function autoPlay(finish) { | |
const chrs = getTargetCharacters(); | |
for (let i = 0; i < chrs.length - (!finish); ++i) { | |
const c = chrs[i]; | |
recordKey(c); | |
//console.log(c, c.charCodeAt()); | |
await sleep(Math.random() * (maxDelay - minDelay) + minDelay); | |
} | |
} | |
// ############################################################################################################ | |
// old utilities | |
// ############################################################################################################ | |
// /** | |
// * @see https://stackoverflow.com/questions/8942678/keyboardevent-in-chrome-keycode-is-0/12522752#12522752 | |
// */ | |
// function simulateKey(chr, el) { | |
// _simulateKey(chr, 'keydown', el); | |
// _simulateKey(chr, 'keypress', el); | |
// } | |
// function _simulateKey(chr, type, el) { | |
// var eventObj = document.createEventObject ? | |
// document.createEventObject() : document.createEvent("Events"); | |
// if (eventObj.initEvent) { | |
// eventObj.initEvent(type || "keydown", true, true); | |
// } | |
// let keyCode = chr.charCodeAt(0); | |
// eventObj.key = chr[0]; | |
// eventObj.keyCode = keyCode; | |
// eventObj.which = keyCode; | |
// eventObj.isTrusted = true; | |
// el = el || document.body; | |
// // console.log(keyCode, eventObj); | |
// el.dispatchEvent ? el.dispatchEvent(eventObj) : el.fireEvent("onkeydown", eventObj); | |
// } | |
// document.addEventListener("keydown", function (e) { | |
// console.log('down', e); | |
// }); | |
// document.addEventListener("keypress", function (e) { | |
// console.log('press', e); | |
// }); | |
//$($('.menu-btn')[0].parentNode).prepend('<button onclick=\'simulateKeyPress("c")\'>sim</button>'); | |
// simulateKey('a', $('input')[0]); | |
// ############################################################################################################ | |
// go! | |
// ############################################################################################################ | |
autoPlay(true); |
Thanks it helped
// NOTE: When delay (in ms between two strokes) is too low, the site might bug out and the result page will not be shown
const minDelay = 60;
const maxDelay = 60;
const keyOverrides = {
[String.fromCharCode(160)]: ' ' // convert hardspace to normal space
};
function getTargetCharacters() {
const els = Array.from(document.querySelectorAll('.token span.token_unit'));
const chrs = els
.map(el => {
// get letter to type from each letter DOM element
if (el.firstChild?.classList?.contains('_enter')) {
// special case: ENTER
return '\n';
}
let text = el.textContent[0];
return text;
})
.map(c => keyOverrides.hasOwnProperty(c) ? keyOverrides[c] : c); // convert special characters
return chrs;
}
function recordKey(chr) {
// send it straight to the internal API
window.core.record_keydown_time(chr);
}
function sleep(ms) {
return new Promise(r => setTimeout(r, ms));
}
async function autoPlay(finish) {
const chrs = getTargetCharacters();
for (let i = 0; i < chrs.length - (!finish); ++i) {
const c = chrs[i];
recordKey(c);
//console.log(c, c.charCodeAt());
await sleep(Math.random() * (maxDelay - minDelay) + minDelay);
}
}
// ############################################################################################################
// old utilities
// ############################################################################################################
// /**
// * @see https://stackoverflow.com/questions/8942678/keyboardevent-in-chrome-keycode-is-0/12522752#12522752
// */
// function simulateKey(chr, el) {
// _simulateKey(chr, 'keydown', el);
// _simulateKey(chr, 'keypress', el);
// }
// function _simulateKey(chr, type, el) {
// var eventObj = document.createEventObject ?
// document.createEventObject() : document.createEvent("Events");
// if (eventObj.initEvent) {
// eventObj.initEvent(type || "keydown", true, true);
// }
// let keyCode = chr.charCodeAt(0);
// eventObj.key = chr[0];
// eventObj.keyCode = keyCode;
// eventObj.which = keyCode;
// eventObj.isTrusted = true;
// el = el || document.body;
// // console.log(keyCode, eventObj);
// el.dispatchEvent ? el.dispatchEvent(eventObj) : el.fireEvent("onkeydown", eventObj);
// }
// document.addEventListener("keydown", function (e) {
// console.log('down', e);
// });
// document.addEventListener("keypress", function (e) {
// console.log('press', e);
// });
//$($('.menu-btn')[0].parentNode).prepend('<button onclick='simulateKeyPress("c")'>sim');
// simulateKey('a', $('input')[0]);
// ############################################################################################################
// go!
// ############################################################################################################
autoPlay(true);
I worked your code so that it always goes to the next level automatically.
can you send it??
Sorry but how do i start the thing like what i copy and where i paste it please tell me what to come or put what i copy in chat thank you
can you make an auto enter?
thanks for the script! i use it every lesson and is very nice!!!
lehengo mensajea nik ez dut idatzi, ez sinetsi faborez
thanks for the script! i use it every lesson and is very nice!!!
lehengo mensajea nik ez dut idatzi, ez sinetsi faborez
For me this worked just not on the games. Now I'm #1 on the school leaderboard lmao
is there any way to make wpm faster?
very useful and cool, works perfectly for me, but is there anyway to make it so you dont have to paste it in every time? im new to this stuff
Everything is fine with the code except it doesn't work on mini games so you have to type those other than that it works.
How can we make it work for Arabic writing? it just spams any writing and it keeps repeating because the accuracy isn't right
make it press enter automatically
// NOTE: When delay (in ms between two strokes) is too low, the site might bug out and the result page will not be shown const minDelay = 60; const maxDelay = 60;
const keyOverrides = { [String.fromCharCode(160)]: ' ' // convert hardspace to normal space };
function getTargetCharacters() { const els = Array.from(document.querySelectorAll('.token span.token_unit')); const chrs = els .map(el => { // get letter to type from each letter DOM element if (el.firstChild?.classList?.contains('_enter')) { // special case: ENTER return '\n'; } let text = el.textContent[0]; return text; }) .map(c => keyOverrides.hasOwnProperty(c) ? keyOverrides[c] : c); // convert special characters return chrs; }
function recordKey(chr) { // send it straight to the internal API window.core.record_keydown_time(chr); }
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
async function autoPlay(finish) { const chrs = getTargetCharacters(); for (let i = 0; i < chrs.length - (!finish); ++i) { const c = chrs[i]; recordKey(c); //console.log(c, c.charCodeAt()); await sleep(Math.random() * (maxDelay - minDelay) + minDelay); } }
// ############################################################################################################ // old utilities // ############################################################################################################
// /** // * @see https://stackoverflow.com/questions/8942678/keyboardevent-in-chrome-keycode-is-0/12522752#12522752 // */ // function simulateKey(chr, el) { // _simulateKey(chr, 'keydown', el); // _simulateKey(chr, 'keypress', el); // } // function _simulateKey(chr, type, el) { // var eventObj = document.createEventObject ? // document.createEventObject() : document.createEvent("Events");
// if (eventObj.initEvent) { // eventObj.initEvent(type || "keydown", true, true); // }
// let keyCode = chr.charCodeAt(0);
// eventObj.key = chr[0]; // eventObj.keyCode = keyCode; // eventObj.which = keyCode; // eventObj.isTrusted = true;
// el = el || document.body;
// // console.log(keyCode, eventObj);
// el.dispatchEvent ? el.dispatchEvent(eventObj) : el.fireEvent("onkeydown", eventObj); // }
// document.addEventListener("keydown", function (e) { // console.log('down', e); // }); // document.addEventListener("keypress", function (e) { // console.log('press', e); // }); //$(
$('.menu-btn')[0].parentNode).prepend('sim'); // simulateKey('a', $ ('input')[0]);// ############################################################################################################ // go! // ############################################################################################################
autoPlay(true);
doesnt work
I worked your code so that it always goes to the next level automatically.
where
it worked, i love it , my wpm is 140 (x_x)
thank you! it worked!
wait, it doesn't work apple game and ninja game??
my friend made a more efficientvesint of it ill share it soon
GUYS I HAVE THE MOVE TO NEXT LEVEL VERISON MADE BY ME!
// NOTE: When delay (in ms between two strokes) is too low, the site might bug out and the result page will not be shown
// made by voids-plan!
const minDelay = 60;
const maxDelay = 60;
const keyOverrides = {
[String.fromCharCode(160)]: ' ' // convert hardspace to normal space
};
function getTargetCharacters() {
const els = Array.from(document.querySelectorAll('.token span.token_unit'));
const chrs = els
.map(el => {
if (el.firstChild?.classList?.contains('_enter')) {
return '\n'; // special case: ENTER
}
let text = el.textContent[0];
return text;
})
.map(c => keyOverrides.hasOwnProperty(c) ? keyOverrides[c] : c); // convert special characters
return chrs;
}
function recordKey(chr) {
// send it straight to the internal API
window.core.record_keydown_time(chr);
}
function sleep(ms) {
return new Promise(r => setTimeout(r, ms));
}
async function autoPlay() {
const chrs = getTargetCharacters();
for (let i = 0; i < chrs.length; ++i) {
const c = chrs[i];
recordKey(c);
await sleep(Math.random() * (maxDelay - minDelay) + minDelay);
}
// Click the "Continue" button after finishing typing
await sleep(500); // Short pause before clicking continue
const continueButton = document.querySelector('button[aria-label="Continue"]');
if (continueButton) {
continueButton.click();
}
// Start typing for the next level
await sleep(1000);
autoPlay();
}
// Start the autoplay
autoPlay();
can you make it for tap touche pls
Can you make it be able to tab and enter please
I'm doing a test, when i paste the code in it just says undefined.
the
const minDelay
const maxDelay
highest is 47 which is about 200 WPM
I'm doing a test, when i paste the code in it just says undefined.
did you paste it in console of inspect element?
put it in the bookmark
Also for anyone wanting to know how to make it so it automatically presses enter and auto starts the next lesson, I have the code pasted right here:
Just be careful on using it like if you wanna stop it you actually have to just reload the tab
It also only works on lessons, not games.
One final thing, the second you finish the lesson it waits for about 7 seconds to have all the stars, and points rallied up and then it presses enter, then waits two seconds for the level to load and goes on, and so forth, etc.
CODE:
const minDelay = 60;
const maxDelay = 60;
const keyOverrides = {
[String.fromCharCode(160)]: ' ',
};
function getTargetCharacters() {
const tokenElements = Array.from(document.querySelectorAll('.token span.token_unit'));
return tokenElements.map((element) => {
if (element.firstChild?.classList?.contains('_enter')) {
return '\n';
}
let text = element.textContent[0];
return keyOverrides.hasOwnProperty(text) ? keyOverrides[text] : text;
});
}
function recordKey(character) {
window.core.record_keydown_time(character);
}
function sleep(milliseconds) {
return new Promise((resolve) => setTimeout(resolve, milliseconds));
}
function pressEnter() {
const enterEvent = new KeyboardEvent('keydown', {
bubbles: true,
cancelable: true,
keyCode: 13,
key: 'Enter',
});
document.body.dispatchEvent(enterEvent);
}
async function autoPlay() {
while (true) {
const characters = getTargetCharacters();
for (let i = 0; i < characters.length; i++) {
const character = characters[i];
recordKey(character);
await sleep(Math.random() * (maxDelay - minDelay) + minDelay);
}
await sleep(7000);
pressEnter();
await sleep(2000); // wait for the next lesson to load
}
}
autoPlay();
can you make one for the ninja games?
Can you send the code please