Explorar el Código

Merge remote-tracking branch 'maltee1/power_level_ranges'

Tulir Asokan hace 3 años
padre
commit
8c8b0536b5
Se han modificado 1 ficheros con 15 adiciones y 2 borrados
  1. 15 2
      mautrix_signal/portal.py

+ 15 - 2
mautrix_signal/portal.py

@@ -1802,6 +1802,7 @@ class Portal(DBPortal, BasePortal):
         is_initial: bool = False,
     ) -> PowerLevelStateEventContent:
         levels = levels or PowerLevelStateEventContent()
+        bot_pl = levels.get_user_level(self.az.bot_mxid)
         levels.events_default = 0
         if self.is_direct:
             levels.ban = 99
@@ -1814,8 +1815,20 @@ class Portal(DBPortal, BasePortal):
                 ac = info.access_control
                 for detail in info.member_detail + info.pending_member_detail:
                     puppet = await p.Puppet.get_by_address(Address(uuid=detail.uuid))
-                    level = 50 if detail.role == GroupMemberRole.ADMINISTRATOR else 0
-                    levels.users[puppet.intent_for(self).mxid] = level
+                    puppet_mxid = puppet.intent_for(self).mxid
+                    current_level = levels.get_user_level(puppet_mxid)
+                    if bot_pl > current_level and bot_pl >= 50:
+                        level = current_level
+                        if puppet.is_real_user:
+                            if current_level >= 50 and detail.role == GroupMemberRole.DEFAULT:
+                                level = 0
+                            elif (
+                                current_level < 50 and detail.role == GroupMemberRole.ADMINISTRATOR
+                            ):
+                                level = 50
+                        else:
+                            level = 50 if detail.role == GroupMemberRole.ADMINISTRATOR else 0
+                        levels.users[puppet_mxid] = level
                 announcements = info.announcements
             else:
                 ac = GroupAccessControl()