feat(rust): the rewards — tally, kit reward, chat and the news leg (phase 13b, protocol 10)
Four event verbs and the announce leg, per PLAN.md §29: - rust.participation.open / .collect: the plugin counts who takes part (seconds, kills or both, in a zone this run opened or the whole server) and collect files them as the run's participants, keyed by Steam id. - rust.kit.entitle: the five recipient modes (D101), rows in the new rust_perm_run_grants (D84) unioned into the permission push, one extra use of the kit per reward as site-held credits on perm.sync (D103), and the rust.kit.entitled notice deferred from phase 10 (D64). - rust.announce: one server or every server (D105). - rust.chat announce leg, speaking only on servers whose new news switch is on (D104) - a card on Admin -> Rust visibility (D106). Budgets rust.grants and rust.announcements; the kit source and four fixed-choice sources (core has no enum param type). rust_perm_run_grants carries core's idempotency key so a revert of a lost answer can find its rows. Protocol 10. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
@@ -48,12 +48,33 @@ function withToken(row) {
|
||||
}
|
||||
}
|
||||
|
||||
return { id: row.id, name: row.name, baseUrl: row.sidecarBaseUrl, token, protocol: row.protocol }
|
||||
return {
|
||||
id: row.id,
|
||||
name: row.name,
|
||||
baseUrl: row.sidecarBaseUrl,
|
||||
token,
|
||||
protocol: row.protocol,
|
||||
// D104: whether a published news post is said in this server's chat.
|
||||
announceNews: Boolean(Number(row.announceNews)),
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* How many servers were enabled when this process last looked. An action's
|
||||
* `cost()` is synchronous and cannot ask the database, so `rust.announce` to
|
||||
* every server is priced at this — refreshed by every poll, which runs
|
||||
* continuously. One until the first poll, which is the least a fleet can be.
|
||||
*/
|
||||
let enabledCount = 1
|
||||
|
||||
function lastEnabledCount() {
|
||||
return enabledCount
|
||||
}
|
||||
|
||||
/** Every enabled server, with tokens, for the poller. */
|
||||
async function listForPolling() {
|
||||
const rows = await db.listServers({ enabledOnly: true })
|
||||
enabledCount = rows.length
|
||||
return rows.map(withToken)
|
||||
}
|
||||
|
||||
@@ -165,6 +186,7 @@ module.exports = {
|
||||
STALE_AFTER_MS,
|
||||
withToken,
|
||||
listForPolling,
|
||||
lastEnabledCount,
|
||||
listPublic,
|
||||
getPublic,
|
||||
listForAdmin,
|
||||
|
||||
Reference in New Issue
Block a user