From ac188bf85bbb9555f3e374288292b598bc03fbc1 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 6 Feb 2018 14:54:04 +0200 Subject: [PATCH] Don't update power levels at startup unless something changes --- mautrix_appservice/intent_api.py | 12 ++++++++---- mautrix_telegram/portal.py | 14 ++++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/mautrix_appservice/intent_api.py b/mautrix_appservice/intent_api.py index ac7839b6..9eae5ad4 100644 --- a/mautrix_appservice/intent_api.py +++ b/mautrix_appservice/intent_api.py @@ -189,12 +189,16 @@ class IntentAPI: return self.client.create_room(alias, is_public, name, topic, is_direct, invitees, initial_state or {}) - def invite(self, room_id, user_id): + def invite(self, room_id, user_id, check_cache): self.ensure_joined(room_id) try: - response = self.client.invite_user(room_id, user_id) - self.state_store.invited(room_id, user_id) - return response + do_invite = (not check_cache + or self.state_store.get_membership(room_id, user_id) not in {"invite", + "join"}) + if do_invite: + response = self.client.invite_user(room_id, user_id) + self.state_store.invited(room_id, user_id) + return response except MatrixRequestError as e: if matrix_error_code(e) != "M_FORBIDDEN": raise IntentError(f"Failed to invite {user_id} to {room_id}", e) diff --git a/mautrix_telegram/portal.py b/mautrix_telegram/portal.py index a3c9fce5..68a4d859 100644 --- a/mautrix_telegram/portal.py +++ b/mautrix_telegram/portal.py @@ -133,10 +133,10 @@ class Portal: def invite_matrix(self, users): if isinstance(users, str): - self.main_intent.invite(self.mxid, users) + self.main_intent.invite(self.mxid, users, check_cache=True) elif isinstance(users, list): for user in users: - self.main_intent.invite(self.mxid, user) + self.main_intent.invite(self.mxid, user, check_cache=True) else: raise ValueError("Invalid invite identifier given to invite_matrix()") @@ -770,10 +770,16 @@ class Portal: new_level = 50 elif isinstance(participant, (ChatParticipantCreator, ChannelParticipantCreator)): new_level = 95 - if user and (user.mxid in levels["users"] or new_level > 0): + + update_user_level = (user and (user.mxid in levels["users"] or new_level > 0) + and levels["users"][user.mxid] != new_level) + if update_user_level: levels["users"][user.mxid] = new_level changed = True - if puppet and (puppet.mxid in levels["users"] or new_level > 0): + + update_puppet_level = (puppet and (puppet.mxid in levels["users"] or new_level > 0) + and levels["users"][puppet.mxid] != new_level) + if update_puppet_level: levels["users"][puppet.mxid] = new_level changed = True if changed: