The module's half of PLAN_FIXES §6 step 2 (decisions D181-D185, docs#288). - F13/F14 (D170, D183): `world.expired`, recognisable from protocol 13 by its `what`, is handed to core as the resource the zone step ledgered (`world`, `<serverId>:<id>`) through ctx.events.expired, which records it `expired`. coreApi moves to ^1.11.0 (website#209). - F8 (D184): `plugin.loaded` / `plugin.unloaded` mark the permission sync dirty when the plugin added or removed permissions, so an unresolved grant lands on the next tick instead of the fifteen-minute audit. - Catalogue: plugin.loaded/unloaded, world.expired and lease.expired are staff kinds. The last two were never classified (default deny kept them off public pages); the test now covers every event kind through protocol 13. - F7: permission and title pushes hold while the stored hello says `worldReady: false` (a human's "sync now" does not); a failed or refused permission sync now logs at warn. - F2 (D185): the killfeed names an NPC attacker — a family (Scientist, Bandit guard, Bradley APC…) or the prefab without its variant digits (wolf2 → Wolf). - F5/F6: a link code is asked of the servers that minted one in the last six minutes first, then of the rest, each group in parallel; "unsure" only when one of the minting servers is unreachable. - D182: the admin server list carries the ZoneManager helper's state from the hello, and the servers page says what a missing or failed helper costs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
1301 lines
38 KiB
JSON
1301 lines
38 KiB
JSON
{
|
|
"_comment": "Generated freeze of module-rust's engagement contract (docs/modules/rust/PLAN.md §25). Regenerate with `npm run engagement:manifest` in server/. A renamed variable, a changed type or a widened ceiling breaks stored templates and rules, so the diff here is the review signal.",
|
|
"coreApi": "^1.11.0",
|
|
"triggers": [
|
|
{
|
|
"id": "rust.base.destroyed",
|
|
"label": "Your base was raided",
|
|
"description": "Part of a base you are authorised on was destroyed by another player: a wall, a door, an external wall or gate, or the tool cupboard.",
|
|
"kind": "event",
|
|
"subjectKey": "building",
|
|
"audience": "owner",
|
|
"ceiling": "owner",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "building",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "8113",
|
|
"description": "The base, as the id of its tool cupboard. The cooldown subject."
|
|
},
|
|
{
|
|
"name": "structure",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "door",
|
|
"description": "What was destroyed: \"building block\", \"door\", \"external wall\" or \"tool cupboard\"."
|
|
},
|
|
{
|
|
"name": "grid",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "H7",
|
|
"description": "The map grid square. Absent when the server could not work one out."
|
|
},
|
|
{
|
|
"name": "atGrid",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": " in H7",
|
|
"description": "Sentence fragment: \" in H7\" with its own leading space, or nothing when the grid is unknown."
|
|
},
|
|
{
|
|
"name": "ownerOnline",
|
|
"type": "boolean",
|
|
"required": true,
|
|
"example": false,
|
|
"description": "Whether YOU were online when it happened. The seeded rule alerts only when this is false."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.clan.disbanded",
|
|
"label": "Your clan was disbanded",
|
|
"description": "A clan you were in was disbanded.",
|
|
"kind": "event",
|
|
"subjectKey": "clanKey",
|
|
"audience": "members",
|
|
"ceiling": "members",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "clanKey",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main:12:1790142840000",
|
|
"description": "The clan's stable identity. The cooldown subject; not meant for display."
|
|
},
|
|
{
|
|
"name": "clan",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "The Rust Belt",
|
|
"description": "The clan's name."
|
|
},
|
|
{
|
|
"name": "clanUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/clans/main%3A12%3A1790142840000",
|
|
"description": "Site-relative path to the clan's page."
|
|
},
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "by",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Marisol",
|
|
"description": "Who disbanded it."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.clan.member.kicked",
|
|
"label": "Someone was removed from your clan",
|
|
"description": "A member was removed from a clan you are in — or you were.",
|
|
"kind": "event",
|
|
"subjectKey": "clanKey",
|
|
"audience": "members",
|
|
"ceiling": "members",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "clanKey",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main:12:1790142840000",
|
|
"description": "The clan's stable identity. The cooldown subject; not meant for display."
|
|
},
|
|
{
|
|
"name": "clan",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "The Rust Belt",
|
|
"description": "The clan's name."
|
|
},
|
|
{
|
|
"name": "clanUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/clans/main%3A12%3A1790142840000",
|
|
"description": "Site-relative path to the clan's page."
|
|
},
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "member",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Darrow",
|
|
"description": "Who was removed."
|
|
},
|
|
{
|
|
"name": "by",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Marisol",
|
|
"description": "Who removed them."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.clan.member.left",
|
|
"label": "Someone left your clan",
|
|
"description": "A member left a clan you are in.",
|
|
"kind": "event",
|
|
"subjectKey": "clanKey",
|
|
"audience": "members",
|
|
"ceiling": "members",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "clanKey",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main:12:1790142840000",
|
|
"description": "The clan's stable identity. The cooldown subject; not meant for display."
|
|
},
|
|
{
|
|
"name": "clan",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "The Rust Belt",
|
|
"description": "The clan's name."
|
|
},
|
|
{
|
|
"name": "clanUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/clans/main%3A12%3A1790142840000",
|
|
"description": "Site-relative path to the clan's page."
|
|
},
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "member",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Darrow",
|
|
"description": "Who left."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.kit.entitled",
|
|
"label": "An event rewarded you a kit",
|
|
"description": "An event on a Rust server rewarded you: a kit is waiting in the in-game Kits menu, with one extra use.",
|
|
"kind": "event",
|
|
"subjectKey": "rewardKey",
|
|
"audience": "owner",
|
|
"ceiling": "owner",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "rewardKey",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "41:7",
|
|
"description": "The run and step that awarded it. The cooldown subject; not meant for display."
|
|
},
|
|
{
|
|
"name": "kit",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "vip-starter",
|
|
"description": "The kit name, as the server Kits plugin has it."
|
|
},
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "mode",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "top",
|
|
"description": "How the recipients were chosen: everyone, top, minScore, random or topPercent."
|
|
},
|
|
{
|
|
"name": "accountUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/player/rust",
|
|
"description": "Site-relative path to your Rust account page."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.leaderboard.topped",
|
|
"label": "A new kills leader",
|
|
"description": "Somebody new leads the current wipe's kills on a server.",
|
|
"kind": "event",
|
|
"subjectKey": "serverId",
|
|
"audience": "subscribers",
|
|
"ceiling": "everyone",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "leader",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Marisol",
|
|
"description": "The new leader's in-game name."
|
|
},
|
|
{
|
|
"name": "kills",
|
|
"type": "int",
|
|
"required": true,
|
|
"example": 42,
|
|
"description": "Their kills this wipe."
|
|
},
|
|
{
|
|
"name": "leaderboardUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main?tab=leaderboard",
|
|
"description": "Site-relative path to the server's leaderboard."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.login.denied",
|
|
"label": "A login was not approved",
|
|
"description": "Somebody tried to join a server and was not let in within a minute: a ban, a failed authentication, or a player who gave up while connecting.",
|
|
"kind": "event",
|
|
"subjectKey": "steamId",
|
|
"audience": "staff",
|
|
"ceiling": "staff",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "steamId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "76561198000000002",
|
|
"description": "The Steam id that tried to connect. The cooldown subject."
|
|
},
|
|
{
|
|
"name": "player",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Darrow",
|
|
"description": "The name it connected with."
|
|
},
|
|
{
|
|
"name": "attemptedAt",
|
|
"type": "datetime",
|
|
"required": true,
|
|
"example": "2026-09-23T03:10:00Z",
|
|
"description": "When the attempt was made."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.player.banned",
|
|
"label": "A player was banned",
|
|
"description": "A player was banned on a server.",
|
|
"kind": "event",
|
|
"subjectKey": "steamId",
|
|
"audience": "staff",
|
|
"ceiling": "staff",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "steamId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "76561198000000002",
|
|
"description": "The banned player's Steam id. The cooldown subject."
|
|
},
|
|
{
|
|
"name": "player",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Darrow",
|
|
"description": "The banned player's name."
|
|
},
|
|
{
|
|
"name": "reason",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Cheating",
|
|
"description": "The reason given."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.player.linked",
|
|
"label": "A Steam account was linked",
|
|
"description": "A Steam account was linked to your website account with an in-game code.",
|
|
"kind": "event",
|
|
"subjectKey": "steamId",
|
|
"audience": "owner",
|
|
"ceiling": "owner",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "steamId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "76561198000000001",
|
|
"description": "The Steam account that was linked. Also the cooldown subject."
|
|
},
|
|
{
|
|
"name": "player",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Marisol",
|
|
"description": "The in-game name the game reported when it was linked."
|
|
},
|
|
{
|
|
"name": "accountUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/player/rust",
|
|
"description": "Site-relative path to your Rust account page."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.player.reported",
|
|
"label": "A player was reported",
|
|
"description": "A player filed an in-game report against another.",
|
|
"kind": "event",
|
|
"subjectKey": "steamId",
|
|
"audience": "staff",
|
|
"ceiling": "staff",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "steamId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "76561198000000002",
|
|
"description": "The reported player's Steam id. The cooldown subject."
|
|
},
|
|
{
|
|
"name": "player",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Darrow",
|
|
"description": "The reported player's name."
|
|
},
|
|
{
|
|
"name": "reporter",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Marisol",
|
|
"description": "Who filed the report."
|
|
},
|
|
{
|
|
"name": "reportType",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "cheat",
|
|
"description": "The category the reporter chose."
|
|
},
|
|
{
|
|
"name": "topic",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Aimbot at the dome",
|
|
"description": "The report's subject line."
|
|
},
|
|
{
|
|
"name": "message",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Headshots through two walls.",
|
|
"description": "The report's text."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.player.unbanned",
|
|
"label": "A player was unbanned",
|
|
"description": "A ban on a server was lifted.",
|
|
"kind": "event",
|
|
"subjectKey": "steamId",
|
|
"audience": "staff",
|
|
"ceiling": "staff",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "steamId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "76561198000000002",
|
|
"description": "The player's Steam id. The cooldown subject."
|
|
},
|
|
{
|
|
"name": "player",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Darrow",
|
|
"description": "The player's name."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.server.offline",
|
|
"label": "A server went offline",
|
|
"description": "A server's game stopped, crashed, or stopped talking to the website.",
|
|
"kind": "event",
|
|
"subjectKey": "serverId",
|
|
"audience": "subscribers",
|
|
"ceiling": "everyone",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.server.online",
|
|
"label": "A server came online",
|
|
"description": "A server's game started, or came back after being unreachable.",
|
|
"kind": "event",
|
|
"subjectKey": "serverId",
|
|
"audience": "subscribers",
|
|
"ceiling": "everyone",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "rust.wipe.started",
|
|
"label": "A server wiped",
|
|
"description": "A server started a new wipe: a fresh map, and everything built on the old one gone.",
|
|
"kind": "event",
|
|
"subjectKey": "serverId",
|
|
"audience": "subscribers",
|
|
"ceiling": "everyone",
|
|
"version": 1,
|
|
"variables": [
|
|
{
|
|
"name": "serverId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "main",
|
|
"description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts."
|
|
},
|
|
{
|
|
"name": "server",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "Runic Gateway | Main",
|
|
"description": "The server's display name."
|
|
},
|
|
{
|
|
"name": "serverUrl",
|
|
"type": "url",
|
|
"required": false,
|
|
"example": "/rust/servers/main",
|
|
"description": "Site-relative path to the server's page."
|
|
},
|
|
{
|
|
"name": "title",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back online",
|
|
"description": "A one-line headline naming what happened and where. Core generic bodies use it as the title."
|
|
},
|
|
{
|
|
"name": "intro",
|
|
"type": "string",
|
|
"required": false,
|
|
"example": "Main is back up and taking players.",
|
|
"description": "One sentence of detail. Core generic bodies use it as the body."
|
|
},
|
|
{
|
|
"name": "wipeId",
|
|
"type": "string",
|
|
"required": true,
|
|
"example": "1790142840-3000-1234",
|
|
"description": "The new wipe's identity."
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"streams": [
|
|
{
|
|
"id": "rust.base.destroyed",
|
|
"label": "Your base was raided",
|
|
"personal": true,
|
|
"requiresLinkedAccount": true
|
|
},
|
|
{
|
|
"id": "rust.server.offline",
|
|
"label": "A server went offline",
|
|
"personal": false,
|
|
"requiresLinkedAccount": false
|
|
},
|
|
{
|
|
"id": "rust.server.online",
|
|
"label": "A server came online",
|
|
"personal": false,
|
|
"requiresLinkedAccount": false
|
|
},
|
|
{
|
|
"id": "rust.wipe.started",
|
|
"label": "A server wiped",
|
|
"personal": false,
|
|
"requiresLinkedAccount": false
|
|
}
|
|
],
|
|
"audiences": [
|
|
{
|
|
"id": "rust.clan.members",
|
|
"label": "Members of a clan",
|
|
"params": [
|
|
{
|
|
"id": "clan",
|
|
"type": "string",
|
|
"required": true
|
|
}
|
|
],
|
|
"ceiling": "members"
|
|
},
|
|
{
|
|
"id": "rust.server.players",
|
|
"label": "Everyone who has played on a server",
|
|
"params": [
|
|
{
|
|
"id": "serverId",
|
|
"type": "string",
|
|
"required": true
|
|
}
|
|
],
|
|
"ceiling": "authenticated"
|
|
},
|
|
{
|
|
"id": "rust.wipe.participants",
|
|
"label": "Everyone playing a server's current wipe",
|
|
"params": [
|
|
{
|
|
"id": "serverId",
|
|
"type": "string",
|
|
"required": true
|
|
}
|
|
],
|
|
"ceiling": "authenticated"
|
|
}
|
|
],
|
|
"ruleGroups": [
|
|
{
|
|
"key": "raid-v1",
|
|
"rules": [
|
|
{
|
|
"trigger_id": "rust.base.destroyed",
|
|
"audience": "owner",
|
|
"channels": [
|
|
"email",
|
|
"inapp",
|
|
"push"
|
|
],
|
|
"template_keys": {
|
|
"email": "rust.base.destroyed",
|
|
"inapp": "rust.base.destroyed-inapp",
|
|
"digest": "notify.digest"
|
|
},
|
|
"conditions": {
|
|
"variable": "ownerOnline",
|
|
"cmp": "eq",
|
|
"value": false
|
|
},
|
|
"cooldown_seconds": 1800,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": "wipe-v1",
|
|
"rules": [
|
|
{
|
|
"trigger_id": "rust.wipe.started",
|
|
"audience": "subscribers",
|
|
"channels": [
|
|
"email",
|
|
"inapp",
|
|
"push"
|
|
],
|
|
"template_keys": {
|
|
"email": "rust.wipe.started",
|
|
"inapp": "rust.wipe.started-inapp",
|
|
"digest": "notify.digest"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 21600,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": "server-v1",
|
|
"rules": [
|
|
{
|
|
"trigger_id": "rust.server.online",
|
|
"audience": "subscribers",
|
|
"channels": [
|
|
"inapp",
|
|
"push"
|
|
],
|
|
"template_keys": {
|
|
"inapp": "inapp.event"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 3600,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
},
|
|
{
|
|
"trigger_id": "rust.server.offline",
|
|
"audience": "subscribers",
|
|
"channels": [
|
|
"inapp",
|
|
"push"
|
|
],
|
|
"template_keys": {
|
|
"inapp": "inapp.event"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 3600,
|
|
"delay_seconds": 300,
|
|
"cancel_on": [
|
|
"rust.server.online"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": "leaderboard-v1",
|
|
"rules": [
|
|
{
|
|
"trigger_id": "rust.leaderboard.topped",
|
|
"audience": "subscribers",
|
|
"channels": [
|
|
"inapp"
|
|
],
|
|
"template_keys": {
|
|
"inapp": "inapp.event"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 3600,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": "account-v1",
|
|
"rules": [
|
|
{
|
|
"trigger_id": "rust.player.linked",
|
|
"audience": "owner",
|
|
"channels": [
|
|
"email",
|
|
"inapp"
|
|
],
|
|
"template_keys": {
|
|
"email": "notify.event",
|
|
"inapp": "inapp.event",
|
|
"digest": "notify.digest"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 0,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": "rewards-v1",
|
|
"rules": [
|
|
{
|
|
"trigger_id": "rust.kit.entitled",
|
|
"audience": "owner",
|
|
"channels": [
|
|
"email",
|
|
"inapp"
|
|
],
|
|
"template_keys": {
|
|
"email": "notify.event",
|
|
"inapp": "inapp.event",
|
|
"digest": "notify.digest"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 0,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": "clans-v1",
|
|
"rules": [
|
|
{
|
|
"trigger_id": "rust.clan.member.left",
|
|
"audience": "members",
|
|
"channels": [
|
|
"inapp"
|
|
],
|
|
"template_keys": {
|
|
"inapp": "inapp.event"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 0,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
},
|
|
{
|
|
"trigger_id": "rust.clan.member.kicked",
|
|
"audience": "members",
|
|
"channels": [
|
|
"inapp"
|
|
],
|
|
"template_keys": {
|
|
"inapp": "inapp.event"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 0,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
},
|
|
{
|
|
"trigger_id": "rust.clan.disbanded",
|
|
"audience": "members",
|
|
"channels": [
|
|
"email",
|
|
"inapp"
|
|
],
|
|
"template_keys": {
|
|
"email": "notify.event",
|
|
"inapp": "inapp.event",
|
|
"digest": "notify.digest"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 0,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": "moderation-v1",
|
|
"rules": [
|
|
{
|
|
"trigger_id": "rust.player.reported",
|
|
"audience": "staff",
|
|
"channels": [
|
|
"email",
|
|
"inapp"
|
|
],
|
|
"template_keys": {
|
|
"email": "notify.event",
|
|
"inapp": "inapp.event",
|
|
"digest": "notify.digest"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 3600,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
},
|
|
{
|
|
"trigger_id": "rust.player.banned",
|
|
"audience": "staff",
|
|
"channels": [
|
|
"inapp"
|
|
],
|
|
"template_keys": {
|
|
"inapp": "inapp.event"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 0,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
},
|
|
{
|
|
"trigger_id": "rust.player.unbanned",
|
|
"audience": "staff",
|
|
"channels": [
|
|
"inapp"
|
|
],
|
|
"template_keys": {
|
|
"inapp": "inapp.event"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 0,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
},
|
|
{
|
|
"trigger_id": "rust.login.denied",
|
|
"audience": "staff",
|
|
"channels": [
|
|
"inapp"
|
|
],
|
|
"template_keys": {
|
|
"inapp": "inapp.event"
|
|
},
|
|
"conditions": null,
|
|
"cooldown_seconds": 3600,
|
|
"delay_seconds": 0,
|
|
"cancel_on": []
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"templates": [
|
|
{
|
|
"key": "rust.base.destroyed",
|
|
"channel": "email",
|
|
"triggerId": "rust.base.destroyed",
|
|
"seedVersion": 1
|
|
},
|
|
{
|
|
"key": "rust.base.destroyed-inapp",
|
|
"channel": "inapp",
|
|
"triggerId": "rust.base.destroyed",
|
|
"seedVersion": 1
|
|
},
|
|
{
|
|
"key": "rust.wipe.started",
|
|
"channel": "email",
|
|
"triggerId": "rust.wipe.started",
|
|
"seedVersion": 1
|
|
},
|
|
{
|
|
"key": "rust.wipe.started-inapp",
|
|
"channel": "inapp",
|
|
"triggerId": "rust.wipe.started",
|
|
"seedVersion": 1
|
|
}
|
|
]
|
|
}
|