From bdede4dbf427d9b83512369f253014d1bee5851c Mon Sep 17 00:00:00 2001 From: Astra Logical Date: Thu, 23 Jul 2026 10:33:36 -0400 Subject: [PATCH] Some modern events haven't been properly handled by nio. Use an UnknownToDeviceEvent and key off of m.key.verification instead --- matrix_keycloak_bot.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/matrix_keycloak_bot.py b/matrix_keycloak_bot.py index 9972272..1c06975 100644 --- a/matrix_keycloak_bot.py +++ b/matrix_keycloak_bot.py @@ -12,13 +12,12 @@ from nio import ( RoomSendResponse, InviteMemberEvent, OlmUnverifiedDeviceError, - KeyVerificationRequest, KeyVerificationStart, KeyVerificationKey, KeyVerificationMac, KeyVerificationCancel, - KeyVerificationDone, ToDeviceError, + UnknownToDeviceEvent, ) # ------------------------------------------------------------------------------ @@ -143,11 +142,10 @@ def get_requestable_groups(username: str) -> tuple[bool, str]: # ------------------------------------------------------------------------------ async def on_to_device(client: AsyncClient, event): """Handles incoming interactive SAS key verification events automatically.""" - if isinstance(event, KeyVerificationRequest): - print(f"Received verification request from {event.sender} ({event.from_device}). Accepting request...") - resp = await client.accept_key_verification(event.transaction_id) - if isinstance(resp, ToDeviceError): - print(f"Failed to accept verification request: {resp}") + if isinstance(event, UnknownToDeviceEvent): + if event.type == "m.key.verification.request": + from_device = event.source.get("content", {}).get("from_device", "unknown") + print(f"Received m.key.verification.request from {event.sender} ({from_device}).") elif isinstance(event, KeyVerificationStart): print(f"Received key verification start from {event.sender} ({event.from_device}). Accepting start...") @@ -161,8 +159,8 @@ async def on_to_device(client: AsyncClient, event): if isinstance(resp, ToDeviceError): print(f"Failed to confirm SAS: {resp}") - elif isinstance(event, (KeyVerificationMac, KeyVerificationDone)): - print(f"✅ Key verification successfully completed with {event.sender} ({event.from_device})!") + elif isinstance(event, (KeyVerificationMac, KeyVerificationCancel)): + print(f"Key verification event ({event.__class__.__name__}) received from {event.sender}.") # ------------------------------------------------------------------------------ @@ -391,12 +389,11 @@ async def main(): client.add_to_device_callback( lambda event: on_to_device(client, event), ( - KeyVerificationRequest, KeyVerificationStart, KeyVerificationKey, KeyVerificationMac, KeyVerificationCancel, - KeyVerificationDone, + UnknownToDeviceEvent, ), )