mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-03-10 05:35:05 +08:00
converted to ts
This commit is contained in:
parent
e65f514a45
commit
684e3cb456
1 changed files with 63 additions and 51 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in a new issue