From 0867e7b4c17c9520170b05726a2e1c1cb6236b88 Mon Sep 17 00:00:00 2001 From: Jage9 Date: Fri, 27 Feb 2026 19:25:36 -0500 Subject: [PATCH] Fix reboot notice scope and preserve raw slash command input --- client/public/version.js | 2 +- client/src/main.ts | 10 ++++++---- server/app/server.py | 3 ++- server/tests/test_server_message_handling.py | 8 ++++---- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/client/public/version.js b/client/public/version.js index 0c47ae3..2f06f7d 100644 --- a/client/public/version.js +++ b/client/public/version.js @@ -1,5 +1,5 @@ // Maintainer-controlled web client version. // Format: YYYY.MM.DD Rn (example: 2026.02.20 R2) -window.CHGRID_WEB_VERSION = "2026.02.27 R297"; +window.CHGRID_WEB_VERSION = "2026.02.27 R298"; // Optional display timezone for timestamps. Falls back to America/Detroit if unset/invalid. window.CHGRID_TIME_ZONE = "America/Detroit"; diff --git a/client/src/main.ts b/client/src/main.ts index f929c4f..be78d71 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -2368,13 +2368,15 @@ function handleHelpViewModeInput(code: string): void { function handleChatModeInput(code: string, key: string, ctrlKey: boolean): void { const editAction = getEditSessionAction(code); if (editAction === 'submit') { - const message = state.nicknameInput.trim(); - if (message.length > 0) { - signaling.send({ type: 'chat_message', message }); + const rawMessage = state.nicknameInput; + if (rawMessage.trim().length > 0) { + signaling.send({ type: 'chat_message', message: rawMessage }); state.mode = 'normal'; state.nicknameInput = ''; state.cursorPos = 0; - audio.sfxUiConfirm(); + if (!/^\/me(?:\s|$)/i.test(rawMessage)) { + audio.sfxUiConfirm(); + } } else { state.mode = 'normal'; audio.sfxUiCancel(); diff --git a/server/app/server.py b/server/app/server.py index 71d6c12..1fef8aa 100644 --- a/server/app/server.py +++ b/server/app/server.py @@ -1686,7 +1686,8 @@ class SignalingServer: return True reboot_message = remainder if separator else "" if not self._schedule_reboot(client.username or client.nickname, reboot_message): - await self._broadcast( + await self._send( + client.websocket, BroadcastChatMessagePacket( type="chat_message", message="Server reboot already in progress.", diff --git a/server/tests/test_server_message_handling.py b/server/tests/test_server_message_handling.py index f7835f7..fd5ea03 100644 --- a/server/tests/test_server_message_handling.py +++ b/server/tests/test_server_message_handling.py @@ -586,7 +586,7 @@ async def test_chat_reboot_schedules_and_broadcasts_message(monkeypatch: pytest. @pytest.mark.asyncio -async def test_chat_reboot_already_in_progress_broadcasts_notice(monkeypatch: pytest.MonkeyPatch) -> None: +async def test_chat_reboot_already_in_progress_sends_sender_only_notice(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() client = ClientConnection( @@ -615,9 +615,9 @@ async def test_chat_reboot_already_in_progress_broadcasts_notice(monkeypatch: py await server._handle_message(client, json.dumps({"type": "chat_message", "message": "/reboot maintenance"})) - assert send_payloads == [] - assert len(broadcast_payloads) == 1 - packet = broadcast_payloads[0] + assert broadcast_payloads == [] + assert len(send_payloads) == 1 + packet = send_payloads[0] assert getattr(packet, "type", "") == "chat_message" assert packet.system is True assert packet.message == "Server reboot already in progress."