aboutsummaryrefslogtreecommitdiff
path: root/matrix/room/member.go
diff options
context:
space:
mode:
Diffstat (limited to 'matrix/room/member.go')
-rw-r--r--matrix/room/member.go28
1 files changed, 22 insertions, 6 deletions
diff --git a/matrix/room/member.go b/matrix/room/member.go
index 3b3a30c..4af20a6 100644
--- a/matrix/room/member.go
+++ b/matrix/room/member.go
@@ -20,18 +20,34 @@ import (
"maunium.net/go/gomatrix"
)
+type Membership string
+
+// The allowed membership states as specified in spec section 10.5.5.
+const (
+ MembershipJoin Membership = "join"
+ MembershipLeave Membership = "leave"
+ MembershipInvite Membership = "invite"
+ MembershipKnock Membership = "knock"
+)
+
+// Member represents a member in a room.
type Member struct {
- UserID string `json:"-"`
- Membership string `json:"membership"`
- DisplayName string `json:"displayname"`
- AvatarURL string `json:"avatar_url"`
+ // The MXID of the member.
+ UserID string `json:"-"`
+ // The membership status. Defaults to leave.
+ Membership Membership `json:"membership"`
+ // The display name of the user. Defaults to the user ID.
+ DisplayName string `json:"displayname"`
+ // The avatar URL of the user. Defaults to an empty string.
+ AvatarURL string `json:"avatar_url"`
}
+// eventToRoomMember converts a m.room.member state event into a Member object.
func eventToRoomMember(userID string, event *gomatrix.Event) *Member {
if event == nil {
return &Member{
UserID: userID,
- Membership: "leave",
+ Membership: MembershipLeave,
}
}
membership, _ := event.Content["membership"].(string)
@@ -44,7 +60,7 @@ func eventToRoomMember(userID string, event *gomatrix.Event) *Member {
return &Member{
UserID: userID,
- Membership: membership,
+ Membership: Membership(membership),
DisplayName: displayName,
AvatarURL: avatarURL,
}