[Server] Add room chat channels with per-channel fan-out and history (#7476)

* [Server] Add room chat channels with per-channel fan-out and history

* Fixup: redact all channel histories on message removal

removeSaidMessages only redacted the main history, so banned/warned
content stayed visible to late joiners on every other channel.
Drop the unused channelId parameter and redact up to amount messages
per channel across the whole channelChatHistory map.

* [Server] Validate room channel ids and fix catalog schema per review

- servatrice.sql: expand rooms_channels access_level enum to full set
  to match 0037->0038 migration
- servatrice.cpp: skip empty, reserved (__main__) and duplicate channel
  ids when loading from ini and DB with qWarning
- server_protocolhandler.cpp: clarify catalog replay comment (filtering
  happens in moderator stack)
- server_room: drop duplicate channelIndex, linear search preserves
  catalog order

* [Server] Fix server_room.cpp formatting per clang-format-18

---------

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
Co-authored-by: BruebachL <bruebachl@cockatrice.example>
This commit is contained in:
BruebachL 2026-10-16 22:46:38 +02:00 • committed by GitHub
parent be38e8d429
commit 17d2e8d86e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 281 additions and 34 deletions

View file

@ -332,6 +332,22 @@ roomlist\1\game_types\1\name="GameType1"
roomlist\1\game_types\2\name="GameType2"
roomlist\1\game_types\3\name="GameType3"
; Optional chat channels for room number 1, in addition to the implicit Main
; channel every room has. Each channel needs a stable ASCII id, a display name
; (server data, like the room name) and an access level. Supported levels, from
; least to most restrictive, are: public, registered, judge, moderator, admin
; and developer. A channel is readable and writable by every member whose own
; privilege level is at least the channel's level -- so a moderator channel is
; also reachable by admins and developers, and an admin channel by developers.
; Public channels are visible to every room member.
roomlist\1\channels\size=2
roomlist\1\channels\1\id=looking-for-players
roomlist\1\channels\1\displayname="Looking for players"
roomlist\1\channels\1\access=public
roomlist\1\channels\2\id=moderators
roomlist\1\channels\2\displayname="Moderators"
roomlist\1\channels\2\access=moderator
[game]