/**
* Send image to a user
*
* @var int $chatId
* @var resource $photo
* @var string|null $caption
* @var int|null $replyToMessageId
* @var mixed $replyMarkup
*
* @return \Generator
*/
public function sendPhoto(int $chatId, $photo, string $caption = null, int $replyToMessageId = null, $replyMarkup = null) : \Generator
{
$params = ['chat_id' => $chatId, 'caption' => $caption, 'replyToMessageId' => $replyToMessageId];
$imageContentPipe = new ReadablePipe($photo);
$boundary = uniqid();
$mem = new MemoryStream();
$contentLength = 0;
$contentLength += (yield $mem->write("--{$boundary}\r\nContent-Disposition: form-data; name=\"photo\"; filename=\"example1.jpg\"\r\n\r\n"));
$contentLength += (yield pipe($imageContentPipe, $mem, false));
$contentLength += (yield $mem->end("\r\n--{$boundary}--"));
$url = $this->buildUrl('/sendPhoto', $params);
$headers = ['Content-type' => "multipart/form-data, boundary={$boundary}", 'Content-Length' => $contentLength];
$request = new Request('POST', $url, $headers, $mem);
$response = (yield $this->httpClient->send($request, []));
$body = (yield $this->getResponseBody($response));
$body = json_decode($body, true);
(yield new Entity\Message($body['result']));
}