From 69beb7e658cf2a9e8748e25a1cf1af73ea311c9f Mon Sep 17 00:00:00 2001 From: qua3k Date: Sat, 1 Jan 2022 09:08:27 -0800 Subject: [PATCH] Add `/context` API --- client.go | 22 ++++++++++++++++++++++ responses.go | 10 ++++++++++ 2 files changed, 32 insertions(+) diff --git a/client.go b/client.go index 64965590..d9da4ee1 100644 --- a/client.go +++ b/client.go @@ -1296,6 +1296,28 @@ func (cli *Client) Messages(roomID id.RoomID, from, to string, dir rune, limit i return } +// Context returns a number of events that happened just before and after the +// specified event. It use pagination query parameters to paginate history in +// the room. +// See https://spec.matrix.org/v1.1/client-server-api/#get_matrixclientv3roomsroomidcontexteventid +func (cli *Client) Context(roomID id.RoomID, eventID id.EventID, filter *Filter, limit int) (resp *RespContext, err error) { + query := map[string]string{} + if filter != nil { + filterJSON, err := json.Marshal(filter) + if err != nil { + return nil, err + } + query["filter"] = string(filterJSON) + } + if limit != 0 { + query["limit"] = strconv.Itoa(limit) + } + + urlPath := cli.BuildURLWithQuery(URLPath{"rooms", roomID, "context", eventID}, query) + _, err = cli.MakeRequest("GET", urlPath, nil, &resp) + return +} + func (cli *Client) GetEvent(roomID id.RoomID, eventID id.EventID) (resp *event.Event, err error) { urlPath := cli.BuildURL("rooms", roomID, "event", eventID) _, err = cli.MakeRequest("GET", urlPath, nil, &resp) diff --git a/responses.go b/responses.go index 1ca1197c..35d99aa1 100644 --- a/responses.go +++ b/responses.go @@ -78,6 +78,16 @@ type RespMessages struct { End string `json:"end"` } +// RespContext is the JSON response for https://spec.matrix.org/v1.1/client-server-api/#get_matrixclientv3roomsroomidcontexteventid +type RespContext struct { + End string `json:"end"` + Event *event.Event `json:"event"` + EventsAfter []*event.Event `json:"events_after"` + EventsBefore []*event.Event `json:"events_before"` + Start string `json:"start"` + State []*event.Event `json:"state"` +} + // 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 { EventID id.EventID `json:"event_id"`