Browse Source

Add power level to Matrix user if they're admin

Tulir Asokan 6 years ago
parent
commit
0d45b5b857
2 changed files with 12 additions and 4 deletions
  1. 9 4
      portal.go
  2. 3 0
      whatsapp-ext/chat.go

+ 9 - 4
portal.go

@@ -128,16 +128,17 @@ func (portal *Portal) SyncParticipants(metadata *whatsappExt.GroupInfo) {
 	for _, participant := range metadata.Participants {
 		puppet := portal.user.GetPuppetByJID(participant.JID)
 		puppet.Intent().EnsureJoined(portal.MXID)
-		level := levels.GetUserLevel(puppet.MXID)
+
 		expectedLevel := 0
 		if participant.IsSuperAdmin {
 			expectedLevel = 95
 		} else if participant.IsAdmin {
 			expectedLevel = 50
 		}
-		if level != expectedLevel {
-			levels.SetUserLevel(puppet.MXID, expectedLevel)
-			changed = true
+		changed = levels.EnsureUserLevel(puppet.MXID, expectedLevel) || changed
+
+		if participant.JID == portal.user.JID() {
+			changed = levels.EnsureUserLevel(portal.user.ID, expectedLevel) || changed
 		}
 	}
 	if changed {
@@ -278,6 +279,10 @@ func (portal *Portal) ChangeAdminStatus(jids []string, setAdmin bool) {
 	for _, jid := range jids {
 		puppet := portal.user.GetPuppetByJID(jid)
 		changed = levels.EnsureUserLevel(puppet.MXID, newLevel) || changed
+
+		if jid == portal.user.JID() {
+			changed = levels.EnsureUserLevel(portal.user.ID, newLevel) || changed
+		}
 	}
 	if changed {
 		portal.MainIntent().SetPowerLevels(portal.MXID, levels)

+ 3 - 0
whatsapp-ext/chat.go

@@ -118,6 +118,9 @@ func (cud *ChatUpdateData) UnmarshalJSON(data []byte) error {
 		return err
 	}
 	cud.NameChange.SetBy = strings.Replace(cud.NameChange.SetBy, OldUserSuffix, NewUserSuffix, 1)
+	for index, jid := range cud.PermissionChange.JIDs {
+		cud.PermissionChange.JIDs[index] = strings.Replace(jid, OldUserSuffix, NewUserSuffix, 1)
+	}
 	return nil
 }