mirror of
https://github.com/mautrix/whatsapp.git
synced 2026-11-12 00:59:17 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b744b1f7e3 | ||
|
|
63b2466b24 |
1 changed files with 16 additions and 10 deletions
|
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"maps"
|
||||
"time"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
|
|
@ -244,6 +245,13 @@ const (
|
|||
defaultPL = 0
|
||||
)
|
||||
|
||||
var alwaysAllowedGroupEvents = map[event.Type]int{
|
||||
event.EventEncrypted: defaultPL, // Need to always allow encrypted events for poll responses
|
||||
event.EventReaction: defaultPL,
|
||||
event.EventRedaction: defaultPL,
|
||||
event.EventUnstablePollResponse: defaultPL,
|
||||
}
|
||||
|
||||
func setDefaultSubGroupFlag(isCommunityAnnouncementGroup bool) bridgev2.ExtraUpdater[*bridgev2.Portal] {
|
||||
return func(_ context.Context, portal *bridgev2.Portal) bool {
|
||||
meta := portal.Metadata.(*waid.PortalMetadata)
|
||||
|
|
@ -311,10 +319,6 @@ func (wa *WhatsAppClient) wrapGroupInfo(ctx context.Context, info *types.GroupIn
|
|||
event.StateRoomName: metaChangePL,
|
||||
event.StateRoomAvatar: metaChangePL,
|
||||
event.StateTopic: metaChangePL,
|
||||
event.EventEncrypted: defaultPL, // Need to always allow encrypted events for poll responses
|
||||
event.EventReaction: defaultPL,
|
||||
event.EventRedaction: defaultPL,
|
||||
event.EventUnstablePollResponse: defaultPL,
|
||||
event.StateBeeperDisappearingTimer: metaChangePL,
|
||||
},
|
||||
},
|
||||
|
|
@ -326,6 +330,7 @@ func (wa *WhatsAppClient) wrapGroupInfo(ctx context.Context, info *types.GroupIn
|
|||
},
|
||||
ExtraUpdates: extraUpdater,
|
||||
}
|
||||
maps.Copy(wrapped.Members.PowerLevels.Events, alwaysAllowedGroupEvents)
|
||||
var hasSelf bool
|
||||
for _, pcp := range info.Participants {
|
||||
member := bridgev2.ChatMember{
|
||||
|
|
@ -436,24 +441,25 @@ func (wa *WhatsAppClient) wrapGroupInfoChange(ctx context.Context, evt *events.G
|
|||
if memberChanges == nil {
|
||||
memberChanges = &bridgev2.ChatMemberList{}
|
||||
}
|
||||
memberChanges.PowerLevels = &bridgev2.PowerLevelOverrides{}
|
||||
memberChanges.PowerLevels = &bridgev2.PowerLevelOverrides{
|
||||
Events: make(map[event.Type]int),
|
||||
}
|
||||
if evt.Announce != nil {
|
||||
if evt.Announce.IsAnnounce {
|
||||
memberChanges.PowerLevels.EventsDefault = ptr.Ptr(adminPL)
|
||||
} else {
|
||||
memberChanges.PowerLevels.EventsDefault = ptr.Ptr(defaultPL)
|
||||
}
|
||||
maps.Copy(memberChanges.PowerLevels.Events, alwaysAllowedGroupEvents)
|
||||
}
|
||||
if evt.Locked != nil {
|
||||
metaChangePL := defaultPL
|
||||
if evt.Locked.IsLocked {
|
||||
metaChangePL = adminPL
|
||||
}
|
||||
memberChanges.PowerLevels.Events = map[event.Type]int{
|
||||
event.StateRoomName: metaChangePL,
|
||||
event.StateRoomAvatar: metaChangePL,
|
||||
event.StateTopic: metaChangePL,
|
||||
}
|
||||
memberChanges.PowerLevels.Events[event.StateRoomName] = metaChangePL
|
||||
memberChanges.PowerLevels.Events[event.StateRoomAvatar] = metaChangePL
|
||||
memberChanges.PowerLevels.Events[event.StateTopic] = metaChangePL
|
||||
}
|
||||
}
|
||||
return &bridgev2.ChatInfoChange{
|
||||
|
|
|
|||
Loading…
Reference in a new issue