Przeglądaj źródła

signal kicks: handle being kicked from Signal group

Requires signald@02d0db287f4d1ae2764b5f75f4bbfdb32e305e4d

Co-authored-by: Tulir Asokan <tulir@maunium.net>
Sumner Evans 3 lat temu
rodzic
commit
e7fa201263
3 zmienionych plików z 12 dodań i 0 usunięć
  1. 1 0
      mausignald/types.py
  2. 4 0
      mautrix_signal/portal.py
  3. 7 0
      mautrix_signal/signal.py

+ 1 - 0
mausignald/types.py

@@ -163,6 +163,7 @@ class Group(SerializableAttrs):
 class GroupV2ID(SerializableAttrs):
     id: GroupID
     revision: Optional[int] = None
+    removed: Optional[bool] = False
 
 
 class AccessControlMode(SerializableEnum):

+ 4 - 0
mautrix_signal/portal.py

@@ -945,6 +945,10 @@ class Portal(DBPortal, BasePortal):
         else:
             self.log.debug(f"Didn't get event ID for {message.timestamp}")
 
+    async def handle_signal_kicked(self, user: u.User, sender: pu.Puppet) -> None:
+        self.log.debug(f"{user.mxid} was kicked by {sender.number} from {self.mxid}")
+        await self.main_intent.kick_user(self.mxid, user.mxid, f"{sender.name} kicked you")
+
     @staticmethod
     async def _make_media_content(
         attachment: Attachment, data: bytes

+ 7 - 0
mautrix_signal/signal.py

@@ -175,6 +175,13 @@ class SignalHandler(SignaldClient):
                 )
                 return
         assert portal
+
+        # Handle the user being removed from the group.
+        if msg.group_v2 and msg.group_v2.removed:
+            if portal.mxid:
+                await portal.handle_signal_kicked(user, sender)
+            return
+
         if not portal.mxid:
             if not msg.is_message and not msg.group_v2:
                 user.log.debug(