Serilog__MinimumLevel__Default |
Information |
Log level (Debug, Warning, etc.) |
@@ -271,7 +208,7 @@ docker compose up -d
diff --git a/articles/encryption.html b/articles/encryption.html
index eda13fb..14307d9 100644
--- a/articles/encryption.html
+++ b/articles/encryption.html
@@ -235,7 +235,7 @@
diff --git a/articles/getting-started.html b/articles/getting-started.html
index 40e8254..42a5bad 100644
--- a/articles/getting-started.html
+++ b/articles/getting-started.html
@@ -136,8 +136,8 @@ Connect to a server, register an account, and start chatting.
For TLS, set TlsEnabled: true, TlsPort: 6697, and provide a PKCS#12 certificate path.
See the Architecture page for details on how the IRC gateway integrates with the chat service.
Configuration
-Server configuration is in appsettings.json (auto-generated on first run). See the example config for all available options.
-To list your server on the public directory, set Server:PublicServer to true and Server:PublicHost to your server's public address.
+Server configuration is in appsettings.json (auto-generated on first run). You can also use environment variables or command-line arguments to override settings.
+See the Configuration guide for the full reference and how it all works.
Build from Source
dotnet build src/EchoHub.slnx
@@ -162,7 +162,7 @@ Connect to a server, register an account, and start chatting.
diff --git a/articles/notification-sounds.html b/articles/notification-sounds.html
index 570f8b1..46f9b29 100644
--- a/articles/notification-sounds.html
+++ b/articles/notification-sounds.html
@@ -134,7 +134,7 @@
diff --git a/articles/toc.html b/articles/toc.html
index e5a41ec..dc29b5a 100644
--- a/articles/toc.html
+++ b/articles/toc.html
@@ -26,6 +26,9 @@
Architecture
+
+ Configuration
+
Encryption
diff --git a/articles/toc.json b/articles/toc.json
index 117afda..81e02ea 100644
--- a/articles/toc.json
+++ b/articles/toc.json
@@ -1,2 +1,2 @@
-{"items":[{"name":"Guides","items":[{"name":"Getting Started","href":"getting-started.html","topicHref":"getting-started.html"},{"name":"Docker","href":"docker.html","topicHref":"docker.html"},{"name":"Architecture","href":"architecture.html","topicHref":"architecture.html"},{"name":"Encryption","href":"encryption.html","topicHref":"encryption.html"},{"name":"Notification Sounds","href":"notification-sounds.html","topicHref":"notification-sounds.html"}]},{"name":"Flows","includedFrom":"~/flows/toc.yml","items":[{"name":"Authentication","href":"../flows/authentication.html","topicHref":"../flows/authentication.html"},{"name":"Connection","href":"../flows/connection.html","topicHref":"../flows/connection.html"},{"name":"Messaging","href":"../flows/messaging.html","topicHref":"../flows/messaging.html"},{"name":"Channels","href":"../flows/channels.html","topicHref":"../flows/channels.html"},{"name":"Moderation","href":"../flows/moderation.html","topicHref":"../flows/moderation.html"},{"name":"Media & Services","href":"../flows/media.html","topicHref":"../flows/media.html"}]}]}
+{"items":[{"name":"Guides","items":[{"name":"Getting Started","href":"getting-started.html","topicHref":"getting-started.html"},{"name":"Docker","href":"docker.html","topicHref":"docker.html"},{"name":"Architecture","href":"architecture.html","topicHref":"architecture.html"},{"name":"Configuration","href":"configuration.html","topicHref":"configuration.html"},{"name":"Encryption","href":"encryption.html","topicHref":"encryption.html"},{"name":"Notification Sounds","href":"notification-sounds.html","topicHref":"notification-sounds.html"}]},{"name":"Flows","includedFrom":"~/flows/toc.yml","items":[{"name":"Authentication","href":"../flows/authentication.html","topicHref":"../flows/authentication.html"},{"name":"Connection","href":"../flows/connection.html","topicHref":"../flows/connection.html"},{"name":"Messaging","href":"../flows/messaging.html","topicHref":"../flows/messaging.html"},{"name":"Channels","href":"../flows/channels.html","topicHref":"../flows/channels.html"},{"name":"Moderation","href":"../flows/moderation.html","topicHref":"../flows/moderation.html"},{"name":"Media & Services","href":"../flows/media.html","topicHref":"../flows/media.html"}]}]}
diff --git a/changelog/index.html b/changelog/index.html
index fd7a532..1c2fc8b 100644
--- a/changelog/index.html
+++ b/changelog/index.html
@@ -123,7 +123,7 @@
diff --git a/changelog/v0.1.0.html b/changelog/v0.1.0.html
index 524cfc7..0b4a6e2 100644
--- a/changelog/v0.1.0.html
+++ b/changelog/v0.1.0.html
@@ -120,7 +120,7 @@
diff --git a/changelog/v0.1.1.html b/changelog/v0.1.1.html
index 836abef..ccb6a2d 100644
--- a/changelog/v0.1.1.html
+++ b/changelog/v0.1.1.html
@@ -114,7 +114,7 @@
diff --git a/changelog/v0.2.0.html b/changelog/v0.2.0.html
index d9fb553..c1f1cb7 100644
--- a/changelog/v0.2.0.html
+++ b/changelog/v0.2.0.html
@@ -128,7 +128,7 @@
diff --git a/changelog/v0.2.1.html b/changelog/v0.2.1.html
index 4004900..f01fa75 100644
--- a/changelog/v0.2.1.html
+++ b/changelog/v0.2.1.html
@@ -120,7 +120,7 @@
diff --git a/changelog/v0.2.2.html b/changelog/v0.2.2.html
index df57c4b..f8ebd6d 100644
--- a/changelog/v0.2.2.html
+++ b/changelog/v0.2.2.html
@@ -121,7 +121,7 @@
diff --git a/changelog/v0.2.3.html b/changelog/v0.2.3.html
index 30f0ed7..28829a1 100644
--- a/changelog/v0.2.3.html
+++ b/changelog/v0.2.3.html
@@ -201,7 +201,7 @@
diff --git a/changelog/v0.2.4.html b/changelog/v0.2.4.html
index a38d2ae..73a439b 100644
--- a/changelog/v0.2.4.html
+++ b/changelog/v0.2.4.html
@@ -141,7 +141,7 @@
diff --git a/changelog/v0.2.5.html b/changelog/v0.2.5.html
index 8a65dab..700d02c 100644
--- a/changelog/v0.2.5.html
+++ b/changelog/v0.2.5.html
@@ -226,7 +226,7 @@
diff --git a/changelog/v0.2.6.html b/changelog/v0.2.6.html
index f1028a4..d64472d 100644
--- a/changelog/v0.2.6.html
+++ b/changelog/v0.2.6.html
@@ -129,7 +129,7 @@
diff --git a/changelog/v0.2.7.html b/changelog/v0.2.7.html
index dfd5c51..3dd5cef 100644
--- a/changelog/v0.2.7.html
+++ b/changelog/v0.2.7.html
@@ -119,7 +119,7 @@
diff --git a/changelog/v0.2.8.html b/changelog/v0.2.8.html
index 6210ff1..bbbf978 100644
--- a/changelog/v0.2.8.html
+++ b/changelog/v0.2.8.html
@@ -164,7 +164,7 @@
diff --git a/flows/authentication.html b/flows/authentication.html
index a7b17ea..5948c72 100644
--- a/flows/authentication.html
+++ b/flows/authentication.html
@@ -120,58 +120,6 @@ refresh token for "Remember Me" sessions.
CM->>CM: Wire OnTokensRefreshed for config persistence
CM->>CM: Continue to connection setup (see Connection Flow)
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| Dialog UI |
-src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs |
-Lines 251-268 (register handler) |
-
-
-| Orchestrator entry |
-src/EchoHub.Client/AppOrchestrator.cs |
-Lines 550-592 (HandleConnect) |
-
-
-| ConnectionManager auth |
-src/EchoHub.Client/Services/ConnectionManager.cs |
-Lines 74-76 (register branch) |
-
-
-| ApiClient register |
-src/EchoHub.Client/Services/ApiClient.cs |
-Lines 32-43 (RegisterAsync) |
-
-
-| AuthController register |
-src/EchoHub.Server/Controllers/AuthController.cs |
-Lines 28-49 |
-
-
-| UserService register |
-src/EchoHub.Server/Services/UserService.cs |
-Lines 20-59 (RegisterUserAsync) |
-
-
-| JWT generation |
-src/EchoHub.Server/Auth/JwtTokenService.cs |
-Lines 30-53 (access), 80-86 (refresh) |
-
-
-| Token persistence |
-src/EchoHub.Client/AppOrchestrator.cs |
-Lines 1039-1053 (SaveServerToConfig) |
-
-
-
User Login
Returning user authenticates with username/password or a saved refresh token.
@@ -202,53 +150,6 @@ refresh token for "Remember Me" sessions.
end
API->>API: SetTokens()
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| Login button handler |
-src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs |
-Lines 214-249 |
-
-
-| Saved token branch |
-src/EchoHub.Client/Services/ConnectionManager.cs |
-Lines 69-71 |
-
-
-| Password branch |
-src/EchoHub.Client/Services/ConnectionManager.cs |
-Lines 78-80 |
-
-
-| ApiClient login |
-src/EchoHub.Client/Services/ApiClient.cs |
-Lines 45-56 (LoginAsync) |
-
-
-| AuthController login |
-src/EchoHub.Server/Controllers/AuthController.cs |
-Lines 51-72 |
-
-
-| AuthController refresh |
-src/EchoHub.Server/Controllers/AuthController.cs |
-Lines 74-108 |
-
-
-| UserService authenticate |
-src/EchoHub.Server/Services/UserService.cs |
-Lines 61-83 |
-
-
-
Token Refresh
Access tokens expire after 15 minutes. The client auto-refreshes transparently
@@ -276,53 +177,6 @@ before requests and on 401 responses. Refresh tokens are rotated on each use.
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| Proactive check |
-src/EchoHub.Client/Services/ApiClient.cs |
-Lines 110-129 (GetValidTokenAsync) |
-
-
-| Reactive 401 retry (GET) |
-src/EchoHub.Client/Services/ApiClient.cs |
-Lines 338-358 (AuthenticatedGetAsync) |
-
-
-| Reactive 401 retry (POST/PUT/DELETE) |
-src/EchoHub.Client/Services/ApiClient.cs |
-Lines 364-384 (AuthenticatedRequestAsync) |
-
-
-| Refresh HTTP call |
-src/EchoHub.Client/Services/ApiClient.cs |
-Lines 58-71 (RefreshTokenAsync) |
-
-
-| SignalR token provider |
-src/EchoHub.Client/Services/EchoHubConnection.cs |
-Line 37 (AccessTokenProvider) |
-
-
-| Server-side rotation |
-src/EchoHub.Server/Controllers/AuthController.cs |
-Lines 74-108 |
-
-
-| Token persistence callback |
-src/EchoHub.Client/Services/ConnectionManager.cs |
-Lines 253-264 |
-
-
-
@@ -344,7 +198,7 @@ before requests and on 401 responses. Refresh tokens are rotated on each use.
diff --git a/flows/channels.html b/flows/channels.html
index 5aad9f8..070436f 100644
--- a/flows/channels.html
+++ b/flows/channels.html
@@ -116,33 +116,6 @@ connected clients.
CC-->>Client: 201 Created (ChannelDto)
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| Controller endpoint |
-src/EchoHub.Server/Controllers/ChannelsController.cs |
-Lines 60-76 |
-
-
-| Channel service create |
-src/EchoHub.Server/Services/ChannelService.cs |
-Lines 50-90 |
-
-
-| Broadcast updated |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 308-309 |
-
-
-
Channel Deletion
Only the channel creator (or admin) can delete a channel. The default channel
@@ -162,28 +135,6 @@ is protected.
ChS-->>CC: Success
CC-->>Client: 204 No Content
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| Controller endpoint |
-src/EchoHub.Server/Controllers/ChannelsController.cs |
-Lines 94-106 |
-
-
-| Channel service delete |
-src/EchoHub.Server/Services/ChannelService.cs |
-Lines 119-144 |
-
-
-
Joining a Channel
Both SignalR and IRC clients join channels through ChatService. The presence
@@ -221,48 +172,6 @@ broadcasts accordingly.
CS-->>Entry: (history, error)
Entry-->>Client: History messages
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| SignalR hub join |
-src/EchoHub.Server/Hubs/ChatHub.cs |
-Lines 59-81 |
-
-
-| IRC join |
-src/EchoHub.Server.Irc/IrcCommandHandler.cs |
-Lines 361-414 |
-
-
-| ChatService join |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 96-135 |
-
-
-| Presence join |
-src/EchoHub.Server/Services/PresenceTracker.cs |
-Lines 58-70 |
-
-
-| SignalR broadcast |
-src/EchoHub.Server/Services/SignalRBroadcaster.cs |
-Lines 26-32 |
-
-
-| IRC broadcast |
-src/EchoHub.Server.Irc/IrcBroadcaster.cs |
-Lines 34-41 |
-
-
-
Leaving a Channel
sequenceDiagram
@@ -283,38 +192,6 @@ broadcasts accordingly.
CS->>IRCB: SendUserLeftAsync(channel, username)
end
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| SignalR hub leave |
-src/EchoHub.Server/Hubs/ChatHub.cs |
-Lines 83-96 |
-
-
-| IRC part |
-src/EchoHub.Server.Irc/IrcCommandHandler.cs |
-Lines 416-435 |
-
-
-| ChatService leave |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 137-143 |
-
-
-| Presence leave |
-src/EchoHub.Server/Services/PresenceTracker.cs |
-Lines 72-81 |
-
-
-
@@ -336,7 +213,7 @@ broadcasts accordingly.
diff --git a/flows/connection.html b/flows/connection.html
index 50c2902..1bd7a27 100644
--- a/flows/connection.html
+++ b/flows/connection.html
@@ -117,58 +117,6 @@ event handlers, joins the default channel, and loads history.
Hub-->>EHC: List<MessageDto> (encrypted)
EHC-->>CM: Decrypted history
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| Connection orchestration |
-src/EchoHub.Client/Services/ConnectionManager.cs |
-Lines 58-140 (ConnectAsync) |
-
-
-| EchoHubConnection setup |
-src/EchoHub.Client/Services/EchoHubConnection.cs |
-Lines 29-62 (constructor) |
-
-
-| Handler registration |
-src/EchoHub.Client/Services/EchoHubConnection.cs |
-Lines 64-122 (RegisterHandlers) |
-
-
-| Hub OnConnected |
-src/EchoHub.Server/Hubs/ChatHub.cs |
-Lines 31-43 |
-
-
-| ChatService connected |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 41-57 |
-
-
-| PresenceTracker connect |
-src/EchoHub.Server/Services/PresenceTracker.cs |
-Lines 13-29 |
-
-
-| Join channel (hub) |
-src/EchoHub.Server/Hubs/ChatHub.cs |
-Lines 59-81 |
-
-
-| Join channel (service) |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 96-135 |
-
-
-
IRC Client Connection
IRC clients connect via TCP, authenticate with PASS/NICK/USER or SASL PLAIN,
@@ -213,53 +161,6 @@ and auto-join channels. New usernames are auto-registered.
Note over IRC,CH: Client is now ready for JOIN/PART/PRIVMSG
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| TCP listener |
-src/EchoHub.Server.Irc/IrcGatewayService.cs |
-Lines 45-90 (ExecuteAsync) |
-
-
-| Client handler |
-src/EchoHub.Server.Irc/IrcGatewayService.cs |
-Lines 92-154 (HandleClientAsync) |
-
-
-| Command read loop |
-src/EchoHub.Server.Irc/IrcCommandHandler.cs |
-Lines 40-98 (RunAsync) |
-
-
-| SASL auth |
-src/EchoHub.Server.Irc/IrcCommandHandler.cs |
-Lines 136-207 (HandleAuthenticateAsync) |
-
-
-| PASS/NICK/USER |
-src/EchoHub.Server.Irc/IrcCommandHandler.cs |
-Lines 209-267 |
-
-
-| Registration completion |
-src/EchoHub.Server.Irc/IrcCommandHandler.cs |
-Lines 268-315 (TryCompleteRegistrationAsync) |
-
-
-| Cleanup on disconnect |
-src/EchoHub.Server.Irc/IrcGatewayService.cs |
-Lines 136-153 |
-
-
-
User Disconnect & Presence
When a client disconnects, the presence tracker determines if the user has any
@@ -287,38 +188,6 @@ notified.
end
end
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| SignalR disconnect |
-src/EchoHub.Server/Hubs/ChatHub.cs |
-Lines 45-57 |
-
-
-| IRC cleanup |
-src/EchoHub.Server.Irc/IrcGatewayService.cs |
-Lines 136-153 |
-
-
-| ChatService disconnect |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 59-94 |
-
-
-| Presence disconnect |
-src/EchoHub.Server/Services/PresenceTracker.cs |
-Lines 31-53 |
-
-
-
@@ -340,7 +209,7 @@ notified.
diff --git a/flows/flows.html b/flows/flows.html
index f60ef24..b356a79 100644
--- a/flows/flows.html
+++ b/flows/flows.html
@@ -95,7 +95,7 @@
diff --git a/flows/media.html b/flows/media.html
index 1601ee5..9f11b9d 100644
--- a/flows/media.html
+++ b/flows/media.html
@@ -111,38 +111,6 @@ and broadcast as a message with a download link.
CS->>DB: INSERT Message
CS->>CS: BroadcastToAllAsync → fan out to clients
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| Upload endpoint |
-src/EchoHub.Server/Controllers/ChannelsController.cs |
-Lines 108-200 |
-
-
-| File validation |
-src/EchoHub.Server/Services/FileValidationHelper.cs |
-Lines 15-82 |
-
-
-| File storage |
-src/EchoHub.Server/Services/FileStorageService.cs |
-Lines 1-47 |
-
-
-| File download |
-src/EchoHub.Server/Controllers/FilesController.cs |
-Lines 22-53 |
-
-
-
Link Embed Resolution
When a message contains URLs, the server fetches OpenGraph metadata for preview
@@ -168,48 +136,6 @@ embeds.
LE-->>CS: List<EmbedDto> (or null)
Note over CS: Attached to MessageDto before broadcast
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| Entry point |
-src/EchoHub.Server/Services/LinkEmbedService.cs |
-Lines 28-51 (TryGetEmbedsAsync) |
-
-
-| URL extraction |
-src/EchoHub.Server/Services/LinkEmbedService.cs |
-Lines 145-160 |
-
-
-| Private IP blocking |
-src/EchoHub.Server/Services/LinkEmbedService.cs |
-Lines 162-181 |
-
-
-| OG tag parsing |
-src/EchoHub.Server/Services/LinkEmbedService.cs |
-Lines 187-210 |
-
-
-| Theme color parsing |
-src/EchoHub.Server/Services/LinkEmbedService.cs |
-Lines 117-143 |
-
-
-| ChatService integration |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 194-201 |
-
-
-
Server Directory Registration
Public servers register with the EchoHubSpace directory for discoverability.
@@ -235,38 +161,6 @@ embeds.
Note over SDS,Dir: Exponential backoff on disconnect (2s → 30s max)
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| Service lifecycle |
-src/EchoHub.Server/Services/ServerDirectoryService.cs |
-Lines 29-122 |
-
-
-| Registration |
-src/EchoHub.Server/Services/ServerDirectoryService.cs |
-Lines 195-212 |
-
-
-| User count polling |
-src/EchoHub.Server/Services/ServerDirectoryService.cs |
-Lines 154-187 |
-
-
-| Reconnection backoff |
-src/EchoHub.Server/Services/ServerDirectoryService.cs |
-Lines 77-82, 191 |
-
-
-
@@ -288,7 +182,7 @@ embeds.
diff --git a/flows/messaging.html b/flows/messaging.html
index 6a8b2d5..f221cf0 100644
--- a/flows/messaging.html
+++ b/flows/messaging.html
@@ -128,73 +128,6 @@ clients.
IRCB->>Clients: Send to each IRC conn (skip sender)
end
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| Input handler |
-src/EchoHub.Client/UI/MainWindow.cs |
-Lines 428-449 (OnInputKeyDown) |
-
-
-| Orchestrator dispatch |
-src/EchoHub.Client/AppOrchestrator.cs |
-Lines 631-661 (HandleMessageSubmitted) |
-
-
-| Client encrypt + send |
-src/EchoHub.Client/Services/EchoHubConnection.cs |
-Lines 148-153 (SendMessageAsync) |
-
-
-| Hub receive |
-src/EchoHub.Server/Hubs/ChatHub.cs |
-Lines 98-111 (SendMessage) |
-
-
-| ChatService process |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 145-241 (SendMessageAsync) |
-
-
-| Mute check |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 177-190 |
-
-
-| Link embeds |
-src/EchoHub.Server/Services/LinkEmbedService.cs |
-Lines 28-51 (TryGetEmbedsAsync) |
-
-
-| DB insert |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 208-221 |
-
-
-| Broadcast fan-out |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 311-324 (BroadcastToAllAsync) |
-
-
-| SignalR broadcast |
-src/EchoHub.Server/Services/SignalRBroadcaster.cs |
-Lines 23-24 |
-
-
-| IRC broadcast |
-src/EchoHub.Server.Irc/IrcBroadcaster.cs |
-Lines 17-32 |
-
-
-
Sending a Message (IRC)
Messages from IRC clients follow the same ChatService path but enter as
@@ -223,38 +156,6 @@ plaintext (no app-layer encryption).
IRCB->>IRCB: Skip sender (IRC echo suppression)
end
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| PRIVMSG handler |
-src/EchoHub.Server.Irc/IrcCommandHandler.cs |
-Lines 437-469 |
-
-
-| Channel name conversion |
-src/EchoHub.Server.Irc/IrcCommandHandler.cs |
-Line 680 (IrcToEchoHubChannel) |
-
-
-| ChatService (shared path) |
-src/EchoHub.Server/Services/ChatService.cs |
-Lines 145-241 |
-
-
-| IRC echo suppression |
-src/EchoHub.Server.Irc/IrcBroadcaster.cs |
-Lines 25-26 |
-
-
-
Receiving a Message (TUI Client)
When a message arrives via SignalR, the client decrypts it, adds it to the chat
@@ -276,33 +177,6 @@ view, and optionally plays a notification sound for @mentions.
AO->>AO: PlayAsync() notification sound
end
-Code references:
-
-
-
-| Step |
-File |
-Location |
-
-
-
-
-| SignalR handler |
-src/EchoHub.Client/Services/EchoHubConnection.cs |
-Lines 64-71 |
-
-
-| Orchestrator receive |
-src/EchoHub.Client/AppOrchestrator.cs |
-Lines 372-383 |
-
-
-| @mention detection |
-src/EchoHub.Client/AppOrchestrator.cs |
-Lines 378-382 |
-
-
-
Command Execution
Slash commands (/status, /nick, /kick, etc.) are parsed client-side and
@@ -452,38 +326,6 @@ dispatched to appropriate handlers, which call REST APIs or SignalR methods.