Browse Source

Use the state store to retrieve room joined users

Signed-off-by: Nikos Filippakis <me@nfil.dev>
pull/324/head
Nikos Filippakis 4 years ago
parent
commit
e04b001d8b
No known key found for this signature in database GPG Key ID: 7110E4356101F017
  1. 6
      clients/bot_client.go
  2. 25
      clients/state_store.go

6
clients/bot_client.go

@ -75,14 +75,10 @@ func (botClient *BotClient) SendMessageEvent(content interface{}, roomID id.Room
return err
} else if sess == nil || sess.Expired() || !sess.Shared {
// No error but valid, shared session does not exist
membs, err := botClient.client.JoinedMembers(roomID)
memberIDs, err := botClient.stateStore.GetJoinedMembers(roomID)
if err != nil {
return err
}
memberIDs := make([]id.UserID, 0, len(membs.Joined))
for member := range membs.Joined {
memberIDs = append(memberIDs, member)
}
// Share group session with room members
if err = olmMachine.ShareGroupSession(roomID, memberIDs); err != nil {
return err

25
clients/state_store.go

@ -1,6 +1,8 @@
package clients
import (
"errors"
"maunium.net/go/mautrix"
"maunium.net/go/mautrix/event"
"maunium.net/go/mautrix/id"
@ -52,3 +54,26 @@ func (ss *NebStateStore) UpdateStateStore(resp *mautrix.RespSync) {
}
}
}
// GetJoinedMembers returns a list of members that are currently in a room.
func (ss *NebStateStore) GetJoinedMembers(roomID id.RoomID) ([]id.UserID, error) {
joinedMembers := make([]id.UserID, 0)
room := ss.Storer.LoadRoom(roomID)
if room == nil {
return nil, errors.New("unknown roomID")
}
memberEvents := room.State[event.StateMember]
if memberEvents == nil {
return nil, errors.New("no state member events found")
}
for stateKey, stateEvent := range memberEvents {
if stateEvent == nil {
continue
}
stateEvent.Content.ParseRaw(event.StateMember)
if stateEvent.Content.AsMember().Membership == event.MembershipJoin {
joinedMembers = append(joinedMembers, id.UserID(stateKey))
}
}
return joinedMembers, nil
}
Loading…
Cancel
Save