Browse Source

don't kick ghost on GroupPatchNotAcceptedError if they are in the group

Malte E 2 years ago
parent
commit
b36b8cb84e
2 changed files with 13 additions and 0 deletions
  1. 5 0
      mausignald/errors.py
  2. 8 0
      mautrix_signal/portal.py

+ 5 - 0
mausignald/errors.py

@@ -114,6 +114,10 @@ class NoSuchAccountError(ResponseError):
     pass
     pass
 
 
 
 
+class GroupPatchNotAcceptedError(ResponseError):
+    pass
+
+
 response_error_types = {
 response_error_types = {
     "invalid_request": RequestValidationFailure,
     "invalid_request": RequestValidationFailure,
     "TimeoutException": TimeoutException,
     "TimeoutException": TimeoutException,
@@ -129,6 +133,7 @@ response_error_types = {
     "UnregisteredUserError": UnregisteredUserError,
     "UnregisteredUserError": UnregisteredUserError,
     "ProfileUnavailableError": ProfileUnavailableError,
     "ProfileUnavailableError": ProfileUnavailableError,
     "NoSuchAccountError": NoSuchAccountError,
     "NoSuchAccountError": NoSuchAccountError,
+    "GroupPatchNotAcceptedError": GroupPatchNotAcceptedError,
     # TODO add rest from https://gitlab.com/signald/signald/-/tree/main/src/main/java/io/finn/signald/clientprotocol/v1/exceptions
     # TODO add rest from https://gitlab.com/signald/signald/-/tree/main/src/main/java/io/finn/signald/clientprotocol/v1/exceptions
 }
 }
 
 

+ 8 - 0
mautrix_signal/portal.py

@@ -28,6 +28,7 @@ import time
 
 
 from mausignald.errors import (
 from mausignald.errors import (
     AttachmentTooLargeError,
     AttachmentTooLargeError,
+    GroupPatchNotAcceptedError,
     NotConnected,
     NotConnected,
     ProfileUnavailableError,
     ProfileUnavailableError,
     RPCError,
     RPCError,
@@ -860,6 +861,13 @@ class Portal(DBPortal, BasePortal):
                 invited_by.username, self.chat_id, add_members=[user.address]
                 invited_by.username, self.chat_id, add_members=[user.address]
             )
             )
             self.revision = update_meta.revision
             self.revision = update_meta.revision
+        except GroupPatchNotAcceptedError as e:
+            update_meta = await self.signal.get_group(invited_by.username, self.chat_id)
+            if (
+                user.address not in update_meta.members
+                and user.address not in update_meta.pending_members
+            ):
+                raise RejectMatrixInvite(str(e)) from e
         except RPCError as e:
         except RPCError as e:
             raise RejectMatrixInvite(str(e)) from e
             raise RejectMatrixInvite(str(e)) from e
         if user.mxid == self.config["bridge.relay.relaybot"] != "@relaybot:example.com":
         if user.mxid == self.config["bridge.relay.relaybot"] != "@relaybot:example.com":