From ba1e5036f5ccbb2eeb15fe1acbd33166ea2edaf1 Mon Sep 17 00:00:00 2001 From: Vilius Vystartas Date: Wed, 6 May 2026 19:45:52 +0100 Subject: [PATCH] fix: log errors in silent exception handlers (matrix + weixin channels) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Matrix channel had 4 bare except blocks that silently swallowed transport errors with no logging — stream send/edit failures, media upload failures, server config fetch failures, and room content send failures. The Weixin channel had 1 silent state-load failure. This mirrors commit 98c2f7cc ('fix(weixin): raise exceptions instead of silently dropping messages') for the Matrix channel and adds a warning for the remaining silent catch in Weixin's _load_state. All failures now log at warning level with exc_info=True so operators can diagnose intermittent Matrix/Weixin transport issues. --- nanobot/channels/matrix.py | 5 ++++- nanobot/channels/weixin.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/nanobot/channels/matrix.py b/nanobot/channels/matrix.py index 6919be874..899c72f0f 100644 --- a/nanobot/channels/matrix.py +++ b/nanobot/channels/matrix.py @@ -412,6 +412,7 @@ class MatrixChannel(BaseChannel): try: response = await self.client.content_repository_config() except Exception: + self.logger.warning("Failed to fetch server upload limit", exc_info=True) return None upload_size = getattr(response, "upload_size", None) if isinstance(upload_size, int) and upload_size > 0: @@ -457,6 +458,7 @@ class MatrixChannel(BaseChannel): filesize=size_bytes, ) except Exception: + self.logger.warning("Media upload failed", exc_info=True) return fail upload_response = upload_result[0] if isinstance(upload_result, tuple) else upload_result @@ -476,6 +478,7 @@ class MatrixChannel(BaseChannel): try: await self._send_room_content(room_id, content) except Exception: + self.logger.warning("Failed to send room content to room_id=%s", room_id, exc_info=True) return fail return None @@ -553,8 +556,8 @@ class MatrixChannel(BaseChannel): # we are editing the same message all the time, so only the first time the event id needs to be set buf.event_id = response.event_id except Exception: + self.logger.warning("Stream send/edit failed for chat_id=%s", chat_id, exc_info=True) await self._stop_typing_keepalive(chat_id, clear_typing=True) - pass def _register_event_callbacks(self) -> None: diff --git a/nanobot/channels/weixin.py b/nanobot/channels/weixin.py index dff830613..2fa0aa4c4 100644 --- a/nanobot/channels/weixin.py +++ b/nanobot/channels/weixin.py @@ -208,6 +208,7 @@ class WeixinChannel(BaseChannel): self.config.base_url = base_url return bool(self._token) except Exception: + self.logger.warning("Failed to load Weixin account state", exc_info=True) return False def _save_state(self) -> None: