import asyncio from typing import Any, Dict, Optional, Union from nio import AsyncClient, RoomCreateError, RoomCreateResponse, RoomInviteError, RoomInviteResponse, RoomPreset, \ RoomVisibility class Matrix: @classmethod def _get_client(cls) -> AsyncClient: if hasattr(cls, "_client"): return cls._client async def login(): cls._client = AsyncClient("https://correspondances-maths.fr", "@corres2mathbot:correspondances-maths.fr") await cls._client.login("toto1234") return cls._client return asyncio.get_event_loop().run_until_complete(login()) @classmethod def create_room( cls, visibility: RoomVisibility = RoomVisibility.private, alias: Optional[str] = None, name: Optional[str] = None, topic: Optional[str] = None, room_version: Optional[str] = None, federate: bool = True, is_direct: bool = False, preset: Optional[RoomPreset] = None, invite=(), initial_state=(), power_level_override: Optional[Dict[str, Any]] = None, ) -> Union[RoomCreateResponse, RoomCreateError]: resp: Union[RoomCreateResponse, RoomCreateError] return asyncio.get_event_loop().run_until_complete(cls._get_client().room_create( visibility, alias, name, topic, room_version, federate, is_direct, preset, invite, initial_state, power_level_override)) @classmethod def invite(cls, room_id: str, user_id: str) -> Union[RoomInviteResponse, RoomInviteError]: return asyncio.get_event_loop().run_until_complete(cls._get_client().room_invite(room_id, user_id))