from dataclasses import dataclass from typing import Dict, Any, Optional, List @dataclass class Room: """Dataclass representing a Matrix room""" room_id: str name: Optional[str] = None canonical_alias: Optional[str] = None joined_members: int = 0 joined_local_members: int = 0 version: Optional[str] = None creator: Optional[str] = None encryption: Optional[str] = None federatable: bool = True public: bool = True join_rules: Optional[str] = None guest_access: Optional[str] = None history_visibility: Optional[str] = None state_events: int = 0 room_type: Optional[str] = None avatar: Optional[str] = None @classmethod def from_api_response(cls, data: Dict[str, Any]) -> "Room": """Create a Room object from a dictionary.""" return cls( room_id=str(data['room_id']), name=data.get('name'), canonical_alias=data.get('canonical_alias'), joined_members=data.get('joined_members', 0), joined_local_members=data.get('joined_local_members', 0), version=data.get('version'), creator=data.get('creator'), encryption=data.get('encryption'), federatable=data.get('federatable', True), public=data.get('public', True), join_rules=data.get('join_rules'), guest_access=data.get('guest_access'), history_visibility=data.get('history_visibility'), state_events=data.get('state_events', 0), room_type=data.get('room_type'), avatar=data.get('avatar'), ) @dataclass class RoomListResponse: """Response from room list API""" rooms: List[Room] next_batch: Optional[int] prev_batch: Optional[int] total_rooms: int @classmethod def from_api_response(cls, data: Dict[str, Any]) -> "RoomListResponse": """Create RoomListResponse from API response.""" rooms = [Room.from_api_response(room_data) for room_data in data.get('rooms', [])] return cls( rooms=rooms, next_batch=data.get('next_batch'), prev_batch=data.get('prev_batch'), total_rooms=data.get('total_rooms', len(rooms)) )