Type Alias GuildFishingCustomization
GuildFishingCustomization: { customCatchMessage: string | null; customRarityNames: Record<string, string> | null; customRarityTable: Record<string, number> | null; customSpeciesNames: Record<string, string> | null; listing: { linkedAt: string | null; site: string; } | null; shopItems: GuildFishingShopItem[]; webhookAvatarUrl: string | null; webhookEnabled: boolean; webhookUsername: string | null; weighting: GuildFishingWeighting[]; } Type declaration
customCatchMessage: string | null
customRarityNames: Record<string, string> | null
customRarityTable: Record<string, number> | null
customSpeciesNames: Record<string, string> | null
listing: {
linkedAt: string | null;
site: string;
} | null
webhookAvatarUrl: string | null
webhookEnabled: boolean
webhookUsername: string | null
The server-listing link, or null when none is set.
Present so the page can be truthful on LOAD. Without it the only listing state available was whatever came back from the click that linked one, held in component state — so a refresh rendered a linked server as unlinked and offered Unlink unconditionally.
The SECRET is deliberately absent and will stay that way. It signs the top.gg vote webhook, so re-serving it on every page load would put a forever-valid credential into every response, cache and devtools session that ever opens the tab. Reissue via
linkListing, which rotates the secret rather than exposing the old one.linkedAtis an ISO string rather than a Date, because it crosses the wire as JSON. It is null for guilds linked before that timestamp existed: linked-date-unknown, not an invented date.