118 lines
4.3 KiB
TypeScript
118 lines
4.3 KiB
TypeScript
import { log, LogTypes as LT } from '@Log4Deno';
|
|
|
|
import config from '~config';
|
|
|
|
export const translateError = (solverError: Error): [string, string] => {
|
|
// Welp, the unthinkable happened, we hit an error
|
|
|
|
// Split on _ for the error messages that have more info than just their name
|
|
const errorSplits = solverError.message.split('_');
|
|
const errorName = errorSplits.shift();
|
|
const errorDetails = errorSplits.join('_');
|
|
|
|
let errorMsg = '';
|
|
|
|
// Translate the errorName to a specific errorMsg
|
|
switch (errorName) {
|
|
case 'WholeDieCountSizeOnly':
|
|
errorMsg = 'Error: Die Size and Die Count must be whole numbers';
|
|
break;
|
|
case 'YouNeedAD':
|
|
errorMsg = 'Formatting Error: Missing die size and count config';
|
|
break;
|
|
case 'CannotParseDieCount':
|
|
errorMsg = `Formatting Error: Cannot parse \`${errorDetails}\` as a number`;
|
|
break;
|
|
case 'DoubleSeparator':
|
|
errorMsg = `Formatting Error: \`${errorDetails}\` should only be specified once per roll, remove all but one and repeat roll`;
|
|
break;
|
|
case 'FormattingError':
|
|
errorMsg = 'Formatting Error: Cannot use Keep and Drop at the same time, remove all but one and repeat roll';
|
|
break;
|
|
case 'NoMaxWithDash':
|
|
errorMsg = 'Formatting Error: CritScore range specified without a maximum, remove - or add maximum to correct';
|
|
break;
|
|
case 'UnknownOperation':
|
|
errorMsg = `Error: Unknown Operation ${errorDetails}`;
|
|
if (errorDetails === '-') {
|
|
errorMsg += '\nNote: Negative numbers are not supported';
|
|
} else if (errorDetails === ' ') {
|
|
errorMsg += `\nNote: Every roll must be closed by ${config.postfix}`;
|
|
}
|
|
break;
|
|
case 'NoZerosAllowed':
|
|
errorMsg = 'Formatting Error: ';
|
|
switch (errorDetails) {
|
|
case 'base':
|
|
errorMsg += 'Die Size and Die Count';
|
|
break;
|
|
case 'drop':
|
|
errorMsg += 'Drop (`d` or `dl`)';
|
|
break;
|
|
case 'keep':
|
|
errorMsg += 'Keep (`k` or `kh`)';
|
|
break;
|
|
case 'dropHigh':
|
|
errorMsg += 'Drop Highest (`dh`)';
|
|
break;
|
|
case 'keepLow':
|
|
errorMsg += 'Keep Lowest (`kl`)';
|
|
break;
|
|
case 'reroll':
|
|
errorMsg += 'Reroll (`r`)';
|
|
break;
|
|
case 'critScore':
|
|
errorMsg += 'Crit Score (`cs`)';
|
|
break;
|
|
case 'critFail':
|
|
errorMsg += 'Crit Fail (`cf`)';
|
|
break;
|
|
default:
|
|
errorMsg += `Unhandled - ${errorDetails}`;
|
|
break;
|
|
}
|
|
errorMsg += ' cannot be zero';
|
|
break;
|
|
case 'NoRerollOnAllSides':
|
|
errorMsg = 'Error: Cannot reroll all sides of a die, must have at least one side that does not get rerolled';
|
|
break;
|
|
case 'CritScoreMinGtrMax':
|
|
errorMsg = 'Formatting Error: CritScore maximum cannot be greater than minimum, check formatting and flip min/max';
|
|
break;
|
|
case 'Invalid string length':
|
|
case 'MaxLoopsExceeded':
|
|
errorMsg = 'Error: Roll is too complex or reaches infinity';
|
|
break;
|
|
case 'UnbalancedParen':
|
|
errorMsg = 'Formatting Error: At least one of the equations contains unbalanced `(`/`)`';
|
|
break;
|
|
case 'UnbalancedPrefixPostfix':
|
|
errorMsg = `Formatting Error: At least one of the equations contains unbalanced \`${config.prefix}\`/\`${config.postfix}\``;
|
|
break;
|
|
case 'EMDASNotNumber':
|
|
errorMsg = 'Error: One or more operands is not a number';
|
|
break;
|
|
case 'ConfWhat':
|
|
errorMsg = 'Error: Not all values got processed, please report the command used';
|
|
break;
|
|
case 'OperatorWhat':
|
|
errorMsg = 'Error: Something really broke with the Operator, try again';
|
|
break;
|
|
case 'OperandNaN':
|
|
errorMsg = 'Error: One or more operands reached NaN, check input';
|
|
break;
|
|
case 'UndefinedStep':
|
|
errorMsg = 'Error: Roll became undefined, one or more operands are not a roll or a number, check input';
|
|
break;
|
|
case 'IllegalVariable':
|
|
errorMsg = `Error: \`${errorDetails}\` is not a valid variable`;
|
|
break;
|
|
default:
|
|
log(LT.ERROR, `Unhandled Parser Error: ${errorName}, ${errorDetails}`);
|
|
errorMsg = `Unhandled Error: ${solverError.message}\nCheck input and try again, if issue persists, please use \`${config.prefix}report\` to alert the devs of the issue`;
|
|
break;
|
|
}
|
|
|
|
return [solverError.message, errorMsg];
|
|
};
|