Skip to content

Commit ced9262

Browse files
committed
feat: #465 add Link Preview Customization support as defined in api 7.0
1 parent 8b75285 commit ced9262

File tree

8 files changed

+369
-66
lines changed

8 files changed

+369
-66
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ All Notable changes to `PHP Telegram Bot Api` will be documented in this file
2020
- Add `\TelegramBot\Api\Types\Update::$messageReactionCount` field
2121
- Add `\TelegramBot\Api\BotApi::setMessageReaction` api method
2222

23+
### Deprecated
24+
- Deprecate `reply_to_message_id` and `allow_sending_without_reply` parameters to `\TelegramBot\Api\BotApi` methods. Use `reply_parameters` instead.
25+
- Deprecate `disable_web_page_preview` parameter to `\TelegramBot\Api\BotApi` methods. Use `link_preview_options` instead.
26+
2327
## 2.5.0 - 2023-08-09
2428

2529
### Added

src/BaseType.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public static function validate($data)
4040
}
4141

4242
$missingParams = implode(', ', array_diff(static::$requiredParams, array_keys($data)));
43-
throw new InvalidArgumentException(sprintf("Validation failed. Missing required parameters: %s", $missingParams));
43+
throw new InvalidArgumentException(sprintf('Validation failed. Missing required parameters: %s', $missingParams));
4444
}
4545

4646
/**

src/BotApi.php

Lines changed: 315 additions & 53 deletions
Large diffs are not rendered by default.

src/Types/Inline/InputMessageContent/Text.php

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
namespace TelegramBot\Api\Types\Inline\InputMessageContent;
1010

1111
use TelegramBot\Api\TypeInterface;
12+
use TelegramBot\Api\Types\LinkPreviewOptions;
13+
use TelegramBot\Api\Types\ArrayOfMessageEntity;
1214
use TelegramBot\Api\Types\Inline\InputMessageContent;
1315

1416
/**
@@ -35,7 +37,9 @@ class Text extends InputMessageContent implements TypeInterface
3537
protected static $map = [
3638
'message_text' => true,
3739
'parse_mode' => true,
38-
'disable_web_page_preview' => true,
40+
'entities' => ArrayOfMessageEntity::class,
41+
'disable_web_page_preview' => true, // @todo: remove as deprecated with bot api 7.0
42+
'link_preview_options' => LinkPreviewOptions::class
3943
];
4044

4145
/**
@@ -54,23 +58,42 @@ class Text extends InputMessageContent implements TypeInterface
5458
protected $parseMode;
5559

5660
/**
61+
* @deprecated use $linkPreviewOptions instead
5762
* Optional. Disables link previews for links in the sent message
5863
*
5964
* @var bool|null
6065
*/
6166
protected $disableWebPagePreview;
6267

68+
/**
69+
* Link preview generation options for the message
70+
*
71+
* @var LinkPreviewOptions|null
72+
*/
73+
protected $linkPreviewOptions;
74+
6375
/**
6476
* Text constructor.
77+
*
6578
* @param string $messageText
6679
* @param string|null $parseMode
6780
* @param bool $disableWebPagePreview
81+
* @param LinkPreviewOptions|null $linkPreviewOptions Link preview generation options for the message.
6882
*/
69-
public function __construct($messageText, $parseMode = null, $disableWebPagePreview = false)
83+
public function __construct($messageText, $parseMode = null, $disableWebPagePreview = false, $linkPreviewOptions = null)
7084
{
7185
$this->messageText = $messageText;
7286
$this->parseMode = $parseMode;
7387
$this->disableWebPagePreview = $disableWebPagePreview;
88+
89+
if (null === $linkPreviewOptions && false !== $disableWebPagePreview) {
90+
@trigger_error('setting $disableWebPagePreview is now deprecated use $linkPreviewOptions instead', E_USER_DEPRECATED);
91+
92+
$this->linkPreviewOptions = new LinkPreviewOptions();
93+
$this->linkPreviewOptions->map([
94+
'is_disabled' => $disableWebPagePreview
95+
]);
96+
}
7497
}
7598

7699
/**
@@ -126,4 +149,21 @@ public function setDisableWebPagePreview($disableWebPagePreview)
126149
{
127150
$this->disableWebPagePreview = $disableWebPagePreview;
128151
}
152+
153+
/**
154+
* @return LinkPreviewOptions|null
155+
*/
156+
public function getLinkPreviewOptions()
157+
{
158+
return $this->linkPreviewOptions;
159+
}
160+
161+
/**
162+
* @param LinkPreviewOptions|null $linkPreviewOptions
163+
* @return void
164+
*/
165+
public function setLinkPreviewOptions($linkPreviewOptions)
166+
{
167+
$this->linkPreviewOptions = $linkPreviewOptions;
168+
}
129169
}

tests/Types/ArrayOfReactionTypeTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ public function testFromResponse()
2323
]);
2424

2525
$expected = [
26-
ReactionTypeEmoji::fromResponse([
27-
'emoji' => '👍',
28-
'type' => 'emoji'
29-
]),
26+
ReactionTypeEmoji::fromResponse([
27+
'emoji' => '👍',
28+
'type' => 'emoji'
29+
]),
3030
ReactionTypeCustomEmoji::fromResponse([
3131
'custom_emoji_id' => 'custom_emoji_123',
3232
'type' => 'custom_emoji'

tests/Types/MessageReactionCountUpdatedTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ public static function getFullResponse()
3636
];
3737
}
3838

39-
4039
protected function assertMinItem($item)
4140
{
4241
$this->assertEquals(ChatTest::createMinInstance(), $item->getChat());

tests/Types/MessageReactionUpdatedTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public static function getFullResponse()
3939
ReactionTypeEmojiTest::getMinResponse()
4040
],
4141
'new_reaction' => [
42-
ReactionTypeCustomEmojiTest::getMinResponse()
42+
ReactionTypeCustomEmojiTest::getMinResponse()
4343
]
4444
];
4545
}
@@ -50,7 +50,7 @@ protected function assertMinItem($item)
5050
$this->assertEquals(1, $item->getMessageId());
5151
$this->assertEquals(1682343644, $item->getDate());
5252
$this->assertEquals([ReactionTypeEmojiTest::createMinInstance()], $item->getOldReaction());
53-
$this->assertEquals([ReactionTypeCustomEmojiTest::createMinInstance()],$item->getNewReaction());
53+
$this->assertEquals([ReactionTypeCustomEmojiTest::createMinInstance()], $item->getNewReaction());
5454

5555
$this->assertNull($item->getUser());
5656
$this->assertNull($item->getActorChat());
@@ -63,6 +63,6 @@ protected function assertFullItem($item)
6363
$this->assertEquals(UserTest::createMinInstance(), $item->getUser());
6464
$this->assertEquals(ChatTest::createMinInstance(), $item->getActorChat());
6565
$this->assertEquals([ReactionTypeEmojiTest::createMinInstance()], $item->getOldReaction());
66-
$this->assertEquals([ReactionTypeCustomEmojiTest::createMinInstance()],$item->getNewReaction());
66+
$this->assertEquals([ReactionTypeCustomEmojiTest::createMinInstance()], $item->getNewReaction());
6767
}
6868
}

tests/Types/UpdateTest.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
namespace TelegramBot\Api\Test\Types;
44

55
use TelegramBot\Api\Test\AbstractTypeTest;
6-
use TelegramBot\Api\Types\MessageReactionUpdated;
7-
use TelegramBot\Api\Types\MessageReactionCountUpdated;
86
use TelegramBot\Api\Test\Types\Inline\ChosenInlineResultTest;
97
use TelegramBot\Api\Test\Types\Inline\InlineQueryTest;
108
use TelegramBot\Api\Test\Types\Payments\Query\PreCheckoutQueryTest;

0 commit comments

Comments
 (0)