Hide a custom shop item. Disables rather than deletes — players may already own it.
The guild's OPERATIONAL fishing setup - the half that decides whether fishing runs at all.
Separate from getCustomization because the two carry different entitlements: this needs only
the base Fishing feature, while customization needs Premium. A guild that has never opened
/fishing has no row at all, so this answers with the DEFAULTS rather than nulls - the dashboard
should render an editable form, not an empty state.
baseCooldownMs, autoClearOptions and maxAllowedChannels come back as read-only context so a
form can validate before submitting rather than discovering the rules from a 400.
The guild's full customization, including a member-facing summary of its rarity weighting.
This guild's dock progress - the three gates, the manifest, contributors and the build timer.
Not the same numbers as minigamesFishing.getDock(). That returns the tier TABLE, which is
identical for everyone. Materials scale with server size, so an 8-person guild is asked for 7,200
scrap and 104 planks where the table says 18,000 and 260. Render THIS beside a progress bar; the
catalogue is for documenting the ladder, not for telling a server what it owes.
activeMembers is what does the scaling, and is returned so the difference is explainable rather
than looking like a bug. perks is what the CURRENT tier already grants - tiers 2 and 4 grant
only those, so a UI omitting them makes two tiers look like they do nothing.
One leaderboard, matching what /leaderboard shows in Discord.
stale means a season rollover is in progress and these rows are the PREVIOUS period - shown
rather than an empty board, since a leaderboard that goes blank at midnight on the 1st reads as
broken. Say so in the UI rather than presenting last month as this month.
Owner-excluded members are already filtered out, and an unknown axis or scope is a 400 rather
than a silent fallback to coins.
Optionalaxis?: FishingBoardAxisOptionalscope?: FishingBoardScopeLink the guild's server listing and issue a webhook secret.
top.gg only. No other listing site exposes a verifiable per-user server-vote webhook —
discords.com lists bots only, and neither Discadia nor DISBOARD publishes a contract. Any other
site returns a 400 saying so.
The response carries the URL and secret to paste into the listing. Note the secret is held by the owner, so this is a perk an owner can self-award; it is contained because voters receive per-server coins only — never XP, items or global progression.
Optionalsite?: "topgg"Post the dock panel, or refresh the existing one.
PUT because it is idempotent by default: with no repost it EDITS the panel in place, so calling
it twice leaves one panel rather than two. Pass repost: true to force a new message - what you
want when the old one was deleted or has been buried up the channel.
Requires a dock channel to have been set first; without one this is a 400 rather than a silent success, since the dashboard cannot otherwise tell that nothing was posted.
Optionalrepost?: booleanCustom catch line, appended to the catch card. null or '' clears it.
Rename species and/or rarity tiers for this guild.
Display only — the catalogue itself stays global, so the codex, collections and the public API remain coherent across every server. A rename changes what a server calls a fish, never which fish exist.
Reweight the guild's rarity table, or pass weights: null to clear the override.
Rejects rather than clamps. Out-of-band weights, mythic, and zeroing all return a 400 with
per-field issues — an owner who typed 100 should learn it did not take, not quietly receive 2.
Reskin and reprice a built-in shop item.
NAME AND PRICE ONLY — the effect, item type and stock scope always come from the built-in item. There is deliberately no way to supply an effect, and the price is clamped to 0.5x–2x the default (a free item cannot be repriced at all).
Optionalname?: null | stringOptionalpriceWebhook identity for fishing messages. Premium Plus only — Premium alone gets a 403.
OptionalavatarOptionalenabled?: booleanOptionalusername?: stringChange any subset of the setup. Omitted fields are left alone; null clears a channel or role.
cooldownOverrideMs may only ever LENGTHEN the wait. A shorter value is refused with a 400,
not clamped - it would be a rate-limit bypass, and the same rule applies in Discord. The value is
capped at ten minutes so it cannot become a silent way to disable fishing while the panel still
reports it as enabled.
dockAutoClearMinutes only accepts a value from autoClearOptions; anything else would be cycled
away the next time someone pressed the panel button, which looks like the setting not saving.
Moving dockChannelId forgets the previous panel message, so the next send posts a fresh one
rather than editing a message stranded in the old channel. panelForgotten reports when that
happened, which is the cue to send the panel again.
Per-guild fishing customization (Premium) and the server-listing link.
Every method here requires the caller to administer the guild AND the guild to hold the right entitlement — both enforced server-side, not merely hidden in the dashboard:
FishingCustomization(Premium) — names, rarity table, catch message, shop items, listingFishingWebhooks(Premium Plus) — the webhook identity, matching every other webhook featureA Premium (non-Plus) guild gets a 403 from
setWebhookdespite passing every other check.Customization never affects gameplay rates in a way that moves leaderboard standing. Premium buys names, prices, messages and identity — the rarity table is the only thing touching the roll, and it is clamped to 0.5x–2x of the defaults, cannot reach
mythic, and cannot zero a tier.