converted to ts

This commit is contained in:
Miodec 2022-02-21 01:28:42 +01:00
parent e65f514a45
commit 684e3cb456

View file

@ -10,7 +10,7 @@ import * as TestState from "../test/test-state";
let challengeLoading = false;
export function clearActive() {
export function clearActive(): void {
if (
TestState.activeChallenge &&
!challengeLoading &&
@ -21,10 +21,12 @@ export function clearActive() {
}
}
export function verify(result) {
export function verify(
result: MonkeyTypes.Result<MonkeyTypes.Mode>
): string | null {
try {
if (TestState.activeChallenge) {
let afk = (result.afkDuration / result.testDuration) * 100;
const afk = (result.afkDuration / result.testDuration) * 100;
if (afk > 10) {
Notifications.add(`Challenge failed: AFK time is greater than 10%`, 0);
@ -39,81 +41,87 @@ export function verify(result) {
return TestState.activeChallenge.name;
} else {
let requirementsMet = true;
let failReasons = [];
for (let requirementType in TestState.activeChallenge.requirements) {
if (requirementsMet == false) return;
let requirementValue =
TestState.activeChallenge.requirements[requirementType];
const failReasons = [];
for (const requirementType in TestState.activeChallenge.requirements) {
if (requirementsMet == false) return null;
const requirementValue =
TestState.activeChallenge.requirements[
requirementType as keyof typeof TestState.activeChallenge.requirements
];
if (requirementType == "wpm") {
let wpmMode = Object.keys(requirementValue)[0];
const wpmMode = Object.keys(requirementValue)[0];
if (wpmMode == "exact") {
if (Math.round(result.wpm) != requirementValue.exact) {
if (Math.round(result.wpm) != requirementValue["exact"]) {
requirementsMet = false;
failReasons.push(`WPM not ${requirementValue.exact}`);
failReasons.push(`WPM not ${requirementValue["exact"]}`);
}
} else if (wpmMode == "min") {
if (result.wpm < requirementValue.min) {
if (result.wpm < requirementValue["min"]) {
requirementsMet = false;
failReasons.push(`WPM below ${requirementValue.min}`);
failReasons.push(`WPM below ${requirementValue["min"]}`);
}
}
} else if (requirementType == "acc") {
let accMode = Object.keys(requirementValue)[0];
const accMode = Object.keys(requirementValue)[0];
if (accMode == "exact") {
if (result.acc != requirementValue.exact) {
if (result.acc != requirementValue["exact"]) {
requirementsMet = false;
failReasons.push(`Accuracy not ${requirementValue.exact}`);
failReasons.push(`Accuracy not ${requirementValue["exact"]}`);
}
} else if (accMode == "min") {
if (result.acc < requirementValue.min) {
if (result.acc < requirementValue["min"]) {
requirementsMet = false;
failReasons.push(`Accuracy below ${requirementValue.min}`);
failReasons.push(`Accuracy below ${requirementValue["min"]}`);
}
}
} else if (requirementType == "afk") {
let afkMode = Object.keys(requirementValue)[0];
const afkMode = Object.keys(requirementValue)[0];
if (afkMode == "max") {
if (Math.round(afk) > requirementValue.max) {
if (Math.round(afk) > requirementValue["max"]) {
requirementsMet = false;
failReasons.push(
`AFK percentage above ${requirementValue.max}`
`AFK percentage above ${requirementValue["max"]}`
);
}
}
} else if (requirementType == "time") {
let timeMode = Object.keys(requirementValue)[0];
const timeMode = Object.keys(requirementValue)[0];
if (timeMode == "min") {
if (Math.round(result.testDuration) < requirementValue.min) {
if (Math.round(result.testDuration) < requirementValue["min"]) {
requirementsMet = false;
failReasons.push(`Test time below ${requirementValue.min}`);
failReasons.push(`Test time below ${requirementValue["min"]}`);
}
}
} else if (requirementType == "funbox") {
let funboxMode = requirementValue;
const funboxMode = requirementValue["exact"];
if (funboxMode != result.funbox) {
requirementsMet = false;
failReasons.push(`${funboxMode} funbox not active`);
}
} else if (requirementType == "raw") {
let rawMode = Object.keys(requirementValue)[0];
const rawMode = Object.keys(requirementValue)[0];
if (rawMode == "exact") {
if (Math.round(result.rawWpm) != requirementValue.exact) {
if (Math.round(result.rawWpm) != requirementValue["exact"]) {
requirementsMet = false;
failReasons.push(`Raw WPM not ${requirementValue.exact}`);
failReasons.push(`Raw WPM not ${requirementValue["exact"]}`);
}
}
} else if (requirementType == "con") {
let conMode = Object.keys(requirementValue)[0];
const conMode = Object.keys(requirementValue)[0];
if (conMode == "exact") {
if (Math.round(result.consistency) != requirementValue.exact) {
if (Math.round(result.consistency) != requirementValue["exact"]) {
requirementsMet = false;
failReasons.push(`Consistency not ${requirementValue.exact}`);
failReasons.push(
`Consistency not ${requirementValue["exact"]}`
);
}
}
} else if (requirementType == "config") {
for (let configKey in requirementValue) {
let configValue = requirementValue[configKey];
if (Config[configKey] != configValue) {
for (const configKey in requirementValue) {
const configValue = requirementValue[configKey];
if (
Config[configKey as keyof MonkeyTypes.Config] != configValue
) {
requirementsMet = false;
failReasons.push(`${configKey} not set to ${configValue}`);
}
@ -146,7 +154,7 @@ export function verify(result) {
} else {
return null;
}
} catch (e) {
} catch (e: any) {
console.error(e);
Notifications.add(
`Something went wrong when verifying challenge: ${e.message}`,
@ -156,13 +164,13 @@ export function verify(result) {
}
}
export async function setup(challengeName) {
export async function setup(challengeName: string): Promise<boolean> {
challengeLoading = true;
UpdateConfig.setFunbox("none");
let list = await Misc.getChallengeList();
let challenge = list.filter((c) => c.name === challengeName)[0];
const list = await Misc.getChallengeList();
const challenge = list.filter((c) => c.name === challengeName)[0];
let notitext;
try {
if (challenge === undefined) {
@ -175,7 +183,7 @@ export async function setup(challengeName) {
return false;
}
if (challenge.type === "customTime") {
UpdateConfig.setTimeConfig(challenge.parameters[0], true);
UpdateConfig.setTimeConfig(challenge.parameters[0] as number, true);
UpdateConfig.setMode("time", true);
UpdateConfig.setDifficulty("normal", true);
if (challenge.name === "englishMaster") {
@ -184,18 +192,18 @@ export async function setup(challengeName) {
UpdateConfig.setPunctuation(true, true);
}
} else if (challenge.type === "customWords") {
UpdateConfig.setWordCount(challenge.parameters[0], true);
UpdateConfig.setWordCount(challenge.parameters[0] as number, true);
UpdateConfig.setMode("words", true);
UpdateConfig.setDifficulty("normal", true);
} else if (challenge.type === "customText") {
CustomText.setText(challenge.parameters[0].split(" "));
CustomText.setIsWordRandom(challenge.parameters[1]);
CustomText.setWord(parseInt(challenge.parameters[2]));
CustomText.setText((challenge.parameters[0] as string).split(" "));
CustomText.setIsWordRandom(challenge.parameters[1] as boolean);
CustomText.setWord(challenge.parameters[2] as number);
UpdateConfig.setMode("custom", true);
UpdateConfig.setDifficulty("normal", true);
} else if (challenge.type === "script") {
let scriptdata = await fetch("/challenges/" + challenge.parameters[0]);
scriptdata = await scriptdata.text();
const response = await fetch("/challenges/" + challenge.parameters[0]);
const scriptdata = await response.text();
let text = scriptdata.trim();
text = text.replace(/[\n\r\t ]/gm, " ");
text = text.replace(/ +/gm, " ");
@ -204,7 +212,7 @@ export async function setup(challengeName) {
UpdateConfig.setMode("custom", true);
UpdateConfig.setDifficulty("normal", true);
if (challenge.parameters[1] != null) {
UpdateConfig.setTheme(challenge.parameters[1]);
UpdateConfig.setTheme(challenge.parameters[1] as string);
}
if (challenge.parameters[2] != null) {
Funbox.activate(challenge.parameters[2]);
@ -214,16 +222,19 @@ export async function setup(challengeName) {
UpdateConfig.setMode("time", true);
UpdateConfig.setDifficulty("master", true);
} else if (challenge.type === "funbox") {
UpdateConfig.setFunbox(challenge.parameters[0], true);
UpdateConfig.setFunbox(challenge.parameters[0] as string, true);
UpdateConfig.setDifficulty("normal", true);
if (challenge.parameters[1] === "words") {
UpdateConfig.setWordCount(challenge.parameters[2], true);
UpdateConfig.setWordCount(challenge.parameters[2] as number, true);
} else if (challenge.parameters[1] === "time") {
UpdateConfig.setTimeConfig(challenge.parameters[2], true);
UpdateConfig.setTimeConfig(challenge.parameters[2] as number, true);
}
UpdateConfig.setMode(challenge.parameters[1], true);
UpdateConfig.setMode(challenge.parameters[1] as MonkeyTypes.Mode, true);
if (challenge.parameters[3] !== undefined) {
UpdateConfig.setDifficulty(challenge.parameters[3], true);
UpdateConfig.setDifficulty(
challenge.parameters[3] as MonkeyTypes.Difficulty,
true
);
}
} else if (challenge.type === "special") {
if (challenge.name === "semimak") {
@ -253,6 +264,7 @@ export async function setup(challengeName) {
return true;
} catch (e) {
Notifications.add("Something went wrong: " + e, -1);
return false;
}
}