From d26418c896c46253c34a232bf8358692a542b07c Mon Sep 17 00:00:00 2001 From: Valerie Liu Date: Thu, 7 May 2026 16:29:23 +0100 Subject: [PATCH] fix(channel-settings): recognise ObbyIRCd in the UnrealIRCd-detection check The "Advanced" tab in ChannelSettingsModal is gated on `server.isUnrealIRCd`, which was set by exact-matching "UnrealIRCd" in the RPL_YOURHOST (002) version string. ObbyIRCd is a downstream UnrealIRCd fork that advertises its own name there ("ObbyIRCd-..."), so the gate stayed false and channel ops on ObbyIRCd networks lost the Advanced tab even though the underlying chanmode surface is the same. Match either name. Comment also clarifies that ObbyIRCd-only features (e.g. named-modes) are detected via their own caps and should NOT be conflated with the UnrealIRCd-parity flag. --- src/store/handlers/channels.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/store/handlers/channels.ts b/src/store/handlers/channels.ts index 52075aa1..24992a07 100644 --- a/src/store/handlers/channels.ts +++ b/src/store/handlers/channels.ts @@ -209,10 +209,16 @@ export function registerChannelHandlers(store: StoreApi): void { }); ircClient.on("RPL_YOURHOST", ({ serverId, serverName, version }) => { - // Check if the server is running UnrealIRCd - const isUnrealIRCd = version.includes("UnrealIRCd"); + // The `isUnrealIRCd` flag gates UI surfaces that lean on the + // UnrealIRCd module-driven chanmode set (the "Advanced" tab in + // ChannelSettingsModal, etc.). ObbyIRCd is a downstream fork that + // advertises its own name in 002 but inherits that chanmode set, + // so it satisfies the same UI gate. Any features ObbyIRCd adds on + // top (e.g. named-modes) are detected separately through their + // own caps and shouldn't be conflated with UnrealIRCd parity. + const isUnrealIRCd = + version.includes("UnrealIRCd") || version.includes("ObbyIRCd"); - // Update the server with the UnrealIRCd information store.setState((state) => ({ servers: state.servers.map((server) => server.id === serverId ? { ...server, isUnrealIRCd } : server,