mirror of
https://gitlab.com/animath/si/plateforme-corres2math.git
synced 2025-02-06 08:13:02 +00:00
53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
import asyncio
|
|
from typing import Any, Dict, Optional, Union
|
|
|
|
from asgiref.sync import async_to_sync
|
|
from nio import AsyncClient, RoomCreateError, RoomCreateResponse, RoomInviteError, RoomInviteResponse, RoomPreset, \
|
|
RoomVisibility, RoomResolveAliasResponse
|
|
|
|
|
|
class Matrix:
|
|
@classmethod
|
|
async def _get_client(cls) -> AsyncClient:
|
|
# TODO Store
|
|
client = AsyncClient("https://correspondances-maths.fr", "@corres2mathbot:correspondances-maths.fr")
|
|
await client.login("toto1234")
|
|
return client
|
|
|
|
@classmethod
|
|
@async_to_sync
|
|
async 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]
|
|
|
|
client = await cls._get_client()
|
|
return await client.room_create(
|
|
visibility, alias, name, topic, room_version, federate, is_direct, preset, invite, initial_state,
|
|
power_level_override)
|
|
|
|
@classmethod
|
|
async def resolve_room_alias(cls, room_alias: str) -> str:
|
|
client = await cls._get_client()
|
|
resp: RoomResolveAliasResponse = await client.room_resolve_alias(room_alias)
|
|
return resp.room_id
|
|
|
|
@classmethod
|
|
@async_to_sync
|
|
async def invite(cls, room_id: str, user_id: str) -> Union[RoomInviteResponse, RoomInviteError]:
|
|
client = await cls._get_client()
|
|
if room_id.startswith("#"):
|
|
room_id = await cls.resolve_room_alias(room_id)
|
|
return await client.room_invite(room_id, user_id)
|