diff --git a/mautrix_telegram/portal/metadata.py b/mautrix_telegram/portal/metadata.py index aaee544d..02624be3 100644 --- a/mautrix_telegram/portal/metadata.py +++ b/mautrix_telegram/portal/metadata.py @@ -503,14 +503,15 @@ class PortalMetadata(BasePortal, ABC): levels.users[self.main_intent.mxid] = 100 return levels - @staticmethod - def _get_level_from_participant(participant: TypeParticipant) -> int: + @classmethod + def _get_level_from_participant(cls, participant: TypeParticipant, + levels: PowerLevelStateEventContent) -> int: # TODO use the power level requirements to get better precision in channels if isinstance(participant, (ChatParticipantAdmin, ChannelParticipantAdmin)): - return 50 + return levels.state_default or 50 elif isinstance(participant, (ChatParticipantCreator, ChannelParticipantCreator)): - return 95 - return 0 + return levels.get_user_level(cls.az.bot_mxid) - 5 + return levels.users_default or 0 @staticmethod def _participant_to_power_levels(levels: PowerLevelStateEventContent, @@ -541,7 +542,7 @@ class PortalMetadata(BasePortal, ABC): puppet = p.Puppet.get(TelegramID(participant.user_id)) user = u.User.get_by_tgid(TelegramID(participant.user_id)) - new_level = self._get_level_from_participant(participant) + new_level = self._get_level_from_participant(participant, levels) if user: await user.register_portal(self)