From 50a6dc7efc9012b668183d23a2a6b06ada7acd9e Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Thu, 23 Jul 2026 10:40:11 -0700 Subject: [PATCH] fix(gateway): duck-type set_reaction_handler on adapter wiring sites MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test doubles and third-party adapter objects don't all implement the new set_reaction_handler; calling it unconditionally hung the multiplex secondary-reconnect test (the AttributeError was swallowed into an awaited-forever path). getattr-guard all three wiring sites — same duck-typing convention the sibling setters rely on for MagicMock, but explicit, so bare objects work too. --- gateway/run.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gateway/run.py b/gateway/run.py index 4aee7e8cc9f8..9e4dc7c377ba 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -7908,7 +7908,9 @@ class GatewayRunner(GatewayAuthorizationMixin, GatewayKanbanWatchersMixin, Gatew adapter.set_fatal_error_handler(self._handle_adapter_fatal_error) adapter.set_session_store(self.session_store) adapter.set_busy_session_handler(self._handle_active_session_busy_message) - adapter.set_reaction_handler(self._handle_reaction_event) + _set_reaction = getattr(adapter, "set_reaction_handler", None) + if callable(_set_reaction): + _set_reaction(self._handle_reaction_event) adapter.set_topic_recovery_fn(self._recover_telegram_topic_thread_id) adapter.set_authorization_check(self._make_adapter_auth_check(adapter.platform)) adapter._busy_text_mode = self._busy_text_mode @@ -8888,7 +8890,9 @@ class GatewayRunner(GatewayAuthorizationMixin, GatewayKanbanWatchersMixin, Gatew adapter.set_fatal_error_handler(self._handle_adapter_fatal_error) adapter.set_session_store(self.session_store) adapter.set_busy_session_handler(self._handle_active_session_busy_message) - adapter.set_reaction_handler(self._handle_reaction_event) + _set_reaction = getattr(adapter, "set_reaction_handler", None) + if callable(_set_reaction): + _set_reaction(self._handle_reaction_event) adapter.set_topic_recovery_fn(self._recover_telegram_topic_thread_id) adapter.set_authorization_check(self._make_adapter_auth_check(adapter.platform)) adapter._busy_text_mode = self._busy_text_mode @@ -9763,7 +9767,9 @@ class GatewayRunner(GatewayAuthorizationMixin, GatewayKanbanWatchersMixin, Gatew ) adapter.set_session_store(self.session_store) adapter.set_busy_session_handler(self._handle_active_session_busy_message) - adapter.set_reaction_handler(self._handle_reaction_event) + _set_reaction = getattr(adapter, "set_reaction_handler", None) + if callable(_set_reaction): + _set_reaction(self._handle_reaction_event) adapter.set_topic_recovery_fn(self._recover_telegram_topic_thread_id) adapter.set_authorization_check( self._make_adapter_auth_check(platform, profile_name=profile_name)