diff --git a/portal.go b/portal.go index c6c0aa3a..5669c0a9 100644 --- a/portal.go +++ b/portal.go @@ -514,6 +514,9 @@ func (portal *Portal) UpdateMetadata(user *User) bool { update := false update = portal.UpdateName(metadata.Name, metadata.NameSetBy, false) || update update = portal.UpdateTopic(metadata.Topic, metadata.TopicSetBy, false) || update + + portal.RestrictMessageSending(metadata.Announce) + return update } @@ -640,11 +643,17 @@ func (portal *Portal) RestrictMessageSending(restrict bool) { if err != nil { levels = portal.GetBasePowerLevels() } + + newLevel := 0 if restrict { - levels.EventsDefault = 50 - } else { - levels.EventsDefault = 0 + newLevel = 50 } + + if levels.EventsDefault == newLevel { + return + } + + levels.EventsDefault = newLevel _, err = portal.MainIntent().SetPowerLevels(portal.MXID, levels) if err != nil { portal.log.Errorln("Failed to change power levels:", err) @@ -954,6 +963,7 @@ func (portal *Portal) CreateMatrixRoom(user *User) error { } bridgeInfoStateKey, bridgeInfo := portal.getBridgeInfo() + initialState := []*event.Event{{ Type: event.StatePowerLevels, Content: event.Content{ @@ -1021,6 +1031,9 @@ func (portal *Portal) CreateMatrixRoom(user *User) error { if metadata != nil { portal.SyncParticipants(metadata) + if metadata.Announce { + portal.RestrictMessageSending(metadata.Announce) + } } else { customPuppet := portal.bridge.GetPuppetByCustomMXID(user.MXID) if customPuppet != nil && customPuppet.CustomIntent() != nil { diff --git a/whatsapp-ext/whatsapp.go b/whatsapp-ext/whatsapp.go index a316c24f..f47c62ef 100644 --- a/whatsapp-ext/whatsapp.go +++ b/whatsapp-ext/whatsapp.go @@ -84,6 +84,8 @@ type GroupInfo struct { NameSetTime int64 `json:"subjectTime"` NameSetBy string `json:"subjectOwner"` + Announce bool `json:"announce"` // Can only admins send messages? + Topic string `json:"desc"` TopicID string `json:"descId"` TopicSetAt int64 `json:"descTime"`