From b02d5c5782034903b6dcfb12a429635a8ee1c065 Mon Sep 17 00:00:00 2001 From: Yuriy Vilks Date: Fri, 22 Sep 2023 02:02:47 +0300 Subject: [PATCH] [Notifier] Add options to Telegram Bridge for sending Location --- .../Notifier/Bridge/Telegram/CHANGELOG.md | 5 ++ .../Notifier/Bridge/Telegram/README.md | 26 ++++++++ .../Bridge/Telegram/TelegramOptions.php | 11 ++++ .../Bridge/Telegram/TelegramTransport.php | 2 +- .../Telegram/Tests/TelegramTransportTest.php | 66 +++++++++++++++++++ 5 files changed, 109 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/CHANGELOG.md b/src/Symfony/Component/Notifier/Bridge/Telegram/CHANGELOG.md index 760d2bb44036a..83ff40ef257bc 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/CHANGELOG.md +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +6.4 +--- + +* Add support for `sendLocation` API method + 6.3 --- diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/README.md b/src/Symfony/Component/Notifier/Bridge/Telegram/README.md index 333b536c454a2..8e6b81904565c 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/README.md +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/README.md @@ -76,6 +76,32 @@ $chatMessage->options($telegramOptions); $chatter->send($chatMessage); ``` +Adding Location 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(''); + +// Create Telegram options +$telegramOptions = (new TelegramOptions()) + ->chatId('@symfonynotifierdev') + ->parseMode('MarkdownV2') + ->location(48.8566, 2.3522); + +// 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 f794620de4a00..e40f4b2fd95e7 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramOptions.php +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramOptions.php @@ -156,4 +156,15 @@ public function answerCallbackQuery(string $callbackQueryId, bool $showAlert = f return $this; } + + /** + * @return $this + */ + public function location(float $latitude, float $longitude): static + { + $this->options['latitude'] = $latitude; + $this->options['longitude'] = $longitude; + + return $this; + } } diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php b/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php index 9bb25bee5f587..bd21234a1b21a 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/TelegramTransport.php @@ -11,7 +11,6 @@ namespace Symfony\Component\Notifier\Bridge\Telegram; -use Symfony\Component\Notifier\Exception\LogicException; use Symfony\Component\Notifier\Exception\TransportException; use Symfony\Component\Notifier\Exception\UnsupportedMessageTypeException; use Symfony\Component\Notifier\Message\ChatMessage; @@ -116,6 +115,7 @@ private function getPath(array $options): string isset($options['message_id']) => 'editMessageText', isset($options['callback_query_id']) => 'answerCallbackQuery', isset($options['photo']) => 'sendPhoto', + (isset($options['longitude']) && isset($options['latitude'])) => 'sendLocation', 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 83251aa4f9c29..08ce8cc07d6f6 100644 --- a/src/Symfony/Component/Notifier/Bridge/Telegram/Tests/TelegramTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/Telegram/Tests/TelegramTransportTest.php @@ -411,4 +411,70 @@ public function testSendPhotoWithOptions() $this->assertEquals(1, $sentMessage->getMessageId()); $this->assertEquals('telegram://api.telegram.org?channel=testChannel', $sentMessage->getTransport()); } + + public function testSendLocationWithOptions() + { + $response = $this->createMock(ResponseInterface::class); + $response->expects($this->exactly(2)) + ->method('getStatusCode') + ->willReturn(200); + + $content = <<expects($this->once()) + ->method('getContent') + ->willReturn($content) + ; + + $expectedBody = [ + 'latitude' => 48.8566, + 'longitude' => 2.3522, + 'chat_id' => 'testChannel', + 'parse_mode' => 'MarkdownV2', + ]; + + $client = new MockHttpClient(function (string $method, string $url, array $options = []) use ($response, $expectedBody): ResponseInterface { + $this->assertStringEndsWith('/sendLocation', $url); + $this->assertSame($expectedBody, json_decode($options['body'], true)); + + return $response; + }); + + $transport = self::createTransport($client, 'testChannel'); + + $messageOptions = new TelegramOptions(); + $messageOptions + ->location(48.8566, 2.3522) + ; + + $sentMessage = $transport->send(new ChatMessage('', $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