Skip to content

Stage 1: one event, one queue

Every Pack starts with a pack.toml. Here’s the smallest useful one, a single say event on a single chat queue:

manifest = 1
id = "tv.mobrule.doom"
name = "Doom Chaos"
version = "0.1.0"
mpp = "2"
authors = ["you"]
[adapter]
command = "python3"
args = ["-u", "adapter.py"]
restart = "on_crash"
[adapter.env]
DOOM_RCON_HOST = "127.0.0.1"
DOOM_RCON_PORT = "10666"
[queues.chat]
ready_after = "applied"
[events.say]
title = "Say in game chat"
summary = "Broadcast a viewer message into the game's chat."
queue = "chat"
[events.say.params_schema]
type = "object"
additionalProperties = false
required = ["message"]
[events.say.params_schema.properties.message]
type = "string"
minLength = 1
maxLength = 140
"x-mobrule-viewer-override" = true

Three things worth noticing:

  • [adapter.env] carries the RCON address but not the password. Manifest contents are hashed and visible. The adapter reads DOOM_RCON_PASSWORD from the environment the bridge was launched from.
  • "x-mobrule-viewer-override" = true on message means the viewer types the text. The platform validates it against the schema (1 to 140 chars) before an Invocation is ever produced.
  • ready_after = "applied" is the default queue policy. We declare it explicitly because stage 3 will contrast it with "done".

The manifest declares what viewers can trigger. Next: how the adapter reaches into the game.