Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
b125ec2
Add clan support design spec
HandyS11 Jul 21, 2026
fbe030b
Add clan support implementation plan
HandyS11 Jul 21, 2026
8ae1acc
Replace the cloned clan bridge with a kind-driven shared bridge
HandyS11 Jul 21, 2026
9d43ef4
Add clan snapshot records and bus events
HandyS11 Jul 21, 2026
9c6779e
Map clan responses and extend the connection seam
HandyS11 Jul 21, 2026
6edea15
Require cancellation-guarded broad catches in the clan plan
HandyS11 Jul 21, 2026
affaad9
Guard broad clan-connection catches against caller cancellation; asse…
HandyS11 Jul 21, 2026
12833c8
Publish clan chat and clan state from the supervisor
HandyS11 Jul 21, 2026
4da6b28
Persist clan state and cached player names
HandyS11 Jul 21, 2026
6eedfa6
Fix ClanStore review findings: GuildId-agnostic name lookup, IClock i…
HandyS11 Jul 21, 2026
0e8aeb3
Gate workspace channels on capabilities and support pinning
HandyS11 Jul 21, 2026
6b10a4e
Carry Task 5 review concerns into the clan plan
HandyS11 Jul 21, 2026
ab35807
Note the capability provider constraints in the clan plan
HandyS11 Jul 21, 2026
0557308
Make the clan renderers' empty-payload contract explicit
HandyS11 Jul 21, 2026
4a8d0d6
Unify the chat sender, locator and dedup seams across channel kinds
HandyS11 Jul 21, 2026
5367fc3
Close chat locator Kind coverage gap in WorkspaceRegistrationTests
HandyS11 Jul 21, 2026
918ce97
Drive the chat bridge by channel kind to serve clan chat
HandyS11 Jul 21, 2026
dd85385
Narrow the cancellation-guard constraint to fallback-returning methods
HandyS11 Jul 21, 2026
18e2a16
Apply Task 7 chat bridge review findings
HandyS11 Jul 21, 2026
762ec92
Add the clan snapshot differ
HandyS11 Jul 21, 2026
f48a4b0
Correct the clan plan's expected test counts
HandyS11 Jul 21, 2026
2e8794f
Add tests pinning sub-ordering and the old-role guard branch in ClanS…
HandyS11 Jul 21, 2026
7bdcaaa
Render the clan overview, roster and invites embeds
HandyS11 Jul 21, 2026
3d09868
Warn that Task 12's key grep misses interpolated keys
HandyS11 Jul 21, 2026
1fae657
Pin clan #claninfo renderer contracts that mutation testing found unp…
HandyS11 Jul 21, 2026
227b57a
Add the clan MOTD button and modal
HandyS11 Jul 22, 2026
04aba20
Apply clan state, post the change feed, and wire the module
HandyS11 Jul 22, 2026
99bd1cb
Pin the clan capability cache and guard its invalidation race
HandyS11 Jul 22, 2026
3d8648a
Localize the clan channels, embeds and change feed
HandyS11 Jul 22, 2026
6324f4c
Translate the French clan channel names
HandyS11 Jul 22, 2026
6a768d2
Align the French clan-info channel name with its sibling
HandyS11 Jul 22, 2026
70374af
Compose the clan module into the host
HandyS11 Jul 22, 2026
bf8fccb
Fix the cross-cutting clan defects the whole-branch review found
HandyS11 Jul 22, 2026
359ccfb
Correct three clan comments that describe code that does not exist
HandyS11 Jul 22, 2026
c906a92
Make the workspace registry guard actually fail startup fast
HandyS11 Jul 22, 2026
d5ef79f
Skip the team-info socket call when every clan member's name is cached
HandyS11 Jul 22, 2026
1efe138
Filter clan name lookups by GuildId and self-heal stale GuildId on ev…
HandyS11 Jul 22, 2026
0615394
Bump RustPlusApi to 2.0.0-beta.5 and surface clan probe diagnostics
HandyS11 Jul 22, 2026
0bf4b74
Drop clan embed pinning and keep gated channels in spec order
HandyS11 Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
<PackageVersion Include="Persistord.Core" Version="1.0.0-beta2" />
<PackageVersion Include="RustMapsApi" Version="1.0.0-beta.3" />
<PackageVersion Include="RustMapsApi.Assets" Version="1.0.0-beta.3" />
<PackageVersion Include="RustPlusApi" Version="2.0.0-beta.4" />
<PackageVersion Include="RustPlusApi.Fcm" Version="2.0.0-beta.4" />
<PackageVersion Include="RustPlusApi" Version="2.0.0-beta.5" />
<PackageVersion Include="RustPlusApi.Fcm" Version="2.0.0-beta.5" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="10.0.0" />
<PackageVersion Include="Serilog.Settings.Configuration" Version="10.0.1" />
<PackageVersion Include="Serilog.Sinks.Console" Version="6.1.1" />
Expand Down
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,26 @@ recycle/craft/research/decay/upkeep calculators are all shipped. Cameras are nex
- Two-way relay between in-game team chat and a per-server `#teamchat` channel
(via a managed webhook), with echo/loop suppression.

### Clans

- **Conditional channels** — `#clanchat` and `#claninfo` appear automatically when
the paired player is in a clan, and are removed again when they leave; no
command to run either way.
- **`#clanchat`** — two-way relay between in-game clan chat and the channel, sharing
the same echo/loop suppression as the team bridge.
- **`#claninfo`** — three pinned auto-refreshing embeds — **Overview** (score,
member count, creation date, leader, creator, MOTD), **Roster** (members grouped
by clan role, online first, with each role's permissions), and **Invites** —
refreshed on the existing `Workspace:InfoRefreshInterval`, plus a live feed of
clan changes (members joining/leaving, promotions/demotions, invites, rename,
MOTD, logo, colour, score, dissolution).
- **Set MOTD** — a button on the overview embed opens a modal that writes the MOTD
back to the game; it is offered only when the paired player's in-game clan role
carries the permission.
- **API limits** — RustPlusApi 2.0.0-beta.4 exposes no clan audit log, no per-member
scores, and no kick/invite/promote actions, so none of those are implemented; the
feed is instead derived by diffing successive clan snapshots.

### In-game `!commands`

Run in team chat by any teammate; replies in the guild's language with a
Expand Down Expand Up @@ -128,7 +148,8 @@ See [docs/development/running-locally.md](docs/development/running-locally.md).
| `RustPlusBot.Features.Workspace` | Channel/message provisioning, reconciler, `#info`/`#setup`/`#settings` surfaces |
| `RustPlusBot.Features.Pairing` | FCM pairing listener, credential intake, account disconnect |
| `RustPlusBot.Features.Connections` | Live socket supervisor, hot-swap/failover, Rust+ query seam |
| `RustPlusBot.Features.Chat` | Two-way `#teamchat` ↔ in-game chat bridge |
| `RustPlusBot.Features.Chat` | Two-way `#teamchat` / `#clanchat` ↔ in-game chat bridges |
| `RustPlusBot.Features.Clans` | Clan state, `#claninfo` embeds and change feed, Set MOTD |
| `RustPlusBot.Features.Commands` | In-game `!commands`, slash surfaces, `/help`/`/leader` |
| `RustPlusBot.Features.Events` | Live map-event classification + `#events` feed |
| `RustPlusBot.Features.Map` | Map image rendering with toggleable layers |
Expand Down
2 changes: 2 additions & 0 deletions RustPlusBot.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
<Project Path="src/RustPlusBot.Features.Pairing/RustPlusBot.Features.Pairing.csproj" />
<Project Path="src/RustPlusBot.Features.Alarms/RustPlusBot.Features.Alarms.csproj" />
<Project Path="src/RustPlusBot.Features.Chat/RustPlusBot.Features.Chat.csproj" />
<Project Path="src/RustPlusBot.Features.Clans/RustPlusBot.Features.Clans.csproj" />
<Project Path="src/RustPlusBot.Features.Events/RustPlusBot.Features.Events.csproj" />
<Project Path="src/RustPlusBot.Features.Players/RustPlusBot.Features.Players.csproj" />
<Project Path="src/RustPlusBot.Features.ItemData/RustPlusBot.Features.ItemData.csproj" />
Expand Down Expand Up @@ -39,6 +40,7 @@
<Project Path="tests/RustPlusBot.Discord.Tests/RustPlusBot.Discord.Tests.csproj" />
<Project Path="tests/RustPlusBot.Features.Alarms.Tests/RustPlusBot.Features.Alarms.Tests.csproj" />
<Project Path="tests/RustPlusBot.Features.Chat.Tests/RustPlusBot.Features.Chat.Tests.csproj" />
<Project Path="tests/RustPlusBot.Features.Clans.Tests/RustPlusBot.Features.Clans.Tests.csproj" />
<Project Path="tests/RustPlusBot.Features.Events.Tests/RustPlusBot.Features.Events.Tests.csproj" />
<Project Path="tests/RustPlusBot.Localization.Tests/RustPlusBot.Localization.Tests.csproj" />
<Project Path="tests/RustPlusBot.Persistence.Tests/RustPlusBot.Persistence.Tests.csproj" />
Expand Down
Loading
Loading