Where /fish may be used. Empty means anywhere. At most maxAllowedChannels entries.
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.
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.
May only ever LENGTHEN the cast wait, and is capped at ten minutes. null clears it.
Must be one of autoClearOptions - any other value is refused.
Restrict the dock channel to boss fights only.
Keep the panel pinned to the bottom of the channel as people talk.
The master switch. Everything else is inert while this is false.
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.
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.
OptionallogWhere 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.
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.
The writable half of the fishing setup - every field
updateConfigaccepts.Split out from
GuildFishingConfigso the input map cannot drift into promising that read-only context (baseCooldownMs,autoClearOptions) can be written.