The Notice Bot
A Second Life bot account that you run, in one small Docker container. It logs into SL like a client, connects out to the XTech controller, and from then on your dashboard drives it — no server hosting knowledge required beyond this page.
What it does
- Scheduled group notices — event reminders go out to every SL group mapped to the event's genre, on time, exactly once (even across restarts).
- Staff reminder IMs — "you're on in 30 minutes" to the DJ and host of an event.
- Group invites & auto-greet — welcome arrivals at your venue and offer your group, if you turn it on (Manage Venue → Auto-Greet & Invite).
- Notice attachments — drop an item on the bot in-world (or
accept via the dashboard); it files it into its
- XTech Bot -folder, and you can attach it to group notices from the Bots page. - Manual actions — send an IM or a group notice right now, from the dashboard.
No open ports needed. The bot dials out
to Second Life and to the controller. It runs happily behind home NAT, on a VPS, or
on the PC in your closet — anywhere Docker runs and the machine stays on.
What you need
- A Second Life account for the bot. A regular account you create for this purpose (flag it as Scripted Agent in your SL account settings). It must be a member of the groups it will notice, with the group's Send Notices power.
- A machine that stays on, with Docker. A small Linux VPS, a home server, or a Windows PC with Docker Desktop.
- The bot folder — two small text files you received:
docker-compose.ymland.env.example. The bot software itself is a prebuilt image pulled from our registry; there is nothing to build. - Two credentials from the dashboard's Bots page — next section: a registry token (lets your machine pull the image) and a bot token (lets the bot connect to the controller).
Register the bot on the dashboard
- Open Bots → Register a New Bot and give it a name.
- You're shown the bot's token and a ready-made
.envblock. Copy it now — the token is only displayed once. (Lost it? Regenerate Token on the same page and update your.env.) - In the Run Your Bot (Docker) card on the same page, click
Generate Registry Token. It hands you a complete
docker logincommand — also shown once. This is what lets your machine pull the bot image; your web account (with a venue) is the login. - On Manage Venue → Notice Bot, attach the bot to your venue so events know who delivers them.
Run it — Linux
Any distro with Docker Engine + the compose plugin (install guide). Then, inside the bot folder:
# 1. Log the machine into the registry (paste the command from the Bots page)
docker login registry.xtech.dev -u YOUR-USERNAME -p YOUR-REGISTRY-TOKEN
# 2. Create your config from the template
cp .env.example .env
nano .env
# 3. Pull the image and start (detached; restarts itself on reboot)
docker compose pull
docker compose up -d
# 4. Watch it log in
docker compose logs -f
In .env, the essentials are:
SL_FIRST_NAME / SL_LAST_NAME / SL_PASSWORD |
The bot account's SL login. Single-word names use last name
Resident. |
|---|---|
CONTROLLER_WS_URL, BOT_TOKEN, BOT_NAME |
Paste these straight from the Register a New Bot panel. |
SL_MFA_CODE |
Only if the account has two-factor enabled: put a current code in for the first start. The bot saves SL's device hash to a Docker volume, so you never need it again — clear the variable afterwards. |
| Everything else | Safe defaults. The region-restart settings let the bot step aside during a restart and walk itself home after; the IM pacing settings keep it under SL's IM throttle. |
Run it — Windows (Docker Desktop)
- Install Docker Desktop from docker.com. Accept the WSL 2 option when it asks (it will install/enable it for you), reboot if prompted, and make sure the whale icon says it's running.
- Open PowerShell in the bot folder (Shift+right-click the
folder → Open PowerShell window here) and do the same steps:
docker login registry.xtech.dev -u YOUR-USERNAME -p YOUR-REGISTRY-TOKEN Copy-Item .env.example .env notepad .env # fill it in, save, close docker compose pull docker compose up -d docker compose logs -f - Keep the machine awake. The container auto-starts with Docker Desktop, but Windows sleep stops Docker: Settings → System → Power → set Sleep to Never (and in Docker Desktop settings, enable Start Docker Desktop when you sign in).
Care & feeding
- Updating: when we announce a new bot version, run
docker compose pull && docker compose up -d. That's the whole update. Your.envand the saved 2FA hash (a Docker volume) both survive it. - Stopping:
docker compose down. Start again withdocker compose up -d. - Inventory hygiene: the bot keeps its notice attachments
under the
- XTech Bot -folder; new arrivals land inNew. Manage it from the dashboard's Bots page — the attachment picker is locked to that folder on purpose. - Don't rush the IMs. Outbound IMs are deliberately paced —
SL suspends accounts that burst IMs ("excessive instant messages"). Leave
SL_IM_MIN_GAP_MSalone unless you enjoy support tickets.
Troubleshooting
| Dashboard shows the bot offline | docker compose logs -f and read the last lines. The bot
reconnects to both SL and the controller by itself, so a brief blip
heals; a wrong password or token does not. |
|---|---|
| Token rejected | Regenerate it on the Bots page, paste the
new value into .env, then
docker compose up -d. |
docker compose pull says unauthorized / denied |
The machine isn't logged into the registry (or the registry token was
regenerated since). Generate a token in the Bots page's
Run Your Bot (Docker) card and run its
docker login command again. Note the login belongs to your
web account — it needs a venue attached to it. |
| Login wants 2FA every start | The device hash isn't persisting — make sure you're using the supplied
docker-compose.yml (it mounts the bot-data
volume for exactly this). |
| Notices don't send to a group | The bot must be in the group with the Send Notices power — check the Groups panel on the Bots page, which shows exactly this. |
| Bot vanished after a region restart | It leaves before the restart and walks home afterwards, retrying until the region is back. Give it a few minutes; the logs narrate the whole trip. |