diff --git a/src/matebot/commands.py b/src/matebot/commands.py index 6907200..3b3b2c8 100644 --- a/src/matebot/commands.py +++ b/src/matebot/commands.py @@ -70,12 +70,12 @@ async def _cmd_help(self) -> None: await self.messenger.send(HELP) async def _cmd_wake(self) -> None: - await self.client.request("req:change-mode", mode=1) + await self.client.send_event("req:change-mode", mode=1) self._awaiting_ready = True await self.messenger.send("🔥 Waking the machine — I'll tell you when it's hot.") async def _cmd_sleep(self) -> None: - await self.client.request("req:change-mode", mode=0) + await self.client.send_event("req:change-mode", mode=0) self._awaiting_ready = False await self.messenger.send("😴 Machine is going to standby.") diff --git a/src/matebot/machine.py b/src/matebot/machine.py index 837a46a..de5af8e 100644 --- a/src/matebot/machine.py +++ b/src/matebot/machine.py @@ -125,6 +125,13 @@ async def request(self, tp: str, *, timeout: float = 20.0, **fields: Any) -> dic finally: self._pending.pop(rid, None) + async def send_event(self, tp: str, **fields: Any) -> None: + """Fire-and-forget message for requests the firmware never answers + (e.g. ``req:change-mode`` — it acts but sends no response).""" + if self._ws is None or self._ws.closed: + raise MachineError("the machine looks powered off") + await self._ws.send_str(json.dumps({"tp": tp, **fields})) + async def notes_save(self, shot_id: int, notes: dict[str, Any]) -> dict: """Write shot notes; lands in the web UI's "Shot Notes" panel.""" payload = {"id": str(shot_id)} # unpadded inside the payload diff --git a/tests/test_commands.py b/tests/test_commands.py index 50e93e9..d4d9ce2 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -26,6 +26,11 @@ async def request(self, tp, **fields): self.requests.append((tp, fields)) return {"msg": "Ok"} + async def send_event(self, tp, **fields): + if not self.connected: + raise MachineError("the machine looks powered off") + self.requests.append((tp, fields)) + class FakeConvo: def __init__(self):