diff --git a/config.js b/config.js index 332252b71..f7bd7bdd0 100644 --- a/config.js +++ b/config.js @@ -6,7 +6,7 @@ const fs = require('fs'); const { getArgNamesGRU } = require('./utils/getArgNamesGRU'); -const { getFamilyName } = require('./utils/getFamilyName'); +const { getOptionName } = require('./utils/getOptionName'); const { getRankedUnranked } = require('./utils/getRankedUnranked'); const { getRankedUnrankedUnderscored } = require('./utils/getRankedUnrankedUnderscored'); @@ -89,15 +89,15 @@ exports.updateFromArgv = function() { .describe('unrankedonly', 'Only accept unranked matches') .describe('fakerank', 'Fake bot ranking to calculate automatic handicap stones number in autohandicap (-1) based on rankDifference between fakerank and user ranking, to fix the bypass minhandicap maxhandicap issue if handicap is -automatic') // 2) OPTIONS TO CHECK RANKED/UNRANKED CHALLENGES - // 2A) ALL/RANKED/UNRANKED FAMILIES + // 2A) ALL/RANKED/UNRANKED .describe('bans', 'Comma separated list of usernames or IDs') .string('bans') .describe('bansranked', 'Comma separated list of usernames or IDs who are banned from ranked games') .string('bansranked') .describe('bansunranked', 'Comma separated list of usernames or IDs who are banned from unranked games') .string('bansunranked') - // 2B) GENERAL/RANKED/UNRANKED FAMILIES - // 2B1) ALLOWED FAMILIES + // 2B) GENERAL/RANKED/UNRANKED + // 2B1) ALLOWED GROUP .describe('boardsizes', 'Board size(s) to accept') .string('boardsizes') .describe('boardsizesranked', 'Board size(s) to accept for ranked games') @@ -116,7 +116,7 @@ exports.updateFromArgv = function() { .describe('timecontrols', 'Time control(s) to accept') .describe('timecontrolsranked', 'Time control(s) to accept for ranked games') .describe('timecontrolsunranked', 'Time control(s) to accept for unranked games') - // 2B2) GENERIC GENERAL/RANKED/UNRANKED OPTIONS + // 2B2) GENERIC GENERAL/RANKED/UNRANKED .describe('proonly', 'For all games, only accept those from professionals') .describe('proonlyranked', 'For ranked games, only accept those from professionals') .describe('proonlyunranked', 'For unranked games, only accept those from professionals') @@ -228,7 +228,7 @@ exports.updateFromArgv = function() { throw `Please choose either --rankedonly or --unrankedonly, not both.`; } - const rankedUnrankedFamilies = [{ name: "bans" }, + const rankedUnrankedOptions = [{ name: "bans" }, { name: "boardsizes", default: "9,13,19" }, { name: "komis", default: "automatic" }, { name: "speeds", default: "all" }, @@ -263,15 +263,15 @@ exports.updateFromArgv = function() { testDroppedArgv(argv); ensureSupportedOgspvAI(argv.ogspv, ogsPvAIs); - testRankedUnrankedFamilies(rankedUnrankedFamilies, argv); + testRankedUnrankedOptions(rankedUnrankedOptions, argv); - // C - set general/ranked/unranked families defaults + // C - set general/ranked/unranked options defaults - // For general/ranked/unranked families, do not add a default using .default of optimist, add it later in the + // For general/ranked/unranked options, do not add a default using .default of optimist, add it later in the // code if no ranked arg nor unranked arg are used, else we would be force using the general arg regardless of // botadmin using the ranked and/or unranked arg(s), triggering the no 3 args at the same time error. - setRankedUnrankedFamiliesDefaults(rankedUnrankedFamilies, argv); + setRankedUnrankedOptionsDefaults(rankedUnrankedOptions, argv); // EXPORTS FROM ARGV // 0) Export everything in argv first @@ -338,7 +338,7 @@ exports.updateFromArgv = function() { }; exports.bot_command = argv._; - // 2) specific ranked/unranked families exports + // 2) specific ranked/unranked options exports processRankExport("minrank", argv); processRankExport("minrankranked", argv); @@ -360,13 +360,13 @@ exports.updateFromArgv = function() { processKomisExport("komisranked", argv); processKomisExport("komisunranked", argv); - processAllowedFamilyExport("speeds", argv); - processAllowedFamilyExport("speedsranked", argv); - processAllowedFamilyExport("speedsunranked", argv); + processAllowedGroupExport("speeds", argv); + processAllowedGroupExport("speedsranked", argv); + processAllowedGroupExport("speedsunranked", argv); - processAllowedFamilyExport("timecontrols", argv); - processAllowedFamilyExport("timecontrolsranked", argv); - processAllowedFamilyExport("timecontrolsunranked", argv); + processAllowedGroupExport("timecontrols", argv); + processAllowedGroupExport("timecontrolsranked", argv); + processAllowedGroupExport("timecontrolsunranked", argv); // console messages // C - test exports warnings @@ -375,10 +375,10 @@ exports.updateFromArgv = function() { } -function testRankedUnrankedFamilies(rankedUnrankedFamilies, argv) { +function testRankedUnrankedOptions(rankedUnrankedOptions, argv) { - for (const family of rankedUnrankedFamilies) { - const [general, ranked, unranked] = getArgNamesGRU(family.name); + for (const option of rankedUnrankedOptions) { + const [general, ranked, unranked] = getArgNamesGRU(option.name); // check undefined specifically to handle valid values such as 0 or null which are tested false if (argv[general] !== undefined) { @@ -394,9 +394,9 @@ function testRankedUnrankedFamilies(rankedUnrankedFamilies, argv) { } } -function getBLCString(familyName, rankedUnranked) { - return `${familyName}blitz${rankedUnranked}, --${familyName}live${rankedUnranked} ` - + `and/or --${familyName}corr${rankedUnranked}`; +function getBLCString(optionName, rankedUnranked) { + return `${optionName}blitz${rankedUnranked}, --${optionName}live${rankedUnranked} ` + + `and/or --${optionName}corr${rankedUnranked}`; } // console messages @@ -478,19 +478,19 @@ function ensureSupportedOgspvAI(ogspv, ogsPvAIs) { } } -function setRankedUnrankedFamiliesDefaults(rankedUnrankedFamilies, argv) { - for (const family of rankedUnrankedFamilies) { - if (!("default" in family)) continue; +function setRankedUnrankedOptionsDefaults(rankedUnrankedFamilies, argv) { + for (const option of rankedUnrankedFamilies) { + if (!("default" in option)) continue; - const [general, ranked, unranked] = getArgNamesGRU(family.name); + const [general, ranked, unranked] = getArgNamesGRU(option.name); if ((argv[general] === undefined)) { if ((argv[ranked] === undefined) && (argv[unranked] === undefined)) { - argv[general] = family.default; + argv[general] = option.default; } else if (argv[unranked] === undefined) { - argv[ranked] = family.default; + argv[ranked] = option.default; } else if (argv[ranked] === undefined) { - argv[unranked] = family.default; + argv[unranked] = option.default; } } } @@ -570,19 +570,19 @@ function processKomisExport(argName, argv) { } } -function processAllowedFamilyExport(argName, argv) { +function processAllowedGroupExport(argName, argv) { const arg = argv[argName]; if (arg) { - const familyName = getFamilyName(argName); + const optionName = getOptionName(argName); const rankedUnranked = getRankedUnranked(argName); const rankedUnrankedUnderscored = getRankedUnrankedUnderscored(rankedUnranked); const allowedValues = arg.split(','); for (const allowedValue of allowedValues) { if (allowedValue === "all") { - exports[`allow_all_${familyName}${rankedUnrankedUnderscored}`] = true; + exports[`allow_all_${optionName}${rankedUnrankedUnderscored}`] = true; } else { - exports[`allowed_${familyName}${rankedUnrankedUnderscored}`][allowedValue] = true; + exports[`allowed_${optionName}${rankedUnrankedUnderscored}`][allowedValue] = true; } } } diff --git a/connection.js b/connection.js index b53fd7ded..8b85a01b8 100644 --- a/connection.js +++ b/connection.js @@ -425,9 +425,9 @@ class Connection { return { reject: false }; // OK ! } - // Check challenge allowed families settings are allowed + // Check challenge allowed group options are allowed // - checkChallengeAllowedFamilies(notification) { + checkChallengeAllowedGroup(notification) { // only square boardsizes, except if all is allowed if (notification.width !== notification.height) { @@ -443,16 +443,16 @@ class Connection { } // if square, check if square board size is allowed - const resultBoardsizes = getAllowedFamilyRejectResult("boardsizes", "Board size", notification.width, notification.ranked); + const resultBoardsizes = getAllowedGroupRejectResult("boardsizes", "Board size", notification.width, notification.ranked); if (resultBoardsizes) return resultBoardsizes; - const resultKomis = getAllowedFamilyRejectResult("komis", "Komi", notification.komi, notification.ranked); + const resultKomis = getAllowedGroupRejectResult("komis", "Komi", notification.komi, notification.ranked); if (resultKomis) return resultKomis; - const resultSpeeds = getAllowedFamilyRejectResult("speeds", "Speed", notification.time_control.speed, notification.ranked); + const resultSpeeds = getAllowedGroupRejectResult("speeds", "Speed", notification.time_control.speed, notification.ranked); if (resultSpeeds) return resultSpeeds; - const resultTimecontrols = getAllowedFamilyRejectResult("timecontrols", "Time control", notification.time_control.time_control, notification.ranked); + const resultTimecontrols = getAllowedGroupRejectResult("timecontrols", "Time control", notification.time_control.time_control, notification.ranked); if (resultTimecontrols) return resultTimecontrols; return { reject: false }; // OK ! @@ -511,7 +511,7 @@ class Connection { this.checkChallengeUser, this.checkChallengeBot, this.checkChallengeBooleans, - this.checkChallengeAllowedFamilies, + this.checkChallengeAllowedGroup, this.checkChallengeHandicap, this.checkChallengeTimeSettings]) { const result = test.bind(this)(notification); @@ -813,7 +813,7 @@ function boardsizeSquareToDisplayString(boardsizeSquare) { .join(', '); } -function getAllowedFamiliesNotifToString(argName, notif) { +function getAllowedGroupNotifToString(argName, notif) { if (argName.includes("boardsizes")) { return boardsizeSquareToDisplayString(notif); } @@ -824,12 +824,12 @@ function getAllowedFamiliesNotifToString(argName, notif) { } } -function getAllowedFamilyReject(argName, nameF, notif) { +function getAllowedGroupReject(argName, nameF, notif) { const forRankedUnrankedGames = getForFromBLCRankedUnrankedGames("for ", "", argName, ""); const arg = config[argName]; const argToString = (argName.includes("boardsizes") ? boardsizeSquareToDisplayString(arg) : arg); - const notifToString = getAllowedFamiliesNotifToString(argName, notif); + const notifToString = getAllowedGroupNotifToString(argName, notif); conn_log(`${nameF} ${forRankedUnrankedGames}is ${notifToString}, not in ${argToString} (${argName}).`); const msg = `${nameF} ${notifToString} is not allowed on this bot${forRankedUnrankedGames}` @@ -837,24 +837,24 @@ function getAllowedFamilyReject(argName, nameF, notif) { return { reject: true, msg }; } -function getAllowedFamilyRejectResult(familyName, nameF, notif, notificationRanked) { - const argNames = getArgNamesGRU(familyName); +function getAllowedGroupRejectResult(optionName, nameF, notif, notificationRanked) { + const argNames = getArgNamesGRU(optionName); const [general, ranked, unranked] = argNames; - const [general_underscored, ranked_underscored, unranked_underscored] = getArgNamesUnderscoredGRU(familyName); + const [general_underscored, ranked_underscored, unranked_underscored] = getArgNamesUnderscoredGRU(optionName); if (config[general] && !config[ranked] && !config[unranked] && !config[`allow_all_${general_underscored}`] && !config[`allowed_${general_underscored}`][notif]) { - return getAllowedFamilyReject(general, nameF, notif); + return getAllowedGroupReject(general, nameF, notif); } if (config[ranked] && notificationRanked && !config[`allow_all_${ranked_underscored}`] && !config[`allowed_${ranked_underscored}`][notif]) { - return getAllowedFamilyReject(ranked, nameF, notif); + return getAllowedGroupReject(ranked, nameF, notif); } if (config[unranked] && !notificationRanked && !config[`allow_all_${unranked_underscored}`] && !config[`allowed_${unranked_underscored}`][notif]) { - return getAllowedFamilyReject(unranked, nameF, notif); + return getAllowedGroupReject(unranked, nameF, notif); } } -function getCheckedArgName(familyName, notificationRanked) { - const argNames = getArgNamesGRU(familyName); +function getCheckedArgName(optionName, notificationRanked) { + const argNames = getArgNamesGRU(optionName); const [general, ranked, unranked] = argNames; // for numbers, check for undefined: 0 is checked false but is a valid arg number to test against notif @@ -919,8 +919,8 @@ function getMinMaxReject(argToString, notifToString, isMin, conn_log(`${notifToString} is ${MIBL.belAbo} ${MIBL.miniMaxi} ${nameS}${forRankedUnranked}${timeControlSentence} ${argToString} (${argName}).`); let msg = getMinMaxGenericMsg(MIBL, nameS, forRankedUnranked, timeControlSentence, argToString); - const familyNameIsRank = (argName.includes("minrank") || argName.includes("maxrank")); - if (familyNameIsRank) { + const optionNameIsRank = (argName.includes("minrank") || argName.includes("maxrank")); + if (optionNameIsRank) { msg += "."; } else { msg += `, please ${MIBL.incDec} ${nameS}${middleSentence}${endingSentence}.`; diff --git a/docs/OPTIONS-LIST.md b/docs/OPTIONS-LIST.md index f4c25db69..019ea8bc9 100644 --- a/docs/OPTIONS-LIST.md +++ b/docs/OPTIONS-LIST.md @@ -263,8 +263,6 @@ connected games per user against this bot ### rankedonly unrankedonly -Below are the options of the "only" family. - `--rankedonly` Only accept ranked matches `--unrankedonly` Only accept unranked matches @@ -283,7 +281,7 @@ see [notes F](/docs/NOTES.md#f) for details Options in this category allow us to accept or reject a challenge based on the notification (challenge settings) -### 2A) ALL/RANKED/UNRANKED FAMILIES +### 2A) ALL/RANKED/UNRANKED Here the general option (ex: bans) does not confict with the ranked and unranked options for accepting/rejecting matches. @@ -307,7 +305,7 @@ are banned from ranked games `--bansunranked` Comma separated list of user names or IDs who are banned from unranked games -### 2B) GENERAL/RANKED/UNRANKED FAMILIES +### 2B) GENERAL/RANKED/UNRANKED Here you can either use: @@ -320,20 +318,17 @@ and in that case, the general option will be ignored and instead the ranked and unranked will be used depending on whether the game is ranked or unranked. -### 2B1) ALLOWED FAMILIES +### 2B1) ALLOWED GROUP -For the allowed families arguments, you can either use the value: +For the allowed groups arguments, you can either use the value: - `all`: will allow ALL possible values -- for text-only families ("blitz", "fischer", "white", etc.), +- for text-only groups (ex: speeds ("blitz", "fischer", "white", etc.)), comma-separated values (without space) will allow every value inputted, every other value will be rejected -- for numbers +/- text families (5.5,6.5,7.5 (komis), 9,13,19 - (boardsizes)), it is possible to use as well the "range" -operator `:` to navigate one by one from min to max (ex: - `5.5:7.5` is `5.5,6.5,7.5` and `13:17` is `13,14,15,16,17`), - as well as the "increment" operator (ex: `13:19:2` is `13,15,17,19`, -see [notes A-](/docs/NOTES.md#a) for details. +- for numbers groups +/- text groups (ex: komis contain comma-separated numbers +(5.5,6.5,7.5) or text ("automatic"), (ex: boardsizes contain only comma-separated +numbers (9,13,19). example: `--speeds blitz,live` example 2: `--speedsranked live,correspondence --speedsunranked blitz,live` @@ -349,7 +344,7 @@ example 3: `--komis 0.5,5.5,7.5,automatic` Possible boardsize width value(s): -- `all` (allows all board size widths) +- `all` (allows all board sizes) - comma separated and `:` separated values, for example `25` (allows 25x25), or `9,13,15:17,19` (allows 9x9, 13x13, 15x15, 16x16, 17x17, 19x19) diff --git a/test/checkChallenge.test.js b/test/checkChallenge.test.js index b973ab08f..2319f7b74 100644 --- a/test/checkChallenge.test.js +++ b/test/checkChallenge.test.js @@ -262,7 +262,7 @@ describe('Challenges', () => { config.boardsizes = "9,13,18,19"; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: true, msg: 'Board size 19x18 is not square, not allowed.\nPlease choose a SQUARE board size (same width and height), for example try 9x9 or 19x19.' })); @@ -277,7 +277,7 @@ describe('Challenges', () => { config.allowed_boardsizes = []; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: false })); @@ -290,7 +290,7 @@ describe('Challenges', () => { config.allow_all_boardsizes = false; config.allowed_boardsizes = []; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: false })); @@ -364,7 +364,7 @@ describe('Challenges', () => { config.allowed_boardsizes[13] = true; config.allowed_boardsizes[19] = true; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: true, msg: 'Board size 18x18 is not allowed on this bot, please choose one of these allowed Board sizes:\n9x9, 13x13, 19x19.' })); @@ -381,7 +381,7 @@ describe('Challenges', () => { config.allowed_boardsizes[13] = true; config.allowed_boardsizes[19] = true; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: false })); @@ -395,7 +395,7 @@ describe('Challenges', () => { config.allow_all_boardsizes = true; config.allowed_boardsizes = []; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: false })); @@ -414,7 +414,7 @@ describe('Challenges', () => { config.allowed_speeds["blitz"] = true; config.allowed_speeds["live"] = true; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: true, msg: 'Speed correspondence is not allowed on this bot, please choose one of these allowed Speeds:\nblitz, live.' })); @@ -430,7 +430,7 @@ describe('Challenges', () => { config.allowed_speeds["blitz"] = true; config.allowed_speeds["live"] = true; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: false })); @@ -444,7 +444,7 @@ describe('Challenges', () => { config.allow_all_speeds = true; config.allowed_speeds = []; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: false })); @@ -452,9 +452,9 @@ describe('Challenges', () => { }); - describe('Allowed Families General Ranked Unranked precedence rules', () => { + describe('Allowed Group General Ranked Unranked precedence rules', () => { - // We already tested extensively how the allowed families args work, so now we just want to + // We already tested extensively how the allowed groups options work, so now we just want to // make sure the general / ranked / unranked priority order is respected. // speeds is a good and simple example @@ -471,7 +471,7 @@ describe('Challenges', () => { config.allow_all_speeds_unranked = false; config.allowed_speeds_unranked = []; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: true, msg: 'Speed live is not allowed on this bot for ranked games, please choose one of these allowed Speeds for ranked games:\nblitz,correspondence.' })); @@ -491,7 +491,7 @@ describe('Challenges', () => { config.allowed_speeds_unranked = []; config.allowed_speeds_unranked["live"] = true; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: false })); @@ -511,7 +511,7 @@ describe('Challenges', () => { config.allowed_speeds_unranked = []; config.allowed_speeds_unranked["live"] = true; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: true, msg: 'Speed blitz is not allowed on this bot for unranked games, please choose one of these allowed Speeds for unranked games:\nlive.' })); @@ -531,7 +531,7 @@ describe('Challenges', () => { config.allowed_speeds_unranked = []; config.allowed_speeds_unranked["live"] = true; - const result = conn.checkChallengeAllowedFamilies(notification); + const result = conn.checkChallengeAllowedGroup(notification); assert.deepEqual(result, ({ reject: false })); diff --git a/utils/getArgNamesGRU.js b/utils/getArgNamesGRU.js index 01ff12a26..61a8e1d50 100644 --- a/utils/getArgNamesGRU.js +++ b/utils/getArgNamesGRU.js @@ -1,5 +1,5 @@ -function getArgNamesGRU(familyName) { - return ["", "ranked", "unranked"].map( e => `${familyName}${e}` ); +function getArgNamesGRU(optionName) { + return ["", "ranked", "unranked"].map( e => `${optionName}${e}` ); } exports.getArgNamesGRU = getArgNamesGRU; diff --git a/utils/getArgNamesUnderscoredGRU.js b/utils/getArgNamesUnderscoredGRU.js index 92078299f..cf43475a7 100644 --- a/utils/getArgNamesUnderscoredGRU.js +++ b/utils/getArgNamesUnderscoredGRU.js @@ -1,5 +1,5 @@ -function getArgNamesUnderscoredGRU(familyName) { - return ["", "_ranked", "_unranked"].map( e => `${familyName}${e}` ); +function getArgNamesUnderscoredGRU(optionName) { + return ["", "_ranked", "_unranked"].map( e => `${optionName}${e}` ); } exports.getArgNamesUnderscoredGRU = getArgNamesUnderscoredGRU; diff --git a/utils/getFamilyName.js b/utils/getOptionName.js similarity index 52% rename from utils/getFamilyName.js rename to utils/getOptionName.js index 3fdf328f8..6c376ec79 100644 --- a/utils/getFamilyName.js +++ b/utils/getOptionName.js @@ -1,6 +1,6 @@ -function getFamilyName(argName) { +function getOptionName(argName) { return argName.split("unranked")[0] .split("ranked")[0]; } -exports.getFamilyName = getFamilyName; +exports.getOptionName = getOptionName;