浏览代码

Merge pull request #345 from maltee1/failed_invite_check_members

don't kick ghost on GroupPatchNotAcceptedError if they are in the signal group
Tulir Asokan 2 年之前
父节点
当前提交
14610ceb54
共有 2 个文件被更改,包括 13 次插入0 次删除
  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
 
 
+class GroupPatchNotAcceptedError(ResponseError):
+    pass
+
+
 response_error_types = {
     "invalid_request": RequestValidationFailure,
     "TimeoutException": TimeoutException,
@@ -129,6 +133,7 @@ response_error_types = {
     "UnregisteredUserError": UnregisteredUserError,
     "ProfileUnavailableError": ProfileUnavailableError,
     "NoSuchAccountError": NoSuchAccountError,
+    "GroupPatchNotAcceptedError": GroupPatchNotAcceptedError,
     # 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 (
     AttachmentTooLargeError,
+    GroupPatchNotAcceptedError,
     NotConnected,
     ProfileUnavailableError,
     RPCError,
@@ -860,6 +861,13 @@ class Portal(DBPortal, BasePortal):
                 invited_by.username, self.chat_id, add_members=[user.address]
             )
             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:
             raise RejectMatrixInvite(str(e)) from e
         if user.mxid == self.config["bridge.relay.relaybot"] != "@relaybot:example.com":