export function interpolate( message: string, username: string, serverNickname: string | null, globalNickname: string | null, aliases: string[] ): string { const displayName = serverNickname ?? globalNickname ?? username; const dt = getNow(); let result = message .replace(/\{username\}/g, username) .replace(/\{server_nickname\}/g, serverNickname ?? displayName) .replace(/\{nickname\}/g, globalNickname ?? username) .replace(/\{alias\[random\]\}/g, () => aliases.length > 0 ? aliases[Math.floor(Math.random() * aliases.length)] : displayName ) .replace(/\{alias\[(\d+)\]\}/g, (_, i: string) => aliases[parseInt(i)] ?? displayName) .replace(/\{alias\}/g, aliases[0] ?? displayName) .replace(/\{DAY\}/g, dt.dayName.toUpperCase()) .replace(/\{Day\}/g, dt.dayName.charAt(0).toUpperCase() + dt.dayName.slice(1)) .replace(/\{day\}/g, dt.dayName) .replace(/\{MONTH\}/g, dt.monthName.toUpperCase()) .replace(/\{Month\}/g, dt.monthName.charAt(0).toUpperCase() + dt.monthName.slice(1)) .replace(/\{month\}/g, dt.monthName) .replace(/\{month_num\}/g, String(dt.monthNum).padStart(2, "0")) .replace(/\{date_full\}/g, `${String(dt.dayNum).padStart(2,"0")}-${String(dt.monthNum).padStart(2,"0")}-${dt.yearNum}`) .replace(/\{date\}/g, dt.dateKey) .replace(/\{day_num\}/g, String(dt.dayNum).padStart(2, "0")); return resolveEmojiTokens(result); }