Announcements and Webhooks
Announcements and Webhooks
Section titled “Announcements and Webhooks”Wonder exposes two outbound event surfaces:
- in-game announcements from
announcements.conf - Discord delivery from
discord-webhooks.conf
Announcements
Section titled “Announcements”announcements.conf now has two top-level sections:
presentations = [...]announcements = [...]
presentations
Section titled “presentations”Presentation rules classify Pokemon for announcement formatting and counting.
presentations = [ { id = "shiny" label = "Shiny" color-tag = "<yellow>" prefix = "<yellow>Shiny</yellow> " suffix = "" properties-match = "shiny=true" }]Available fields:
| Field | Purpose |
|---|---|
id | Stable identifier used for placeholders like {shinyCount} or {shinyMatched} |
label | Human-facing label for the presentation |
color-tag | Primary color tag associated with the presentation |
prefix | Inserted into {presentationPrefixes} when this rule matches |
suffix | Inserted into {presentationSuffixes} when this rule matches |
label-match | Match against live Pokemon form labels |
aspect-match | Match against the extracted aspect list |
properties-match | Match using a Cobblemon PokemonProperties query |
Matching behavior:
- Wonder evaluates
label-match,aspect-match, andproperties-matchas an AND chain - if none of those three are set, the presentation never matches
- multiple presentations can match the same Pokemon
announcements
Section titled “announcements”Announcement templates are still keyed by trigger:
announcements = [ { id = "queue_submit" enabled = true trigger = "queue.submit" permission = "wonder.use" message = "<gray>{playerName}</gray> has sent {presentationPrefixes}<white>{pokemonName}</white>{presentationSuffixes} <gray>into the Wonder system!</gray>" }]Current built-in triggers:
queue.submitstats.periodicresult.rare
stats.periodic is controlled by config.conf:
stats-announcements-enabled = truestats-announcement-interval-minutes = 30Wonder only broadcasts a template to players who satisfy its configured permission.
Runtime placeholders
Section titled “Runtime placeholders”For Pokemon-bearing events like queue.submit and result.rare, Wonder injects:
{playerName}{pokemonName}{pokemonSpecies}{channelId}{isShiny}{isLegendary}{isMythical}{isUltraBeast}{presentationLabels}{presentationPrefixes}{presentationSuffixes}{presentationColorTag}{presentationCount}
And for each matched presentation id, additional keys:
{shinyMatched}{shinyLabel}{shinyPrefix}{shinySuffix}{shinyColorTag}
Replace shiny with whatever id you configured.
For periodic stats announcements, Wonder also supports dynamic counters in the form:
{queueCount}{shinyCount}{legendaryCount}{mythicalCount}{ultraBeastCount}
Those *Count placeholders are resolved from the configured presentations list, not hardcoded separately.
Practical examples
Section titled “Practical examples”Queue submit using presentation-driven formatting:
message = "<gray>{playerName}</gray> has sent {presentationPrefixes}<white>{pokemonName}</white>{presentationSuffixes} <gray>into the Wonder system!</gray>"Periodic stats driven by presentation counters:
message = "There are currently <white>{queueCount}</white> Pokemon in Wonder, with <gold>{legendaryCount}</gold> legendary, <light_purple>{mythicalCount}</light_purple> mythical, <aqua>{ultraBeastCount}</aqua> ultra beast, and <yellow>{shinyCount}</yellow> shiny."Rare receive using the same presentation prefixes/suffixes:
message = "<gray>{playerName}</gray> obtained {presentationPrefixes}<white>{pokemonName}</white>{presentationSuffixes} <gray>from Wonder!</gray>"Discord Webhooks
Section titled “Discord Webhooks”discord-webhooks.conf routes Wonder events to Discord endpoints.
Supported event types:
POKEMON_QUEUEDRESULT_READYRESULT_CLAIMED
Sender modes:
ORCHESTRATOREVENT_SOURCEALL_SERVERS
Admin Commands
Section titled “Admin Commands”Wonder’s Discord webhook admin surface lives under:
/wonder admin discord-webhooks reload/wonder admin discord-webhooks test endpoint <id>/wonder admin discord-webhooks test rule <id>Use those to verify endpoint ids and render rules without waiting for a live Wonder event.