Files
blitzkit/src/utils/format-utils.ts
T

57 lines
1.9 KiB
TypeScript
Raw Normal View History

2023-04-17 19:02:53 -05:00
import { ApplicationCommand, Guild, Locale } from 'discord.js';
import { filesize } from 'filesize';
import { Duration } from 'luxon';
export class FormatUtils {
public static roleMention(guild: Guild, discordId: string): string {
if (discordId === '@here') {
return discordId;
}
if (discordId === guild.id) {
return '@everyone';
}
return `<@&${discordId}>`;
}
public static channelMention(discordId: string): string {
return `<#${discordId}>`;
}
public static userMention(discordId: string): string {
return `<@!${discordId}>`;
}
// TODO: Replace with ApplicationCommand#toString() once discord.js #8818 is merged
// https://github.com/discordjs/discord.js/pull/8818
public static commandMention(command: ApplicationCommand, subParts: string[] = []): string {
let name = [command.name, ...subParts].join(' ');
return `</${name}:${command.id}>`;
}
public static duration(milliseconds: number, langCode: Locale): string {
return Duration.fromObject(
Object.fromEntries(
Object.entries(
Duration.fromMillis(milliseconds, { locale: langCode })
.shiftTo(
'year',
'quarter',
'month',
'week',
'day',
'hour',
'minute',
'second'
)
.toObject()
).filter(([_, value]) => !!value) // Remove units that are 0
)
).toHuman({ maximumFractionDigits: 0 });
}
public static fileSize(bytes: number): string {
return filesize(bytes, { output: 'string', pad: true, round: 2 }).toString();
}
}