interpolate
· 1.4 KiB · Text
Ham
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);
}
| 1 | export function interpolate( |
| 2 | message: string, |
| 3 | username: string, |
| 4 | serverNickname: string | null, |
| 5 | globalNickname: string | null, |
| 6 | aliases: string[] |
| 7 | ): string { |
| 8 | const displayName = serverNickname ?? globalNickname ?? username; |
| 9 | const dt = getNow(); |
| 10 | |
| 11 | let result = message |
| 12 | .replace(/\{username\}/g, username) |
| 13 | .replace(/\{server_nickname\}/g, serverNickname ?? displayName) |
| 14 | .replace(/\{nickname\}/g, globalNickname ?? username) |
| 15 | .replace(/\{alias\[random\]\}/g, () => |
| 16 | aliases.length > 0 ? aliases[Math.floor(Math.random() * aliases.length)] : displayName |
| 17 | ) |
| 18 | .replace(/\{alias\[(\d+)\]\}/g, (_, i: string) => aliases[parseInt(i)] ?? displayName) |
| 19 | .replace(/\{alias\}/g, aliases[0] ?? displayName) |
| 20 | .replace(/\{DAY\}/g, dt.dayName.toUpperCase()) |
| 21 | .replace(/\{Day\}/g, dt.dayName.charAt(0).toUpperCase() + dt.dayName.slice(1)) |
| 22 | .replace(/\{day\}/g, dt.dayName) |
| 23 | .replace(/\{MONTH\}/g, dt.monthName.toUpperCase()) |
| 24 | .replace(/\{Month\}/g, dt.monthName.charAt(0).toUpperCase() + dt.monthName.slice(1)) |
| 25 | .replace(/\{month\}/g, dt.monthName) |
| 26 | .replace(/\{month_num\}/g, String(dt.monthNum).padStart(2, "0")) |
| 27 | .replace(/\{date_full\}/g, `${String(dt.dayNum).padStart(2,"0")}-${String(dt.monthNum).padStart(2,"0")}-${dt.yearNum}`) |
| 28 | .replace(/\{date\}/g, dt.dateKey) |
| 29 | .replace(/\{day_num\}/g, String(dt.dayNum).padStart(2, "0")); |
| 30 | |
| 31 | return resolveEmojiTokens(result); |
| 32 | } |