// ==UserScript==
// @name Nitro Type Bot
// @namespace https://singdev.wixsite.com/sing-developments
// @version 2
// @description This script is used for typing the text on nitrotype.com/race directly into the browser.
// @match https://www.nitrotype.com/race/*
// @match https://www.nitrotype.com/race
// @license MIT
// @downloadURL https://update.greasyfork.org/scripts/476070/Nitro%20Type%20Bot.user.js
// @updateURL https://update.greasyfork.org/scripts/476070/Nitro%20Type%20Bot.meta.js
// ==/UserScript==
function typeRaceText() {
// Wait for the race text to become available
let e = setInterval(function () {
const raceTextElement = document.querySelector(".dash-copy");
if (raceTextElement) {
const raceText = raceTextElement.textContent;
typeTextInBrowser(raceText, 80, 98);
clearInterval(e);
}
}, 1000);
}
function typeTextInBrowser(text, wordsPerMinute, accuracy) {
const inputElement = document.querySelector(".race-input-field");
if (inputElement) {
// Calculate typing delay based on words per minute
const words = text.split(' ').filter(word => word.length > 0);
const wordCount = words.length;
const typingDelay = (60 / wordsPerMinute) * 1000; // Delay in milliseconds
let currentIndex = 0;
const typeNextWord = () => {
if (currentIndex < wordCount) {
const word = words[currentIndex];
const typedCharacters = inputElement.value.length;
const charactersToType = Math.ceil((word.length * accuracy) / 100);
const characters = word.slice(0, charactersToType);
inputElement.value += characters;
inputElement.dispatchEvent(new Event("input"));
currentIndex++;
// Schedule the next word to be typed after the typing delay
setTimeout(typeNextWord, typingDelay);
}
};
// Start typing the first word
typeNextWord();
}
}
function checkForDisqualified() {
setInterval(function () {
const raceErrorModal = document.querySelector(".modal--raceError");
if (raceErrorModal) {
reloadPage();
}
}, 10000);
}
function reloadPage() {
window.location.reload();
}
function checkForRaceResults() {
// Wait for the race results
let e = setInterval(function () {
const raceResultsElement = document.querySelector(".raceResults");
if (raceResultsElement) {
reloadPage();
clearInterval(e);
}
}, Math.floor(1000 * Math.random()));
}
function checkForContinueButton() {
setInterval(function () {
const continueButtons = document.querySelectorAll(".btn.btn--primary.btn--fw");
const continueButton = Array.from(continueButtons).find(function (e) {
return e.textContent.includes("ntinue");
});
if (continueButton) {
reloadPage();
} else {
console.log("Didn't find continue button.");
}
}, 10000);
}
function refreshJustInCase() {
setTimeout(function () {
window.location.href = "https://www.nitrotype.com/race";
}, 80000);
}
// Start the script by checking for race text
typeRaceText();
checkForDisqualified();
checkForRaceResults();