Преглед на файлове

Add support for Matrix->Signal topic changes

Tulir Asokan преди 3 години
родител
ревизия
816233e4f7
променени са 3 файла, в които са добавени 21 реда и са изтрити 1 реда
  1. 2 0
      mausignald/signald.py
  2. 3 1
      mautrix_signal/matrix.py
  3. 16 0
      mautrix_signal/portal.py

+ 2 - 0
mausignald/signald.py

@@ -325,6 +325,7 @@ class SignaldClient(SignaldRPCClient):
         username: str,
         group_id: GroupID,
         title: str | None = None,
+        description: str | None = None,
         avatar_path: str | None = None,
         add_members: list[Address] | None = None,
         remove_members: list[Address] | None = None,
@@ -335,6 +336,7 @@ class SignaldClient(SignaldRPCClient):
                 "groupID": group_id,
                 "avatar": avatar_path,
                 "title": title,
+                "description": description,
                 "addMembers": [addr.serialize() for addr in add_members] if add_members else None,
                 "removeMembers": (
                     [addr.serialize() for addr in remove_members] if remove_members else None

+ 3 - 1
mautrix_signal/matrix.py

@@ -173,7 +173,7 @@ class MatrixHandler(BaseMatrixHandler):
             await super().handle_ephemeral_event(evt)
 
     async def handle_state_event(self, evt: StateEvent) -> None:
-        if evt.type not in (EventType.ROOM_NAME, EventType.ROOM_AVATAR):
+        if evt.type not in (EventType.ROOM_NAME, EventType.ROOM_TOPIC, EventType.ROOM_AVATAR):
             return
 
         user = await u.User.get_by_mxid(evt.sender)
@@ -187,6 +187,8 @@ class MatrixHandler(BaseMatrixHandler):
             await portal.handle_matrix_name(user, evt.content.name)
         elif evt.type == EventType.ROOM_AVATAR:
             await portal.handle_matrix_avatar(user, evt.content.url)
+        elif evt.type == EventType.ROOM_TOPIC:
+            await portal.handle_matrix_topic(user, evt.content.topic)
 
     async def allow_message(self, user: u.User) -> bool:
         return user.relay_whitelisted

+ 16 - 0
mautrix_signal/portal.py

@@ -738,6 +738,22 @@ class Portal(DBPortal, BasePortal):
             await user.handle_auth_failure(e)
             self.name = None
 
+    async def handle_matrix_topic(self, user: u.User, topic: str) -> None:
+        if self.topic == topic or self.is_direct or not topic:
+            return
+        sender, is_relay = await self.get_relay_sender(user, "topic change")
+        if not sender:
+            return
+        self.topic = topic
+        self.log.debug(
+            f"{user.mxid} changed the group topic, sending to Signal through {sender.username}"
+        )
+        try:
+            await self.signal.update_group(sender.username, self.chat_id, description=topic)
+        except Exception:
+            self.log.exception("Failed to update Signal group description")
+            self.name = None
+
     async def handle_matrix_avatar(self, user: u.User, url: ContentURI) -> None:
         if self.is_direct or not url:
             return