blob: 7b7a9225eba1c9da614d3b9e074d00d888d2c27a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import { BushArgumentTypeCaster } from '../lib/extensions/BushArgumentTypeCaster';
import { BushMessage } from '../lib/extensions/BushMessage';
import { BushConstants } from '../lib/utils/BushConstants';
export const durationTypeCaster: BushArgumentTypeCaster = async (_message: BushMessage, phrase): Promise<number> => {
if (!phrase) return null;
const regexString = Object.entries(BushConstants.TimeUnits)
.map(([name, { label }]) => String.raw`(?:(?<${name}>-?(?:\d+)?\.?\d+) *${label})?`)
.join('\\s*');
const match = new RegExp(`^${regexString}$`, 'i').exec(phrase);
if (!match) return null;
let milliseconds = 0;
for (const key in match.groups) {
const value = Number(match.groups[key] || 0);
milliseconds += value * BushConstants.TimeUnits[key].value;
}
return milliseconds;
};
|