const md5_module = require("./md5.js"); /** * 对战结果的数据结构 * 其实只有 source_plr 是有用的, 是赢家之一 */ type FightResult = { message: string; source_plr: string; target_plr: string; affect: string | number; }; /** * 每一行具体的胜率结果 */ type WinRate = { round: number; win_count: number; }; /** * 胜率的数据结构 */ type WinRateResult = { souce: number; raw_data: WinRate[]; }; /** * 用于接收胜率的回调函数 * 返回一个 bool, true 表示继续, false 表示停止 */ type WinRateCallback = (run_round: number, win_count: number) => boolean; /** * 分数的数据结构 */ type Score = { round: number; score: number; }; /** * 分数的数据结构 */ type ScoreResult = { source: number; raw_data: Score[]; }; /** * 用于接收分数的回调函数 * 返回一个 bool, true 表示继续, false 表示停止 */ type ScoreCallback = (run_round: number, score: number) => boolean; /** * * @param names 原始的输入框输入 * @returns 对战结果 */ async function fight(names: string): Promise { // 检查一下输入是否合法 // 比如里面有没有 !test! if (names.startsWith("!test!")) { throw new Error("你怎么在对战输入里加 !test!(恼)\n${names}"); } return await md5_module.fight(names); } /** * 对于胜率/评分的输入检查 * @param names * @returns */ function test_check(names: string): boolean { const have_test = names.startsWith("!test!"); return have_test; } /** * 测量胜率 * @param names 原始的输入框输入 * @param round 战斗的回合数 * @returns 胜率结果 */ async function win_rate(names: string, round: number): Promise { // 检查 round 是否合法 if (round <= 0) { throw new Error("round 必须大于 0"); } if (!test_check(names)) { throw new Error("你怎么在胜率输入里加 !test!(恼)\n${names}"); } return await md5_module.win_rate(names, round); } /** * * @param names 原始的输入框输入 * @param callback 用于接收胜率的回调函数 * @returns 胜率结果 */ async function win_rate_callback( names: string, callback: WinRateCallback, ): Promise { if (!test_check(names)) { throw new Error("你怎么在胜率输入里加 !test!(恼)\n${names}"); } return await md5_module.win_rate_callback(names, callback); } async function score(names: string, round: number): Promise { // 检查 round 是否合法 if (round <= 0) { throw new Error("round 必须大于 0"); } if (!test_check(names)) { throw new Error("你怎么在分数输入里加 !test!(恼)\n${names}"); } return await md5_module.score(names, round); } async function score_callback( names: string, callback: ScoreCallback, ): Promise { if (!test_check(names)) { throw new Error("你怎么在分数输入里加 !test!(恼)\n${names}"); } return await md5_module.score_callback(names, callback); } // 启动一个 async 函数 async function main() { const result = await md5_module.fight("aaaaaa\nbbbbb"); console.log("对战结果: ", result); const win_rate = await md5_module.win_rate("!test!\n\naaaaaa\n\nbbbbb", 1000); console.log("胜率: ", win_rate); const score = await md5_module.score("!test!\n\naaaaaabbbb", 1000); console.log("分数: ", score); } main();