Update membership correctly if inviting fails
This commit is contained in:
@@ -126,6 +126,15 @@ def matrix_error_code(err):
|
|||||||
except Exception:
|
except Exception:
|
||||||
return err.content
|
return err.content
|
||||||
|
|
||||||
|
def matrix_error_data(err):
|
||||||
|
try:
|
||||||
|
data = json.loads(err.content)
|
||||||
|
return data["errcode"], data["error"]
|
||||||
|
except Exception:
|
||||||
|
return err.content
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class IntentAPI:
|
class IntentAPI:
|
||||||
mxid_regex = re.compile("@(.+):(.+)")
|
mxid_regex = re.compile("@(.+):(.+)")
|
||||||
@@ -192,16 +201,19 @@ class IntentAPI:
|
|||||||
def invite(self, room_id, user_id, check_cache):
|
def invite(self, room_id, user_id, check_cache):
|
||||||
self.ensure_joined(room_id)
|
self.ensure_joined(room_id)
|
||||||
try:
|
try:
|
||||||
|
ok_states = {"invite", "join"}
|
||||||
do_invite = (not check_cache
|
do_invite = (not check_cache
|
||||||
or self.state_store.get_membership(room_id, user_id) not in {"invite",
|
or self.state_store.get_membership(room_id, user_id) not in ok_states)
|
||||||
"join"})
|
|
||||||
if do_invite:
|
if do_invite:
|
||||||
response = self.client.invite_user(room_id, user_id)
|
response = self.client.invite_user(room_id, user_id)
|
||||||
self.state_store.invited(room_id, user_id)
|
self.state_store.invited(room_id, user_id)
|
||||||
return response
|
return response
|
||||||
except MatrixRequestError as e:
|
except MatrixRequestError as e:
|
||||||
if matrix_error_code(e) != "M_FORBIDDEN":
|
code, message = matrix_error_data(e)
|
||||||
|
if code != "M_FORBIDDEN":
|
||||||
raise IntentError(f"Failed to invite {user_id} to {room_id}", e)
|
raise IntentError(f"Failed to invite {user_id} to {room_id}", e)
|
||||||
|
if "is already in the room" in message:
|
||||||
|
self.state_store.joined(room_id, user_id)
|
||||||
|
|
||||||
def set_room_avatar(self, room_id, avatar_url, info=None):
|
def set_room_avatar(self, room_id, avatar_url, info=None):
|
||||||
content = {
|
content = {
|
||||||
|
|||||||
Reference in New Issue
Block a user