diff options
author | Wim <wim@42.be> | 2022-03-20 01:43:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-20 01:43:26 +0100 |
commit | 17da95b094e4bb433e5fe240fa42067d94d908c1 (patch) | |
tree | 50abef4f2d92c1088d3a47c659bbc977a94f96b1 /vendor/github.com/matterbridge/gomatrix/room.go | |
parent | c5e49eec96a8b03786d679afa35c58952d0269a7 (diff) | |
download | matterbridge-msglm-17da95b094e4bb433e5fe240fa42067d94d908c1.tar.gz matterbridge-msglm-17da95b094e4bb433e5fe240fa42067d94d908c1.tar.bz2 matterbridge-msglm-17da95b094e4bb433e5fe240fa42067d94d908c1.zip |
Remove go replace by fork (matrix) (#1771)
Diffstat (limited to 'vendor/github.com/matterbridge/gomatrix/room.go')
-rw-r--r-- | vendor/github.com/matterbridge/gomatrix/room.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/vendor/github.com/matterbridge/gomatrix/room.go b/vendor/github.com/matterbridge/gomatrix/room.go new file mode 100644 index 00000000..364deab2 --- /dev/null +++ b/vendor/github.com/matterbridge/gomatrix/room.go @@ -0,0 +1,63 @@ +package gomatrix + +// Room represents a single Matrix room. +type Room struct { + ID string + State map[string]map[string]*Event +} + +// PublicRoom represents the information about a public room obtainable from the room directory +type PublicRoom struct { + CanonicalAlias string `json:"canonical_alias"` + Name string `json:"name"` + WorldReadable bool `json:"world_readable"` + Topic string `json:"topic"` + NumJoinedMembers int `json:"num_joined_members"` + AvatarURL string `json:"avatar_url"` + RoomID string `json:"room_id"` + GuestCanJoin bool `json:"guest_can_join"` + Aliases []string `json:"aliases"` +} + +// UpdateState updates the room's current state with the given Event. This will clobber events based +// on the type/state_key combination. +func (room Room) UpdateState(event *Event) { + _, exists := room.State[event.Type] + if !exists { + room.State[event.Type] = make(map[string]*Event) + } + room.State[event.Type][*event.StateKey] = event +} + +// GetStateEvent returns the state event for the given type/state_key combo, or nil. +func (room Room) GetStateEvent(eventType string, stateKey string) *Event { + stateEventMap := room.State[eventType] + event := stateEventMap[stateKey] + return event +} + +// GetMembershipState returns the membership state of the given user ID in this room. If there is +// no entry for this member, 'leave' is returned for consistency with left users. +func (room Room) GetMembershipState(userID string) string { + state := "leave" + event := room.GetStateEvent("m.room.member", userID) + if event != nil { + membershipState, found := event.Content["membership"] + if found { + mState, isString := membershipState.(string) + if isString { + state = mState + } + } + } + return state +} + +// NewRoom creates a new Room with the given ID +func NewRoom(roomID string) *Room { + // Init the State map and return a pointer to the Room + return &Room{ + ID: roomID, + State: make(map[string]map[string]*Event), + } +} |