Type Alias GuildFishingConfigInput

GuildFishingConfigInput: {
    allowedChannelIds: string[];
    boosterAdminOnly: boolean;
    boosterRoleId: string | null;
    bossLogChannelId: string | null;
    bossNotifyRoleId: string | null;
    cooldownOverrideMs: number | null;
    dockAutoClear: boolean;
    dockAutoClearMinutes: number;
    dockBossOnly: boolean;
    dockChannelId: string | null;
    dockSticky: boolean;
    enabled: boolean;
    levelUpChannelId: string | null;
    levelUpClearSeconds: number;
    logChannelId: string | null;
    logChannelOverrides?: Partial<Record<GuildFishingEventKind, string | null>>;
    publicBoard: boolean;
}

The writable half of the fishing setup - every field updateConfig accepts.

Split out from GuildFishingConfig so the input map cannot drift into promising that read-only context (baseCooldownMs, autoClearOptions) can be written.

Type declaration

  • allowedChannelIds: string[]

    Where /fish may be used. Empty means anywhere. At most maxAllowedChannels entries.

  • boosterAdminOnly: boolean
  • boosterRoleId: string | null
  • bossLogChannelId: string | null

    Where finished boss fights are recorded, with their date, duration and top damage.

    Separate from logChannelId and from dockChannelId on purpose: the dock is swept by auto-clear to keep it short, and a log wants the opposite. Nothing prunes this one.

  • bossNotifyRoleId: string | null

    Role pinged when a boss arrives, if the guild sets one.

    Players opt IN from the dock card rather than being assigned it - a boss lasts minutes, so an un-optable ping is the fastest way to make a channel unbearable.

  • cooldownOverrideMs: number | null

    May only ever LENGTHEN the cast wait, and is capped at ten minutes. null clears it.

  • dockAutoClear: boolean
  • dockAutoClearMinutes: number

    Must be one of autoClearOptions - any other value is refused.

  • dockBossOnly: boolean

    Restrict the dock channel to boss fights only.

  • dockChannelId: string | null
  • dockSticky: boolean

    Keep the panel pinned to the bottom of the channel as people talk.

  • enabled: boolean

    The master switch. Everything else is inert while this is false.

  • levelUpChannelId: string | null

    Where level-up messages go.

    null keeps them on the cast reply, which is the default and what happened before this existed. Set it and they are posted there as their own message instead - never both, or one level-up would be announced twice.

  • levelUpClearSeconds: number

    Seconds before an INLINE level-up is cleared. 0 keeps it, and is the default.

    Must be one of levelUpClearOptions - any other value is refused. Only applies when levelUpChannelId is null: a level-up posted to its own channel IS the feed, so clearing it would empty the thing the channel exists for.

  • logChannelId: string | null
  • OptionallogChannelOverrides?: Partial<Record<GuildFishingEventKind, string | null>>

    Where each KIND of fishing log entry goes, overriding logChannelId.

    THREE states, and two of them look the same if you build this with ??:

    value meaning
    key absent use logChannelId - the default, and what every guild has today
    key -> id send this kind to that channel instead
    key -> null do not log this kind at all

    So an absent key and a null one are NOT interchangeable: null is how a server keeps moderation records while switching off the level-up feed, which is the main thing this exists for. A form that omits a key and a form that sends null mean different things.

    Keys are validated server-side against the live kind list - send an unknown one and the whole PATCH is refused with a 400, rather than storing a route that can never match. logKinds on the response is that list; prefer it over the union here, which is a hand-copy.

    Absent on APIs predating per-kind routing, where the single logChannelId carried everything.

  • publicBoard: boolean

    Publish this guild's leaderboard at /public/fishing/:guildId/leaderboard, readable with no session. OFF by default, and it is the owner's call rather than ours: the board carries member usernames next to their activity here.

    While this is false, publicFishing.getPublicLeaderboard answers 404 for the guild - and 404 rather than 403 on purpose, so a server that has not opted in is not confirmed to exist.