Skip to content

Commit d4e4340

Browse files
committed
Update README.md: Enhance features section with detailed onboarding, chat bridge, commands, and live map events
1 parent 8312171 commit d4e4340

1 file changed

Lines changed: 80 additions & 9 deletions

File tree

README.md

Lines changed: 80 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,73 @@ A self-hosted Discord bot for the Rust+ companion app.
44

55
## Status
66

7-
**Foundation** — the bot boots, registers slash commands, and persists data.
8-
Available now: guild configuration, `/server add|list|remove`, `/bind`.
9-
Live Rust+ features (pairing, chat bridge, map events, smart devices, cameras) are planned in upcoming subsystems.
7+
The bot is live: it pairs with Rust+ over FCM, holds a socket per server, and
8+
auto-provisions its own Discord channels. Pairing/connection, the chat bridge,
9+
in-game `!commands` and slash surfaces, live map events, and map rendering are all
10+
shipped. Smart devices and cameras are next.
11+
12+
## Features
13+
14+
### Onboarding & connection
15+
16+
- **Self-provisioning workspace**`/setup` (Manage Server) creates a global
17+
`RustPlusBot` category (`#information`, `#setup`, `#settings`) plus one category
18+
per paired server. A declarative reconciler keeps channels/messages converged,
19+
self-heals deleted channels, and is idempotent under a per-guild lock.
20+
- **FCM pairing** — connect a Rust+ account from `#setup`; pairing a server in-game
21+
auto-registers it (servers are never typed by hand) and the bot provisions that
22+
server's channels.
23+
- **Credential pool per server** — multiple accounts can pair with the same server;
24+
the bot keeps one live socket per `(guild, server)` with **hot-swap** of the
25+
active player (select menu on `#info`) and **auto-failover** to a standby
26+
credential when one goes invalid (owner is DM'd).
27+
- **Lifecycle controls** — "Remove server" (on `#info`) and "Disconnect account"
28+
(on `#setup`), both Manage-Server-gated with a confirmation step; cascade
29+
cleanup of channels, credentials, and live state.
30+
- **Live status**`#info` shows connection status, player count, and a team
31+
summary (online/total + leader), refreshed on connection-state changes.
32+
- **Bilingual** — every provisioned surface renders in **English or French**,
33+
switchable from a select menu in `#settings`.
34+
35+
### Team chat bridge
36+
37+
- Two-way relay between in-game team chat and a per-server `#teamchat` channel
38+
(via a managed webhook), with echo/loop suppression.
39+
40+
### In-game `!commands`
41+
42+
Run in team chat by any teammate; replies in the guild's language with a
43+
configurable per-server prefix (default `!`) and per-command cooldowns:
44+
45+
- **Server**`!pop`, `!time`, `!wipe`
46+
- **Team**`!online`, `!offline`, `!team`, `!alive`, `!steamid [name]`, `!prox [name]`
47+
- **Live events**`!cargo`, `!heli`, `!chinook`, `!small`, `!large`, `!events`
48+
- **Control**`!mute` / `!unmute` (gate all bot→game output)
49+
50+
### Slash commands
51+
52+
- **Server data** (ephemeral, with a `server` selector when several are paired) —
53+
`/pop`, `/time`, `/wipe`, `/online`, `/offline`, `/team`, `/alive`, `/small`, `/large`
54+
- **Utility**`/help`, `/uptime`, `/leader` (Manage Server — transfer in-game team leadership)
55+
- **Admin**`/setup`, `/workspace reset`, `/workspace simulate-server`
56+
57+
### Live map events
58+
59+
- Per-server `#events` feed (and an in-game team-chat mirror) for **Cargo Ship**,
60+
**Patrol Helicopter**, and **Chinook (CH47)** entering/leaving, plus **small /
61+
large oil rig** activation, "crate lootable", and respawn — derived from
62+
polling the Rust+ map markers and monuments.
63+
64+
### Map rendering
65+
66+
- Per-server `#map` channel renders the live game map as an image with toggleable
67+
layers — **Grid**, **Markers**, **Monuments**, **Vendor**, **Players**, **Rigs**
68+
controlled from a Manage-Server-gated control message.
69+
70+
### Foundation
71+
72+
- Multi-guild, self-hosted, per-guild isolation everywhere; SQLite persistence;
73+
credentials protected at rest; fail-fast token validation on startup.
1074

1175
## Tech stack
1276

@@ -36,10 +100,17 @@ See [docs/development/running-locally.md](docs/development/running-locally.md).
36100

37101
| Project | Responsibility |
38102
| --- | --- |
39-
| `RustPlusBot.Abstractions` | Shared seams: `IClock`, `IEventBus`, `ICredentialProtector`, `ICredentialStore` |
103+
| `RustPlusBot.Abstractions` | Shared seams: `IClock`, `IEventBus`, credential/connection contracts, events |
40104
| `RustPlusBot.Domain` | Entities and enums |
41105
| `RustPlusBot.Persistence` | `BotDbContext`, EF Core services, SQLite migrations |
42-
| `RustPlusBot.Discord` | Discord.Net gateway, hosted service, slash-command interaction modules |
106+
| `RustPlusBot.Discord` | Discord.Net gateway, hosted service, interaction modules |
107+
| `RustPlusBot.Features.Workspace` | Channel/message provisioning, reconciler, `#info`/`#setup`/`#settings` surfaces |
108+
| `RustPlusBot.Features.Pairing` | FCM pairing listener, credential intake, account disconnect |
109+
| `RustPlusBot.Features.Connections` | Live socket supervisor, hot-swap/failover, Rust+ query seam |
110+
| `RustPlusBot.Features.Chat` | Two-way `#teamchat` ↔ in-game chat bridge |
111+
| `RustPlusBot.Features.Commands` | In-game `!commands`, slash surfaces, `/help`/`/leader` |
112+
| `RustPlusBot.Features.Events` | Live map-event classification + `#events` feed |
113+
| `RustPlusBot.Features.Map` | Map image rendering with toggleable layers |
43114
| `RustPlusBot.Host` | Generic Host entry point, DI wiring, startup validation |
44115

45116
## Roadmap
@@ -48,10 +119,10 @@ Subsystems are built in order; each has its own spec → plan → build cycle.
48119

49120
| # | Subsystem | Status |
50121
| --- | --- | --- |
51-
| 0 | Foundation (bootable host, config/persistence, `/server`, `/bind`) | Done |
52-
| 1 | Pairing & connection (FCM, credential pool, hot-swap, auto-failover) | Planned |
53-
| 2 | Chat bridge + `!commands` | Planned |
54-
| 3 | Map + live events | Planned |
122+
| 0 | Foundation (bootable host, config/persistence, workspace provisioning) | Done |
123+
| 1 | Pairing & connection (FCM, credential pool, hot-swap, auto-failover) | Done |
124+
| 2 | Map + live events (events feed, oil-rig detection, map render + layers) | Done |
125+
| 3 | Chat bridge + `!commands` + slash surfaces | Done |
55126
| 4 | Smart devices | Planned |
56127
| 5 | Cameras | Planned |
57128

0 commit comments

Comments
 (0)