mirror of https://github.com/matrix-org/gomatrix
Add AS membership list APIs
Added function to get a user's avatar image URL
This commit is contained in:
parent
bb7c146092
commit
aa984fcabc
38
client.go
38
client.go
|
@ -397,6 +397,24 @@ func (cli *Client) SetDisplayName(displayName string) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAvatarURL gets the user's avatar URL. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-avatar-url
|
||||||
|
func (cli *Client) GetAvatarURL() (url string, err error) {
|
||||||
|
urlPath := cli.BuildURL("profile", cli.UserID, "avatar_url")
|
||||||
|
s := struct {
|
||||||
|
AvatarURL string `json:"avatar_url"`
|
||||||
|
}{}
|
||||||
|
res, err := cli.MakeRequest("GET", urlPath, &s, nil)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = json.Unmarshal(res, &s); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.AvatarURL, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SendMessageEvent sends a message event into a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid
|
// SendMessageEvent sends a message event into a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid
|
||||||
// contentJSON should be a pointer to something that can be encoded as JSON using json.Marshal.
|
// contentJSON should be a pointer to something that can be encoded as JSON using json.Marshal.
|
||||||
func (cli *Client) SendMessageEvent(roomID string, eventType string, contentJSON interface{}) (resp *RespSendEvent, err error) {
|
func (cli *Client) SendMessageEvent(roomID string, eventType string, contentJSON interface{}) (resp *RespSendEvent, err error) {
|
||||||
|
@ -539,6 +557,26 @@ func (cli *Client) UploadToContentRepo(content io.Reader, contentType string, co
|
||||||
return &m, nil
|
return &m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// JoinedMembers returns a map of joined room members. See TODO-SPEC. https://github.com/matrix-org/synapse/pull/1680
|
||||||
|
//
|
||||||
|
// In general, usage of this API is discouraged in favour of /sync, as calling this API can race with incoming membership changes.
|
||||||
|
// This API is primarily designed for application services which may want to efficiently look up joined members in a room.
|
||||||
|
func (cli *Client) JoinedMembers(roomID string) (resp *RespJoinedMembers, err error) {
|
||||||
|
u := cli.BuildURL("rooms", roomID, "joined_members")
|
||||||
|
_, err = cli.MakeRequest("GET", u, nil, &resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// JoinedRooms returns a list of rooms which the client is joined to. See TODO-SPEC. https://github.com/matrix-org/synapse/pull/1680
|
||||||
|
//
|
||||||
|
// In general, usage of this API is discouraged in favour of /sync, as calling this API can race with incoming membership changes.
|
||||||
|
// This API is primarily designed for application services which may want to efficiently look up joined rooms.
|
||||||
|
func (cli *Client) JoinedRooms() (resp *RespJoinedRooms, err error) {
|
||||||
|
u := cli.BuildURL("joined_rooms")
|
||||||
|
_, err = cli.MakeRequest("GET", u, nil, &resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func txnID() string {
|
func txnID() string {
|
||||||
return "go" + strconv.FormatInt(time.Now().UnixNano(), 10)
|
return "go" + strconv.FormatInt(time.Now().UnixNano(), 10)
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,32 @@ func TestClient_LeaveRoom(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestClient_GetAvatarUrl(t *testing.T) {
|
||||||
|
// cli, _ := NewClient("https://matrix.org", "@_neb_google:matrix.org", "MDAxOGxvY2F0aW9uIG1hdHJpeC5vcmcKMDAxM2lkZW50aWZpZXIga2V5CjAwMTBjaWQgZ2VuID0gMQowMDJhY2lkIHVzZXJfaWQgPSBAX25lYl9nb29nbGU6bWF0cml4Lm9yZwowMDE2Y2lkIHR5cGUgPSBhY2Nlc3MKMDAyMWNpZCBub25jZSA9IDpUWHlDZ01KLnU3NFNWeFMKMDAyZnNpZ25hdHVyZSDSP25lx3Mm4JQ-eC5a5pTHxXpHYGFg55bYQNyEpofc2wo")
|
||||||
|
// url, err := cli.GetAvatarURL()
|
||||||
|
// if err != nil {
|
||||||
|
// t.Fatalf("Failed to get avatar URL: %s", err.Error())
|
||||||
|
// }
|
||||||
|
// fmt.Printf("URL: %s\n", url)
|
||||||
|
|
||||||
|
cli := mockClient(func(req *http.Request) (*http.Response, error) {
|
||||||
|
if req.Method == "GET" && req.URL.Path == "/_matrix/client/r0/profile/@user:test.gomatrix.org/avatar_url" {
|
||||||
|
return &http.Response{
|
||||||
|
StatusCode: 200,
|
||||||
|
Body: ioutil.NopCloser(bytes.NewBufferString(`{"avatar_url":"mxc://matrix.org/iJaUjkshgdfsdkjfn"}`)),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unhandled URL: %s", req.URL.Path)
|
||||||
|
})
|
||||||
|
|
||||||
|
if response, err := cli.GetAvatarURL(); err != nil {
|
||||||
|
t.Fatalf("GetAvatarURL: Got error: %s", err.Error())
|
||||||
|
} else if response == "" {
|
||||||
|
t.Fatal("GetAvatarURL: Got empty response")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func TestClient_StateEvent(t *testing.T) {
|
func TestClient_StateEvent(t *testing.T) {
|
||||||
cli := mockClient(func(req *http.Request) (*http.Response, error) {
|
cli := mockClient(func(req *http.Request) (*http.Response, error) {
|
||||||
if req.Method == "GET" && req.URL.Path == "/_matrix/client/r0/rooms/!foo:bar/state/m.room.name" {
|
if req.Method == "GET" && req.URL.Path == "/_matrix/client/r0/rooms/!foo:bar/state/m.room.name" {
|
||||||
|
|
13
responses.go
13
responses.go
|
@ -45,6 +45,19 @@ type RespBanUser struct{}
|
||||||
// RespUnbanUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban
|
// RespUnbanUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban
|
||||||
type RespUnbanUser struct{}
|
type RespUnbanUser struct{}
|
||||||
|
|
||||||
|
// RespJoinedRooms is the JSON response for TODO-SPEC https://github.com/matrix-org/synapse/pull/1680
|
||||||
|
type RespJoinedRooms struct {
|
||||||
|
JoinedRooms []string `json:"joined_rooms"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RespJoinedMembers is the JSON response for TODO-SPEC https://github.com/matrix-org/synapse/pull/1680
|
||||||
|
type RespJoinedMembers struct {
|
||||||
|
Joined map[string]struct {
|
||||||
|
DisplayName *string `json:"display_name"`
|
||||||
|
AvatarURL *string `json:"avatar_url"`
|
||||||
|
} `json:"joined"`
|
||||||
|
}
|
||||||
|
|
||||||
// RespSendEvent is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid
|
// RespSendEvent is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid
|
||||||
type RespSendEvent struct {
|
type RespSendEvent struct {
|
||||||
EventID string `json:"event_id"`
|
EventID string `json:"event_id"`
|
||||||
|
|
Loading…
Reference in New Issue