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, listing FishingWebhooks (Premium Plus) — the webhook identity, matching every other webhook feature

A Premium (non-Plus) guild gets a 403 from setWebhook despite 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.

Constructors

Methods

  • Hide a custom shop item. Disables rather than deletes — players may already own it.

    Parameters

    • __namedParameters: {
          auth: string;
          baseItemId: string;
          guildId: string;
      }
      • auth: string
      • baseItemId: string
      • guildId: string

    Returns Promise<WebResponse<{
        baseItemId: string;
        disabled: true;
    }>>

  • 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.

    Parameters

    • __namedParameters: {
          auth: string;
          guildId: string;
      }
      • auth: string
      • guildId: string

    Returns Promise<WebResponse<GuildFishingConfig>>

  • 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.

    Parameters

    • __namedParameters: {
          auth: string;
          guildId: string;
      }
      • auth: string
      • guildId: string

    Returns Promise<WebResponse<GuildFishingDockProgress>>

  • 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.

    Parameters

    Returns Promise<WebResponse<GuildFishingLeaderboard>>

  • Link 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.

    Parameters

    • __namedParameters: {
          auth: string;
          guildId: string;
          site?: "topgg";
      }
      • auth: string
      • guildId: string
      • Optionalsite?: "topgg"

    Returns Promise<WebResponse<GuildFishingListing>>

  • 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.

    Parameters

    • __namedParameters: {
          auth: string;
          guildId: string;
          repost?: boolean;
      }
      • auth: string
      • guildId: string
      • Optionalrepost?: boolean

    Returns Promise<WebResponse<GuildFishingDockPanel>>

  • Custom catch line, appended to the catch card. null or '' clears it.

    Parameters

    • __namedParameters: {
          auth: string;
          guildId: string;
          message: null | string;
      }
      • auth: string
      • guildId: string
      • message: null | string

    Returns Promise<WebResponse<{
        cleared?: boolean;
        message?: string;
    }>>

  • 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.

    Parameters

    • __namedParameters: {
          auth: string;
          guildId: string;
          rarities?: null | Record<string, string>;
          species?: null | Record<string, string>;
      }
      • auth: string
      • guildId: string
      • Optionalrarities?: null | Record<string, string>
      • Optionalspecies?: null | Record<string, string>

    Returns Promise<WebResponse<GuildFishingNames>>

  • 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.

    Parameters

    • __namedParameters: {
          auth: string;
          guildId: string;
          weights: null | Record<string, number>;
      }
      • auth: string
      • guildId: string
      • weights: null | Record<string, number>

    Returns Promise<WebResponse<GuildFishingRarityTable>>

  • 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).

    Parameters

    • __namedParameters: {
          auth: string;
          baseItemId: string;
          guildId: string;
          name?: null | string;
          priceCoins?: null | number;
      }
      • auth: string
      • baseItemId: string
      • guildId: string
      • Optionalname?: null | string
      • OptionalpriceCoins?: null | number

    Returns Promise<WebResponse<GuildFishingShopItem>>

  • Webhook identity for fishing messages. Premium Plus only — Premium alone gets a 403.

    Parameters

    • __namedParameters: {
          auth: string;
          avatarUrl?: string;
          enabled?: boolean;
          guildId: string;
          username?: string;
      }
      • auth: string
      • OptionalavatarUrl?: string
      • Optionalenabled?: boolean
      • guildId: string
      • Optionalusername?: string

    Returns Promise<WebResponse<GuildFishingWebhook>>

  • Parameters

    • __namedParameters: {
          auth: string;
          guildId: string;
      }
      • auth: string
      • guildId: string

    Returns Promise<WebResponse<{
        unlinked: true;
    }>>

  • Change 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.

    Parameters

    Returns Promise<WebResponse<GuildFishingConfigUpdate>>