The blocking model
A reported seed cannot be viewed on SLMAPS for a while. This page explains how long that is and when it ends.
Terms
| Term | Meaning |
|---|---|
| Block window | The span during which one seed cannot be viewed. It opens on the first report and closes on round_end or at the cap. |
| Cap | The longest a single window can be: 1 hour for a registration made from the game server, 20 minutes for a Discord HTTP key. |
| Budget | The total time one seed can ever be blocked. It equals the cap and shrinks by the time actually blocked whenever a window closes. |
| Cooldown | The 5 minutes after a window closes during which the same seed cannot open a new one. |
| One window per server | One server key holds at most one open window at a time. |
When a window opens
A round_start or periodic report opens a window. round_end never does. The length is decided like this.
window length = min(cap, remaining budget) cap = 60 min (self-claim, plugin) or 20 min (HTTP key) remaining budget = cap − total time this seed has been blocked so far
When the remaining budget is zero, no window opens and the response carries "exhausted": true. A self-claim key may continue a seed that an HTTP key already blocked for 20 minutes. A seed that has used 60 minutes cannot be blocked again by any key.
When a window closes
- A round_end report closes it at once. Only the time actually blocked is taken from the budget.
- It closes when the window length has passed since it opened.
- Another report of the same seed while the window is open changes nothing. Windows are never extended.
One window per server
While a window is open, a report of a different seed with the same key opens nothing. The next window can open once the previous one has closed and 5 minutes have passed since it opened. Send round_end when the round ends so the next round's seed is blocked on time.
What the report response tells you
Every well-formed report with a valid key answers 200. Read blockedUntil to learn whether a window is open.
| Situation | blockedUntil | exhausted |
|---|---|---|
| A new window opened | when it closes | absent |
| Same seed, window kept | unchanged | absent |
| Closed by round_end | null | absent |
| In cooldown | null | absent |
| This server is blocking another seed | null | absent |
| Budget used up | null | true |
What viewers see
- GET /api/maps/{seed} and GET /api/jobs/{seed}: 403 {"error":"blocked","blockedUntil":"…"}. Ask again after blockedUntil.
- GET /api/seeds: a blocked seed is left out of the list and reappears when the window closes.
- Public stats: counts are unaffected. The seed value of an open window is never published anywhere.
- Collection: when a window opens, detections of that seed from the last 5 minutes are deleted, and no new ones are recorded until it closes.
Examples
| Situation | Self-claim key (cap 60 min) | HTTP key (cap 20 min) |
|---|---|---|
| round_start 08:00, round_end 08:23 | Blocked 08:00 to 08:23. 37 minutes of budget left | Blocked 08:00 to 08:20. Closed at the cap, no budget left |
| No round_end ever sent | Blocked until 09:00. No budget left | Blocked until 08:20. No budget left |
| Restart mid-round gives a new seed | The new seed is visible until the old window closes. If you sent round_end first, the new window opens 5 minutes after the old one opened | Same |
| The same seed comes up the next day | Blocked for the remaining budget only: 37 minutes after the first row | Not blocked, exhausted: true |
Why it works this way
Blocking exists to hide your own seed during one round. The budget stops any single seed from being hidden forever, and one window per server stops one key from hiding many seeds at once.