forked from platypush/platypush
Added create_room action
This commit is contained in:
parent
912168626c
commit
d890b6cbe8
2 changed files with 72 additions and 2 deletions
|
@ -8,7 +8,7 @@ import re
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Collection, Coroutine, Dict
|
from typing import Collection, Coroutine, Dict, Sequence
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from async_lru import alru_cache
|
from async_lru import alru_cache
|
||||||
|
@ -58,6 +58,7 @@ from nio import (
|
||||||
|
|
||||||
import aiofiles
|
import aiofiles
|
||||||
import aiofiles.os
|
import aiofiles.os
|
||||||
|
from nio.api import RoomVisibility
|
||||||
|
|
||||||
from nio.client.async_client import client_session
|
from nio.client.async_client import client_session
|
||||||
from nio.crypto import decrypt_attachment
|
from nio.crypto import decrypt_attachment
|
||||||
|
@ -93,6 +94,7 @@ from platypush.schemas.matrix import (
|
||||||
MatrixEventIdSchema,
|
MatrixEventIdSchema,
|
||||||
MatrixMyDeviceSchema,
|
MatrixMyDeviceSchema,
|
||||||
MatrixProfileSchema,
|
MatrixProfileSchema,
|
||||||
|
MatrixRoomIdSchema,
|
||||||
MatrixRoomSchema,
|
MatrixRoomSchema,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1112,7 +1114,7 @@ class MatrixPlugin(AsyncRunnablePlugin):
|
||||||
if evt.get('type') == 'm.room.create':
|
if evt.get('type') == 'm.room.create':
|
||||||
room_args['own_user_id'] = evt.get('content', {}).get('creator')
|
room_args['own_user_id'] = evt.get('content', {}).get('creator')
|
||||||
elif evt.get('type') == 'm.room.encryption':
|
elif evt.get('type') == 'm.room.encryption':
|
||||||
room_args['encrypted'] = False
|
room_args['encrypted'] = True
|
||||||
elif evt.get('type') == 'm.room.name':
|
elif evt.get('type') == 'm.room.name':
|
||||||
room_params['name'] = evt.get('content', {}).get('name')
|
room_params['name'] = evt.get('content', {}).get('name')
|
||||||
elif evt.get('type') == 'm.room.topic':
|
elif evt.get('type') == 'm.room.topic':
|
||||||
|
@ -1146,6 +1148,8 @@ class MatrixPlugin(AsyncRunnablePlugin):
|
||||||
def get_joined_rooms(self):
|
def get_joined_rooms(self):
|
||||||
"""
|
"""
|
||||||
Retrieve the rooms that the user has joined.
|
Retrieve the rooms that the user has joined.
|
||||||
|
|
||||||
|
:return: .. schema:: matrix.MatrixRoomSchema(many=True)
|
||||||
"""
|
"""
|
||||||
response = self._loop_execute(self.client.joined_rooms())
|
response = self._loop_execute(self.client.joined_rooms())
|
||||||
return [self.get_room(room_id).output for room_id in response.rooms] # type: ignore
|
return [self.get_room(room_id).output for room_id in response.rooms] # type: ignore
|
||||||
|
@ -1281,6 +1285,62 @@ class MatrixPlugin(AsyncRunnablePlugin):
|
||||||
|
|
||||||
return rs[0].content_uri
|
return rs[0].content_uri
|
||||||
|
|
||||||
|
@action
|
||||||
|
def create_room(
|
||||||
|
self,
|
||||||
|
name: str | None = None,
|
||||||
|
alias: str | None = None,
|
||||||
|
topic: str | None = None,
|
||||||
|
is_public: bool = False,
|
||||||
|
is_direct: bool = False,
|
||||||
|
federate: bool = True,
|
||||||
|
encrypted: bool = False,
|
||||||
|
invite_users: Sequence[str] = (),
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Create a new room on the server.
|
||||||
|
|
||||||
|
:param name: Room name.
|
||||||
|
:param alias: Custom alias for the canonical name. For example, if set
|
||||||
|
to ``foo``, the alias for this room will be
|
||||||
|
``#foo:matrix.example.org``.
|
||||||
|
:param topic: Room topic.
|
||||||
|
:param is_public: Set to True if you want the room to be public and
|
||||||
|
discoverable (default: False).
|
||||||
|
:param is_direct: Set to True if this should be considered a direct
|
||||||
|
room with only one user (default: False).
|
||||||
|
:param federate: Whether you want to allow users from other servers to
|
||||||
|
join the room (default: True).
|
||||||
|
:param encrypted: Whether the room should be encrypted (default: False).
|
||||||
|
:param invite_users: A list of user IDs to invite to the room.
|
||||||
|
:return: .. schema:: matrix.MatrixRoomIdSchema
|
||||||
|
"""
|
||||||
|
rs = self._loop_execute(
|
||||||
|
self.client.room_create(
|
||||||
|
name=name,
|
||||||
|
alias=alias,
|
||||||
|
topic=topic,
|
||||||
|
is_direct=is_direct,
|
||||||
|
federate=federate,
|
||||||
|
invite=invite_users,
|
||||||
|
visibility=(
|
||||||
|
RoomVisibility.public if is_public else RoomVisibility.private
|
||||||
|
),
|
||||||
|
initial_state=[
|
||||||
|
{
|
||||||
|
'type': 'm.room.encryption',
|
||||||
|
'content': {
|
||||||
|
'algorithm': 'm.megolm.v1.aes-sha2',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
if encrypted
|
||||||
|
else (),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return MatrixRoomIdSchema().dump(rs)
|
||||||
|
|
||||||
@action
|
@action
|
||||||
def invite_to_room(self, room_id: str, user_id: str):
|
def invite_to_room(self, room_id: str, user_id: str):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -14,6 +14,16 @@ class MatrixEventIdSchema(Schema):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixRoomIdSchema(Schema):
|
||||||
|
room_id = fields.String(
|
||||||
|
required=True,
|
||||||
|
metadata={
|
||||||
|
'description': 'Room ID',
|
||||||
|
'example': '!aBcDeFgHiJkMnO:matrix.example.org',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class MatrixProfileSchema(Schema):
|
class MatrixProfileSchema(Schema):
|
||||||
user_id = fields.String(
|
user_id = fields.String(
|
||||||
required=True,
|
required=True,
|
||||||
|
|
Loading…
Reference in a new issue