diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/CHANGELOG.md b/src/Symfony/Component/Notifier/Bridge/Telegram/CHANGELOG.md index ec7a2a9e8ba35..760d2bb44036a 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/CHANGELOG.md +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG --- * Add support to answer callback queries +* Add support for `sendPhoto` API method 5.3 --- diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/README.md b/src/Symfony/Component/Notifier/Bridge/Telegram/README.md index a142a59dd7fe3..333b536c454a2 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/README.md +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/README.md @@ -47,6 +47,35 @@ $chatMessage->options($telegramOptions); $chatter->send($chatMessage); ``` +Adding Photo to a Message +------------------------- + +With a Telegram message, you can use the `TelegramOptions` class to add +[message options](https://core.telegram.org/bots/api). + +```php +use Symfony\Component\Notifier\Bridge\Telegram\Reply\Markup\Button\InlineKeyboardButton; +use Symfony\Component\Notifier\Bridge\Telegram\Reply\Markup\InlineKeyboardMarkup; +use Symfony\Component\Notifier\Bridge\Telegram\TelegramOptions; +use Symfony\Component\Notifier\Message\ChatMessage; + +$chatMessage = new ChatMessage('Photo Caption'); + +// Create Telegram options +$telegramOptions = (new TelegramOptions()) + ->chatId('@symfonynotifierdev') + ->parseMode('MarkdownV2') + ->disableWebPagePreview(true) + ->hasSpoiler(true) + ->protectContent(true) + ->photo('https://symfony.com/favicons/android-chrome-192x192.png'); + +// Add the custom options to the chat message and send the message +$chatMessage->options($telegramOptions); + +$chatter->send($chatMessage); +``` + Updating Messages ----------------- diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramOptions.php b/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramOptions.php index aa4604d378fb5..f794620de4a00 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramOptions.php +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramOptions.php @@ -80,6 +80,38 @@ public function disableNotification(bool $bool): static return $this; } + /** + * @return $this + */ + public function protectContent(bool $bool): static + { + $this->options['protect_content'] = $bool; + + return $this; + } + + /** + * Work only when photo option is defined. + * + * @return $this + */ + public function hasSpoiler(bool $bool): static + { + $this->options['has_spoiler'] = $bool; + + return $this; + } + + /** + * @return $this + */ + public function photo(string $url): static + { + $this->options['photo'] = $url; + + return $this; + } + /** * @return $this */ diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php b/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php index a3f60009f30e9..ad8763371d5ad 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php @@ -84,6 +84,11 @@ protected function doSend(MessageInterface $message): SentMessage $options['text'] = preg_replace('/([_*\[\]()~`>#+\-=|{}.!])/', '\\\\$1', $message->getSubject()); } + if (isset($options['photo'])) { + $options['caption'] = $options['text']; + unset($options['text']); + } + $endpoint = sprintf('https://%s/bot%s/%s', $this->getEndpoint(), $this->token, $this->getPath($options)); $response = $this->client->request('POST', $endpoint, [ @@ -117,6 +122,7 @@ private function getPath(array $options): string return match (true) { isset($options['message_id']) => 'editMessageText', isset($options['callback_query_id']) => 'answerCallbackQuery', + isset($options['photo']) => 'sendPhoto', default => 'sendMessage', }; } diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/Tests/TelegramTransportTest.php b/src/Symfony/Component/Notifier/Bridge/Telegram/Tests/TelegramTransportTest.php index bdefee4a79c0e..83251aa4f9c29 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/Tests/TelegramTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/Tests/TelegramTransportTest.php @@ -330,4 +330,85 @@ public function testSendWithMarkdownShouldEscapeSpecialCharacters() $transport->send(new ChatMessage('I contain special characters _ * [ ] ( ) ~ ` > # + - = | { } . ! to send.')); } + + public function testSendPhotoWithOptions() + { + $response = $this->createMock(ResponseInterface::class); + $response->expects($this->exactly(2)) + ->method('getStatusCode') + ->willReturn(200); + + $content = <<expects($this->once()) + ->method('getContent') + ->willReturn($content) + ; + + $expectedBody = [ + 'photo' => 'https://image.ur.l/', + 'has_spoiler' => true, + 'chat_id' => 'testChannel', + 'parse_mode' => 'MarkdownV2', + 'caption' => 'testMessage', + ]; + + $client = new MockHttpClient(function (string $method, string $url, array $options = []) use ($response, $expectedBody): ResponseInterface { + $this->assertStringEndsWith('/sendPhoto', $url); + $this->assertSame($expectedBody, json_decode($options['body'], true)); + + return $response; + }); + + $transport = self::createTransport($client, 'testChannel'); + + $messageOptions = new TelegramOptions(); + $messageOptions + ->photo('https://image.ur.l/') + ->hasSpoiler(true) + ; + + $sentMessage = $transport->send(new ChatMessage('testMessage', $messageOptions)); + + $this->assertEquals(1, $sentMessage->getMessageId()); + $this->assertEquals('telegram://api.telegram.org?channel=testChannel', $sentMessage->getTransport()); + } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy