mirror of
https://github.com/BushlanovDev/max-bot-api-client-php.git
synced 2026-08-26 18:47:07 +00:00
Removed deprecated ReplyKeyboardAttachment #27
This commit is contained in:
@@ -13,7 +13,6 @@ enum AttachmentType: string
|
||||
case Sticker = 'sticker';
|
||||
case Contact = 'contact';
|
||||
case InlineKeyboard = 'inline_keyboard';
|
||||
case ReplyKeyboard = 'reply_keyboard';
|
||||
case Location = 'location';
|
||||
case Share = 'share';
|
||||
case Data = 'data';
|
||||
|
||||
+2
-12
@@ -29,7 +29,6 @@ use BushlanovDev\MaxMessengerBot\Models\Attachments\FileAttachment;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\InlineKeyboardAttachment;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\LocationAttachment;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\PhotoAttachment;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\ReplyKeyboardAttachment;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\ShareAttachment;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\StickerAttachment;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\VideoAttachment;
|
||||
@@ -242,14 +241,6 @@ readonly class ModelFactory
|
||||
public function createAttachment(array $data): AbstractAttachment
|
||||
{
|
||||
$attachmentType = AttachmentType::tryFrom($data['type'] ?? '');
|
||||
if ($attachmentType === AttachmentType::ReplyKeyboard
|
||||
&& isset($data['buttons']) && is_array($data['buttons'])) {
|
||||
$data['buttons'] = array_map(
|
||||
fn($rowOfButtons) => array_map([$this, 'createReplyButton'], $rowOfButtons),
|
||||
$data['buttons'],
|
||||
);
|
||||
}
|
||||
|
||||
if ($attachmentType === AttachmentType::InlineKeyboard
|
||||
&& isset($data['payload']['buttons']) && is_array($data['payload']['buttons'])) {
|
||||
$data['payload']['buttons'] = array_map(
|
||||
@@ -259,8 +250,6 @@ readonly class ModelFactory
|
||||
}
|
||||
|
||||
return match ($attachmentType) {
|
||||
AttachmentType::Data => DataAttachment::fromArray($data),
|
||||
AttachmentType::Share => ShareAttachment::fromArray($data),
|
||||
AttachmentType::Image => PhotoAttachment::fromArray($data),
|
||||
AttachmentType::Video => VideoAttachment::fromArray($data),
|
||||
AttachmentType::Audio => AudioAttachment::fromArray($data),
|
||||
@@ -268,8 +257,9 @@ readonly class ModelFactory
|
||||
AttachmentType::Sticker => StickerAttachment::fromArray($data),
|
||||
AttachmentType::Contact => ContactAttachment::fromArray($data),
|
||||
AttachmentType::InlineKeyboard => InlineKeyboardAttachment::fromArray($data),
|
||||
AttachmentType::ReplyKeyboard => ReplyKeyboardAttachment::fromArray($data),
|
||||
AttachmentType::Location => LocationAttachment::fromArray($data),
|
||||
AttachmentType::Share => ShareAttachment::fromArray($data),
|
||||
AttachmentType::Data => DataAttachment::fromArray($data),
|
||||
default => throw new LogicException('Unknown or unsupported attachment type: ' . ($data['type'] ?? 'none')),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads;
|
||||
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\AbstractReplyButton;
|
||||
|
||||
final readonly class ReplyKeyboardAttachmentRequestPayload extends AbstractAttachmentRequestPayload
|
||||
{
|
||||
/**
|
||||
* @param AbstractReplyButton[][] $buttons Two-dimensional array of buttons.
|
||||
* @param bool $direct Applicable only for chats.
|
||||
* @param int|null $directUserId If set, reply keyboard will only be shown to this participant.
|
||||
*/
|
||||
public function __construct(
|
||||
public array $buttons,
|
||||
public bool $direct = false,
|
||||
public ?int $directUserId = null,
|
||||
) {
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace BushlanovDev\MaxMessengerBot\Models\Attachments;
|
||||
|
||||
use BushlanovDev\MaxMessengerBot\Enums\AttachmentType;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\AbstractReplyButton;
|
||||
|
||||
final readonly class ReplyKeyboardAttachment extends AbstractAttachment
|
||||
{
|
||||
/**
|
||||
* @param AbstractReplyButton[][] $buttons
|
||||
*/
|
||||
public function __construct(public array $buttons)
|
||||
{
|
||||
parent::__construct(AttachmentType::ReplyKeyboard);
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace BushlanovDev\MaxMessengerBot\Models\Attachments\Requests;
|
||||
|
||||
use BushlanovDev\MaxMessengerBot\Enums\AttachmentType;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\AbstractReplyButton;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\ReplyKeyboardAttachmentRequestPayload;
|
||||
|
||||
final readonly class ReplyKeyboardAttachmentRequest extends AbstractAttachmentRequest
|
||||
{
|
||||
/**
|
||||
* @param AbstractReplyButton[][] $buttons
|
||||
* @param bool $direct
|
||||
* @param int|null $directUserId
|
||||
*/
|
||||
public function __construct(
|
||||
array $buttons,
|
||||
bool $direct = false,
|
||||
?int $directUserId = null
|
||||
) {
|
||||
parent::__construct(
|
||||
AttachmentType::ReplyKeyboard,
|
||||
new ReplyKeyboardAttachmentRequestPayload($buttons, $direct, $directUserId),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,6 @@ use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\PhotoAttachmentPayl
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\PhotoAttachmentRequestPayload;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\ShareAttachmentRequestPayload;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\PhotoAttachment;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\ReplyKeyboardAttachment;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\ShareAttachment;
|
||||
use BushlanovDev\MaxMessengerBot\Models\BotCommand;
|
||||
use BushlanovDev\MaxMessengerBot\Models\BotInfo;
|
||||
@@ -96,7 +95,6 @@ use Psr\Log\LoggerInterface;
|
||||
#[UsesClass(AbstractReplyButton::class)]
|
||||
#[UsesClass(SendContactButton::class)]
|
||||
#[UsesClass(SendMessageButton::class)]
|
||||
#[UsesClass(ReplyKeyboardAttachment::class)]
|
||||
#[UsesClass(AbstractInlineButton::class)]
|
||||
#[UsesClass(ChatButton::class)]
|
||||
#[UsesClass(RequestContactButton::class)]
|
||||
@@ -665,26 +663,6 @@ final class ModelFactoryTest extends TestCase
|
||||
$this->factory->createMarkupElement(['type' => 'brand_new_unsupported_type']);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function createAttachmentCorrectlyHydratesReplyKeyboard(): void
|
||||
{
|
||||
$data = [
|
||||
'type' => 'reply_keyboard',
|
||||
'buttons' => [
|
||||
[['type' => 'message', 'text' => 'Hello']],
|
||||
[['type' => 'user_contact', 'text' => 'My Contact']]
|
||||
]
|
||||
];
|
||||
|
||||
$attachment = $this->factory->createAttachment($data);
|
||||
|
||||
$this->assertInstanceOf(ReplyKeyboardAttachment::class, $attachment);
|
||||
$this->assertCount(2, $attachment->buttons);
|
||||
$this->assertInstanceOf(SendMessageButton::class, $attachment->buttons[0][0]);
|
||||
$this->assertInstanceOf(SendContactButton::class, $attachment->buttons[1][0]);
|
||||
$this->assertSame('My Contact', $attachment->buttons[1][0]->text);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function createReplyButtonThrowsExceptionForUnknownType(): void
|
||||
{
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace BushlanovDev\MaxMessengerBot\Tests\Models\Attachments\Payloads;
|
||||
|
||||
use BushlanovDev\MaxMessengerBot\Enums\Intent;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendContactButton;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendMessageButton;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\ReplyKeyboardAttachmentRequestPayload;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\Attributes\UsesClass;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
#[CoversClass(ReplyKeyboardAttachmentRequestPayload::class)]
|
||||
#[UsesClass(SendMessageButton::class)]
|
||||
#[UsesClass(SendContactButton::class)]
|
||||
final class ReplyKeyboardAttachmentRequestPayloadTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
public function toArrayWithDefaults(): void
|
||||
{
|
||||
$buttons = [
|
||||
[new SendMessageButton('Help')],
|
||||
[new SendContactButton('Share Contact')],
|
||||
];
|
||||
|
||||
$payload = new ReplyKeyboardAttachmentRequestPayload($buttons);
|
||||
|
||||
$expected = [
|
||||
'buttons' => [
|
||||
[
|
||||
[
|
||||
'type' => 'message',
|
||||
'text' => 'Help',
|
||||
'payload' => null,
|
||||
'intent' => 'default',
|
||||
],
|
||||
],
|
||||
[
|
||||
[
|
||||
'type' => 'user_contact',
|
||||
'text' => 'Share Contact',
|
||||
],
|
||||
],
|
||||
],
|
||||
'direct' => false,
|
||||
'direct_user_id' => null,
|
||||
];
|
||||
|
||||
$this->assertEquals($expected, $payload->toArray());
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function toArrayWithAllParameters(): void
|
||||
{
|
||||
$buttons = [
|
||||
[new SendMessageButton('Confirm', 'confirm-action', Intent::Positive)],
|
||||
];
|
||||
|
||||
$payload = new ReplyKeyboardAttachmentRequestPayload(
|
||||
buttons: $buttons,
|
||||
direct: true,
|
||||
directUserId: 987654321,
|
||||
);
|
||||
|
||||
$expected = [
|
||||
'buttons' => [
|
||||
[
|
||||
[
|
||||
'type' => 'message',
|
||||
'text' => 'Confirm',
|
||||
'payload' => 'confirm-action',
|
||||
'intent' => 'positive',
|
||||
],
|
||||
],
|
||||
],
|
||||
'direct' => true,
|
||||
'direct_user_id' => 987654321,
|
||||
];
|
||||
|
||||
$this->assertEquals($expected, $payload->toArray());
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function toArrayWithEmptyButtons(): void
|
||||
{
|
||||
$payload = new ReplyKeyboardAttachmentRequestPayload(buttons: []);
|
||||
|
||||
$expected = [
|
||||
'buttons' => [],
|
||||
'direct' => false,
|
||||
'direct_user_id' => null,
|
||||
];
|
||||
|
||||
$this->assertEquals($expected, $payload->toArray());
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace BushlanovDev\MaxMessengerBot\Tests\Models\Attachments;
|
||||
|
||||
use BushlanovDev\MaxMessengerBot\ModelFactory;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\AbstractReplyButton;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendContactButton;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendMessageButton;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\ReplyKeyboardAttachment;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\Attributes\UsesClass;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
#[CoversClass(ReplyKeyboardAttachment::class)]
|
||||
#[UsesClass(AbstractReplyButton::class)]
|
||||
#[UsesClass(SendContactButton::class)]
|
||||
#[UsesClass(SendMessageButton::class)]
|
||||
#[UsesClass(ModelFactory::class)]
|
||||
final class ReplyKeyboardAttachmentTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
public function canBeCreatedFromArrayViaFactory(): void
|
||||
{
|
||||
$data = [
|
||||
'type' => 'reply_keyboard',
|
||||
'buttons' => [
|
||||
[['type' => 'message', 'text' => 'Hello']],
|
||||
[['type' => 'user_contact', 'text' => 'My Contact']]
|
||||
]
|
||||
];
|
||||
|
||||
$factory = new ModelFactory();
|
||||
$attachment = $factory->createAttachment($data);
|
||||
|
||||
$this->assertInstanceOf(ReplyKeyboardAttachment::class, $attachment);
|
||||
$this->assertCount(2, $attachment->buttons);
|
||||
$this->assertInstanceOf(SendContactButton::class, $attachment->buttons[1][0]);
|
||||
$this->assertSame('My Contact', $attachment->buttons[1][0]->text);
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace BushlanovDev\MaxMessengerBot\Tests\Models\Attachments\Requests;
|
||||
|
||||
use BushlanovDev\MaxMessengerBot\Enums\Intent;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendContactButton;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendMessageButton;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\ReplyKeyboardAttachmentRequestPayload;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Requests\ReplyKeyboardAttachmentRequest;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\Attributes\UsesClass;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
#[CoversClass(ReplyKeyboardAttachmentRequest::class)]
|
||||
#[UsesClass(SendMessageButton::class)]
|
||||
#[UsesClass(SendContactButton::class)]
|
||||
#[UsesClass(ReplyKeyboardAttachmentRequestPayload::class)]
|
||||
final class ReplyKeyboardAttachmentRequestTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
public function toArray(): void
|
||||
{
|
||||
$buttons = [
|
||||
[new SendMessageButton('Help', 'help_payload', Intent::Positive)],
|
||||
[new SendContactButton('Share Contact')],
|
||||
];
|
||||
|
||||
$request = new ReplyKeyboardAttachmentRequest(buttons: $buttons, direct: true);
|
||||
|
||||
$expectedArray = [
|
||||
'type' => 'reply_keyboard',
|
||||
'payload' => [
|
||||
'buttons' => [
|
||||
[
|
||||
[
|
||||
'type' => 'message',
|
||||
'text' => 'Help',
|
||||
'payload' => 'help_payload',
|
||||
'intent' => 'positive',
|
||||
],
|
||||
],
|
||||
[
|
||||
[
|
||||
'type' => 'user_contact',
|
||||
'text' => 'Share Contact',
|
||||
],
|
||||
],
|
||||
],
|
||||
'direct' => true,
|
||||
'direct_user_id' => null,
|
||||
],
|
||||
];
|
||||
|
||||
$this->assertEquals($expectedArray, $request->toArray());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user