Merge branch 'matrix-delivery'

matrix-profile-room-messages
Jason Robinson 2020-12-27 00:39:00 +02:00
commit 0abb33a4fb
2 zmienionych plików z 35 dodań i 7 usunięć

Wyświetl plik

@ -1,3 +1,4 @@
import json
import logging
from typing import Dict, List
@ -47,7 +48,9 @@ class MatrixRoomMessage(Post, MatrixEntityMixin):
class MatrixProfile(Profile, MatrixEntityMixin):
_remote_create_needed = False
_profile_room_id = None
_remote_profile_create_needed = False
_remote_room_create_needed = False
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@ -61,7 +64,7 @@ class MatrixProfile(Profile, MatrixEntityMixin):
def payloads(self) -> List[Dict]:
payloads = super().payloads()
if self._remote_create_needed:
if self._remote_profile_create_needed:
payloads.append({
"endpoint": f"{super().get_endpoint()}/register",
"payload": {
@ -69,6 +72,19 @@ class MatrixProfile(Profile, MatrixEntityMixin):
"type": "m.login.application_service",
},
})
if self._remote_room_create_needed:
payloads.append({
"endpoint": f"{super().get_endpoint()}/createRoom",
"payload": {
"invite": [
self.mxid,
],
"name": self.name,
"preset": "public_chat" if self.public else "private_chat",
"room_alias_name": f"@{self.localpart}",
"topic": f"Profile room of {self.url}",
},
})
payloads.append({
"endpoint": f"{super().get_endpoint()}/profile/{self.mxid}/displayname?user_id={self.mxid}",
"payload": {
@ -81,13 +97,25 @@ class MatrixProfile(Profile, MatrixEntityMixin):
def pre_send(self):
"""
Check whether we need to create this user.
Check whether we need to create the user or their profile room.
"""
doc, status, error = fetch_document(
url=f"{super().get_endpoint()}/profile/{self.mxid}",
extra_headers=appservice_auth_header(),
)
if status == 200:
return
if status != 200:
self._remote_profile_create_needed = True
self._remote_create_needed = True
doc, status, error = fetch_document(
url=f"{super().get_endpoint()}/directory/room/{self.profile_room_alias}",
extra_headers=appservice_auth_header(),
)
if status != 200:
self._remote_room_create_needed = True
else:
data = json.loads(doc)
self._profile_room_id = data["room_id"]
@property
def profile_room_alias(self):
return f"#{self.mxid}"

Wyświetl plik

@ -313,7 +313,7 @@ def handle_send(
},
"payload": rendered_payload,
"urls": {payload["endpoint"]},
"method": payload["method"],
"method": payload.get("method"),
})
except Exception:
logger.error(