From 4eeacc551080c44c68b131d8035dec45abe49059 Mon Sep 17 00:00:00 2001 From: Nick Ninov Date: Fri, 11 Sep 2026 12:15:27 +0300 Subject: [PATCH 1/2] real-time: Process events with messages only --- pyproject.toml | 2 +- status_sdk/account.py | 42 +++++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c0d6e07..11e0516 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "status-sdk" -version = "1.1.5" +version = "1.1.6" description = "Private chat. Communities. Multi-chain wallet. Browser. dApps all in one app, powered by SNT." readme = "README.md" requires-python = ">=3.11" diff --git a/status_sdk/account.py b/status_sdk/account.py index 848da50..c2783d6 100644 --- a/status_sdk/account.py +++ b/status_sdk/account.py @@ -933,31 +933,31 @@ def listen_messages(self) -> Generator[models.Message, None, None]: SIZE = 100 for message in self.signal.listen("messages.new"): event: dict = message.get("event", {}) - if "chats" in event or "messages" in event: - for raw in event["messages"]: - if raw["contentType"] not in ALLOWED_CONTENT_TYPES or raw["id"] in processed: - continue + raw_messages: list[dict] = event.get("messages", []) + for raw in raw_messages: + if raw["contentType"] not in ALLOWED_CONTENT_TYPES or raw["id"] in processed: + continue - if not raw.get("albumId"): - yield models.Message.from_raw(raw) - processed.append(raw["id"]) - continue + if not raw.get("albumId"): + yield models.Message.from_raw(raw) + processed.append(raw["id"]) + continue - album_id: str = raw["albumId"] - if album_id not in albums: - albums[album_id] = [] + album_id: str = raw["albumId"] + if album_id not in albums: + albums[album_id] = [] - albums[album_id].append(raw) - if len(albums[album_id]) != raw["albumImagesCount"]: - continue + albums[album_id].append(raw) + if len(albums[album_id]) != raw["albumImagesCount"]: + continue - raw["image"] = [ - point["image"] - for point in albums[album_id] - ] - yield models.Message.from_raw(raw) - processed.append(raw["id"]) - albums.pop(album_id) + raw["image"] = [ + point["image"] + for point in albums[album_id] + ] + yield models.Message.from_raw(raw) + processed.append(raw["id"]) + albums.pop(album_id) if len(processed) == SIZE: processed = [] From 000699d74e2a70e7d1858a31bbaa788f8245897e Mon Sep 17 00:00:00 2001 From: Nick Ninov Date: Fri, 11 Sep 2026 14:29:33 +0300 Subject: [PATCH 2/2] real-time: Handle list events --- status_sdk/signal.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/status_sdk/signal.py b/status_sdk/signal.py index 7fefd16..67a2ee6 100644 --- a/status_sdk/signal.py +++ b/status_sdk/signal.py @@ -109,15 +109,19 @@ def __listen_message(self, ws: websocket.WebSocketApp, signal: str): if isinstance(self.__signal_type, list) and signal["type"] not in self.__signal_type: return - event: Optional[dict] = signal.get("event", {}) or {} - data = { - "timestamp": datetime.datetime.fromtimestamp(signal["timestamp"]), - "is_error": not isinstance(event.get("error"), type(None)), - "type": signal["type"], - "error_message": event.get("error"), - "event": event - } - self.__queue.put(data) + event: Optional[Union[dict, list[dict]]] = signal.get("event", {}) or {} + if isinstance(event, dict): + event = [event] + + for current in event: + data = { + "timestamp": datetime.datetime.fromtimestamp(signal["timestamp"]), + "is_error": not isinstance(current.get("error"), type(None)), + "type": signal["type"], + "error_message": current.get("error"), + "event": current + } + self.__queue.put(data) def __close_thread(self): """