diff --git a/eduserver/api/input.go b/eduserver/api/input.go index f8599e1cc..342764972 100644 --- a/eduserver/api/input.go +++ b/eduserver/api/input.go @@ -75,6 +75,17 @@ type InputReceiptEventRequest struct { // InputReceiptEventResponse is a response to InputReceiptEventRequest type InputReceiptEventResponse struct{} +// InputPresenceRequest is a request to EDUServerInputAPI +type InputPresenceRequest struct { + UserID string `json:"user_id"` + Status string `json:"status"` + StatusMsg string `json:"status_msg"` + Timestamp gomatrixserverlib.Timestamp `json:"timestamp"` +} + +// InputPresenceResponse is a response to InputPresenceRequest +type InputPresenceResponse struct{} + // EDUServerInputAPI is used to write events to the typing server. type EDUServerInputAPI interface { InputTypingEvent( @@ -94,4 +105,10 @@ type EDUServerInputAPI interface { request *InputReceiptEventRequest, response *InputReceiptEventResponse, ) error + + InputPresence( + ctx context.Context, + request *InputPresenceRequest, + response *InputPresenceResponse, + ) error } diff --git a/eduserver/api/output.go b/eduserver/api/output.go index 650458a29..b36e06e0c 100644 --- a/eduserver/api/output.go +++ b/eduserver/api/output.go @@ -85,3 +85,11 @@ type FederationReceiptData struct { Data ReceiptTS `json:"data"` EventIDs []string `json:"event_ids"` } + +// OutputPresence is an entry in the presence output kafka log +type OutputPresence struct { + UserID string `json:"user_id"` + Status string `json:"status"` + StatusMsg string `json:"status_msg"` + Timestamp gomatrixserverlib.Timestamp `json:"timestamp"` +} diff --git a/eduserver/api/wrapper.go b/eduserver/api/wrapper.go index 7907f4d39..470638e4f 100644 --- a/eduserver/api/wrapper.go +++ b/eduserver/api/wrapper.go @@ -86,3 +86,20 @@ func SendReceipt( response := InputReceiptEventResponse{} return eduAPI.InputReceiptEvent(ctx, &request, &response) } + +// SetPresence sends a presence change to the EDU Server +func SetPresence( + ctx context.Context, + eduAPI EDUServerInputAPI, + userID, status, statusMsg string, + timestamp gomatrixserverlib.Timestamp, +) error { + request := InputPresenceRequest{ + UserID: userID, + Status: status, + StatusMsg: statusMsg, + Timestamp: timestamp, + } + response := InputPresenceResponse{} + return eduAPI.InputPresence(ctx, &request, &response) +}