postReceipt method

Future<void> postReceipt(
  1. String roomId,
  2. ReceiptType receiptType,
  3. String eventId, {
  4. String? threadId,
})

This API updates the marker for the given receipt type to the event ID specified.

roomId The room in which to send the event.

receiptType The type of receipt to send. This can also be m.fully_read as an alternative to /read_markers.

Note that m.fully_read does not appear under m.receipt: this endpoint effectively calls /read_markers internally when presented with a receipt type of m.fully_read.

eventId The event ID to acknowledge up to.

threadId The root thread event's ID (or main) for which thread this receipt is intended to be under. If not specified, the read receipt is unthreaded (default).

Implementation

Future<void> postReceipt(
  String roomId,
  ReceiptType receiptType,
  String eventId, {
  String? threadId,
}) async {
  final requestUri = Uri(
    path:
        '_matrix/client/v3/rooms/${Uri.encodeComponent(roomId)}/receipt/${Uri.encodeComponent(receiptType.name)}/${Uri.encodeComponent(eventId)}',
  );
  final request = Request('POST', baseUri!.resolveUri(requestUri));
  request.headers['authorization'] = 'Bearer ${bearerToken!}';
  request.headers['content-type'] = 'application/json';
  request.bodyBytes = utf8.encode(
    jsonEncode({
      if (threadId != null) 'thread_id': threadId,
    }),
  );
  final response = await httpClient.send(request);
  final responseBody = await response.stream.toBytes();
  if (response.statusCode != 200) unexpectedResponse(response, responseBody);
  final responseString = utf8.decode(responseBody);
  final json = jsonDecode(responseString);
  return ignore(json);
}