feat(bots/discord): switch duration parser to @sapphire/duration

This commit is contained in:
PalmDevs
2025-04-16 21:12:42 +07:00
parent 27e06db1d9
commit 04ce8252c0
3 changed files with 41 additions and 26 deletions

View File

@@ -1,25 +1,40 @@
import parse from 'parse-duration'
import { Duration, DurationFormatter } from '@sapphire/duration'
parse[''] = parse['s']!
parse['mo'] = parse['M'] = parse['month']!
const fmt = new DurationFormatter({
year: {
DEFAULT: 'y',
},
month: {
DEFAULT: 'M',
},
week: {
DEFAULT: 'w',
},
day: {
DEFAULT: 'd',
},
hour: {
DEFAULT: 'h',
},
minute: {
DEFAULT: 'm',
},
second: {
DEFAULT: 's',
},
})
export const parseDuration = (duration: string, defaultUnit?: parse.Units) => {
const defaultUnitValue = parse['']!
if (defaultUnit) parse[''] = parse[defaultUnit]!
const result = parse(duration, 'ms') ?? Number.NaN
parse[''] = defaultUnitValue
return result
export const parseDuration = (duration: string, defaultUnit = 's') => {
// adds default unit to the end of the string if it doesn't have a unit
// 100 -> 100s
// 10m100 -> 10m100s
// biome-ignore lint/style/noParameterAssign: this is fine
if (/\d$/.test(duration)) duration += defaultUnit
return new Duration(duration).offset
}
export const durationToString = (duration: number) => {
if (duration === 0) return '0s'
const days = Math.floor(duration / (24 * 60 * 60 * 1000))
const hours = Math.floor((duration % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000))
const minutes = Math.floor((duration % (60 * 60 * 1000)) / (60 * 1000))
const seconds = Math.floor((duration % (60 * 1000)) / 1000)
return `${days ? `${days}d` : ''}${hours ? `${hours}h` : ''}${minutes ? `${minutes}m` : ''}${
seconds ? `${seconds}s` : ''
}`
return fmt.format(duration, undefined, {
left: '',
})
}