Browse Source
Use the state store to retrieve room joined users
Signed-off-by: Nikos Filippakis <me@nfil.dev>
pull/324/head
Nikos Filippakis
5 years ago
No known key found for this signature in database
GPG Key ID: 7110E4356101F017
2 changed files with
26 additions and
5 deletions
-
clients/bot_client.go
-
clients/state_store.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 |
|
|
|
|
|
@ -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 |
|
|
|
} |