-
-
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); |
zane2342
commented
Jan 21, 2026
via email
The script is good and it words but it can't detect enter and it cant play the minigames pls fix it if you can
The games and the key ""enter doesnt work on teh bot
i will try to fix mingigames.
can u also make one for the edclub vocabulary and spelling
If you can
About 95 Wmp :(async () => {
const minDelay = 70;
const maxDelay = 110;
const inputTarget = document.querySelector('input, textarea, [contenteditable="true"]') || document.body;
function getTargetCharacters() {
const els = Array.from(document.querySelectorAll('.token span.token_unit'));
return els.map(el => {
if (el.classList.contains('_enter')) return 'Enter';
let char = el.textContent[0];
// Convert special space (char 160) to a standard space
return char.charCodeAt(0) === 160 ? ' ' : char;
});
}
const chars = getTargetCharacters();
console.log(Starting... Found ${chars.length} characters.);
for (const char of chars) {
const key = char === 'Enter' ? 'Enter' : char;
const keyCode = key === 'Enter' ? 13 : key.charCodeAt(0);
const eventSettings = {
key: key,
keyCode: keyCode,
which: keyCode,
code: key === ' ' ? 'Space' : (key === 'Enter' ? 'Enter' : `Key${key.toUpperCase()}`),
bubbles: true,
cancelable: true,
composed: true
};
inputTarget.dispatchEvent(new KeyboardEvent('keydown', eventSettings));
inputTarget.dispatchEvent(new KeyboardEvent('keypress', eventSettings));
// Forcing the space injection
if (inputTarget.value !== undefined) {
inputTarget.value += (key === 'Enter' ? '' : key);
inputTarget.dispatchEvent(new Event('input', { bubbles: true }));
}
inputTarget.dispatchEvent(new KeyboardEvent('keyup', eventSettings));
await new Promise(r => setTimeout(r, Math.random() * (maxDelay - minDelay) + minDelay));
}
console.log("Finished!");
})();
what does the upper code do
hey if anyone could help that would be great how do i use the newer code cause when i try to put it into inspect element it wont work please help! :)
it keeps saying unexpected number / invalid token
locked aria-hidden on an element because its descendant retained focus. The focus must not be hidden from assistive technology users. Avoid using aria-hidden on a focused element or its ancestor. Consider using the inert attribute instead, which will also prevent focus. For more details, see the aria-hidden section of the WAI-ARIA specification at https://w3c.github.io/aria/#aria-hidden.
Element with focus:
Ancestor with aria-hidden:
it wont even let me say allow pasting and this is a personal laptop
?
it keeps saying unexpected number / invalid token
same I also keep on getting this notice
Anyone got an updated one?