diff --git a/matrix_keycloak_bot.py b/matrix_keycloak_bot.py index 4906b65..6d1e9dc 100644 --- a/matrix_keycloak_bot.py +++ b/matrix_keycloak_bot.py @@ -9,6 +9,7 @@ from nio import ( RoomMessageText, ReactionEvent, RoomSendResponse, + InviteMemberEvent ) # ------------------------------------------------------------------------------ @@ -79,6 +80,24 @@ def add_user_to_kc_group(username: str, group_name: str) -> tuple[bool, str]: # ------------------------------------------------------------------------------ # Matrix Event Handlers # ------------------------------------------------------------------------------ +async def on_invite(client: AsyncClient, room: MatrixRoom, event: InviteMemberEvent): + """Auto-joins rooms when invited by an authorized user/homeserver.""" + # Ensure the invite is actually meant for this bot + if event.state_key != client.user_id: + return + + # Only accept invites from my domain + if not event.sender.endswith(":starling.mynest.love"): return + + print(f"Received invite for room {room.room_id} from {event.sender}. Joining...") + + response = await client.join(room.room_id) + if hasattr(response, "room_id"): + print(f"Successfully joined room {room.room_id}") + else: + print(f"Failed to join room {room.room_id}: {response}") + + async def on_message(client: AsyncClient, room: MatrixRoom, event: RoomMessageText): """Listens for `!request ` commands.""" # Ignore messages sent by the bot itself @@ -231,6 +250,9 @@ async def main(): client.add_event_callback( lambda room, event: on_reaction(client, room, event), ReactionEvent ) + client.add_event_callback( + lambda room, event: on_invite(client, room, event), InviteMemberEvent + ) print(f"Connecting to Matrix homeserver {MATRIX_HOMESERVER}...") await client.login(MATRIX_BOT_PASSWORD)