From c6b0e1c683b63f66a7f8ba54010a20d5cede1a4e Mon Sep 17 00:00:00 2001 From: Hermes Date: Tue, 26 May 2026 22:03:34 -0400 Subject: [PATCH] fix: read event.source.{platform,user_id} not event.{platform,user_id} MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MessageEvent wraps source in nested SessionSource — fields at the top level don't exist, causing resolve_peer() to always fall through to the fallback_peer. This meant every Discord user got a raw snowflake peer created instead of the mapped name. --- __init__.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/__init__.py b/__init__.py index abd3037..6710a37 100644 --- a/__init__.py +++ b/__init__.py @@ -292,8 +292,12 @@ def _patch_session_db() -> None: def _pre_gateway_dispatch(event: Any, gateway: Any, session_store: Any, **kw) -> dict | None: """Resolve peer identity and store it for Honcho session init.""" - platform = getattr(event, "platform", "unknown") - user_id = getattr(event, "user_id", "unknown") + # NOTE: MessageEvent wraps source in nested SessionSource object. + # event.source.{platform, user_id} are the correct paths — NOT + # event.{platform, user_id} which don't exist on MessageEvent. + source = event.source if hasattr(event, "source") else event + platform = getattr(source, "platform", "unknown") + user_id = getattr(source, "user_id", "unknown") resolved = resolve_peer(platform, user_id) if resolved: