mirror of
https://github.com/BushlanovDev/max-bot-api-client-php.git
synced 2026-08-27 18:47:32 +00:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4fdfca53ee | |||
| 9df8ed8817 | |||
| 455b36ba2a | |||
| efd6261490 | |||
| dd295efc3d | |||
| 85231b0962 | |||
| 40742ddc60 | |||
| 1e48123ee3 |
@@ -103,7 +103,7 @@ $dispatcher->addHandler(UpdateType::BotStarted, function (BotStartedUpdate $upda
|
|||||||
|
|
||||||
```php
|
```php
|
||||||
$api->subscribe(
|
$api->subscribe(
|
||||||
url: 'https://example.com/webhook', // URL на который будут приходить хуки
|
url: 'https://example.com/webhook', // HTTPS URL на который будут приходить хуки
|
||||||
secret: 'super_secret', // Секретная фраза для проверки хуков
|
secret: 'super_secret', // Секретная фраза для проверки хуков
|
||||||
updateTypes: [
|
updateTypes: [
|
||||||
// Типы хуков которые вы хотите получать (либо ничего не указывать, чтобы получать все)
|
// Типы хуков которые вы хотите получать (либо ничего не указывать, чтобы получать все)
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,7 @@
|
|||||||
"psr/http-client": "^1.0",
|
"psr/http-client": "^1.0",
|
||||||
"psr/http-factory": "^1.0",
|
"psr/http-factory": "^1.0",
|
||||||
"psr/http-message": "^1.0||^2.0",
|
"psr/http-message": "^1.0||^2.0",
|
||||||
"psr/log": "^3.0"
|
"psr/log": "^1.1||^2.0||^3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"friendsofphp/php-cs-fixer": "^3.77",
|
"friendsofphp/php-cs-fixer": "^3.77",
|
||||||
|
|||||||
+2
-2
@@ -275,11 +275,11 @@ $subscriptions = $api->getSubscriptions();
|
|||||||
|
|
||||||
Подписывает бота на получение обновлений через WebHook.
|
Подписывает бота на получение обновлений через WebHook.
|
||||||
После вызова этого метода бот будет получать уведомления о новых событиях в чатах на указанный URL.
|
После вызова этого метода бот будет получать уведомления о новых событиях в чатах на указанный URL.
|
||||||
Ваш сервер должен прослушивать один из следующих портов: 80, 8080, 443, 8443, 16384-32383.
|
Судя по обновленной [документации](https://dev.max.ru/docs-api/methods/POST/subscriptions) поддерживается только 443 порт!
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$api->subscribe(
|
$api->subscribe(
|
||||||
url: 'https://example.com/webhook', // URL на который будут приходить хуки. Должен начинаться с http(s)://
|
url: 'https://example.com/webhook', // HTTPS URL на который будут приходить хуки. Должен начинаться с https://
|
||||||
secret: 'super_secret', // Секретная фраза для проверки хуков (необязательно)
|
secret: 'super_secret', // Секретная фраза для проверки хуков (необязательно)
|
||||||
updateTypes: [UpdateType::MessageCreated], // Типы хуков которые вы хотите получать (либо ничего не указывать, чтобы получать все)
|
updateTypes: [UpdateType::MessageCreated], // Типы хуков которые вы хотите получать (либо ничего не указывать, чтобы получать все)
|
||||||
);
|
);
|
||||||
|
|||||||
+1
-1
@@ -48,7 +48,7 @@ use RuntimeException;
|
|||||||
*/
|
*/
|
||||||
class Api
|
class Api
|
||||||
{
|
{
|
||||||
public const string LIBRARY_VERSION = '1.5.1';
|
public const string LIBRARY_VERSION = '1.6.2';
|
||||||
|
|
||||||
public const string API_VERSION = '1.2.5';
|
public const string API_VERSION = '1.2.5';
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ enum AttachmentType: string
|
|||||||
case Sticker = 'sticker';
|
case Sticker = 'sticker';
|
||||||
case Contact = 'contact';
|
case Contact = 'contact';
|
||||||
case InlineKeyboard = 'inline_keyboard';
|
case InlineKeyboard = 'inline_keyboard';
|
||||||
case ReplyKeyboard = 'reply_keyboard';
|
|
||||||
case Location = 'location';
|
case Location = 'location';
|
||||||
case Share = 'share';
|
case Share = 'share';
|
||||||
case Data = 'data';
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,5 +15,9 @@ enum ChatAdminPermission: string
|
|||||||
case ChangeChatInfo = 'change_chat_info';
|
case ChangeChatInfo = 'change_chat_info';
|
||||||
case PinMessage = 'pin_message';
|
case PinMessage = 'pin_message';
|
||||||
case Write = 'write';
|
case Write = 'write';
|
||||||
|
case CanCall = 'can_call';
|
||||||
case EditLink = 'edit_link';
|
case EditLink = 'edit_link';
|
||||||
|
case PostEditDeleteMessage = 'post_edit_delete_message';
|
||||||
|
case EditMessage = 'edit_message';
|
||||||
|
case DeleteMessage = 'delete_message';
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-13
@@ -24,12 +24,10 @@ use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendContactBut
|
|||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendGeoLocationButton;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendGeoLocationButton;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendMessageButton;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendMessageButton;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\ContactAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\ContactAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\DataAttachment;
|
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\FileAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\FileAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\InlineKeyboardAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\InlineKeyboardAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\LocationAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\LocationAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\PhotoAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\PhotoAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\ReplyKeyboardAttachment;
|
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\ShareAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\ShareAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\StickerAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\StickerAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\VideoAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\VideoAttachment;
|
||||||
@@ -242,14 +240,6 @@ readonly class ModelFactory
|
|||||||
public function createAttachment(array $data): AbstractAttachment
|
public function createAttachment(array $data): AbstractAttachment
|
||||||
{
|
{
|
||||||
$attachmentType = AttachmentType::tryFrom($data['type'] ?? '');
|
$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
|
if ($attachmentType === AttachmentType::InlineKeyboard
|
||||||
&& isset($data['payload']['buttons']) && is_array($data['payload']['buttons'])) {
|
&& isset($data['payload']['buttons']) && is_array($data['payload']['buttons'])) {
|
||||||
$data['payload']['buttons'] = array_map(
|
$data['payload']['buttons'] = array_map(
|
||||||
@@ -259,8 +249,6 @@ readonly class ModelFactory
|
|||||||
}
|
}
|
||||||
|
|
||||||
return match ($attachmentType) {
|
return match ($attachmentType) {
|
||||||
AttachmentType::Data => DataAttachment::fromArray($data),
|
|
||||||
AttachmentType::Share => ShareAttachment::fromArray($data),
|
|
||||||
AttachmentType::Image => PhotoAttachment::fromArray($data),
|
AttachmentType::Image => PhotoAttachment::fromArray($data),
|
||||||
AttachmentType::Video => VideoAttachment::fromArray($data),
|
AttachmentType::Video => VideoAttachment::fromArray($data),
|
||||||
AttachmentType::Audio => AudioAttachment::fromArray($data),
|
AttachmentType::Audio => AudioAttachment::fromArray($data),
|
||||||
@@ -268,8 +256,8 @@ readonly class ModelFactory
|
|||||||
AttachmentType::Sticker => StickerAttachment::fromArray($data),
|
AttachmentType::Sticker => StickerAttachment::fromArray($data),
|
||||||
AttachmentType::Contact => ContactAttachment::fromArray($data),
|
AttachmentType::Contact => ContactAttachment::fromArray($data),
|
||||||
AttachmentType::InlineKeyboard => InlineKeyboardAttachment::fromArray($data),
|
AttachmentType::InlineKeyboard => InlineKeyboardAttachment::fromArray($data),
|
||||||
AttachmentType::ReplyKeyboard => ReplyKeyboardAttachment::fromArray($data),
|
|
||||||
AttachmentType::Location => LocationAttachment::fromArray($data),
|
AttachmentType::Location => LocationAttachment::fromArray($data),
|
||||||
|
AttachmentType::Share => ShareAttachment::fromArray($data),
|
||||||
default => throw new LogicException('Unknown or unsupported attachment type: ' . ($data['type'] ?? 'none')),
|
default => throw new LogicException('Unknown or unsupported attachment type: ' . ($data['type'] ?? 'none')),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace BushlanovDev\MaxMessengerBot\Models\Attachments;
|
|
||||||
|
|
||||||
use BushlanovDev\MaxMessengerBot\Enums\AttachmentType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents an attachment containing a payload from a SendMessageButton.
|
|
||||||
*/
|
|
||||||
final readonly class DataAttachment extends AbstractAttachment
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param string $data The payload from the button.
|
|
||||||
*/
|
|
||||||
public function __construct(public string $data)
|
|
||||||
{
|
|
||||||
parent::__construct(AttachmentType::Data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1667,12 +1667,14 @@ final class ApiTest extends TestCase
|
|||||||
$admins = [
|
$admins = [
|
||||||
new ChatAdmin(101, [ChatAdminPermission::Write]),
|
new ChatAdmin(101, [ChatAdminPermission::Write]),
|
||||||
new ChatAdmin(202, [ChatAdminPermission::PinMessage]),
|
new ChatAdmin(202, [ChatAdminPermission::PinMessage]),
|
||||||
|
new ChatAdmin(303, [ChatAdminPermission::EditMessage, ChatAdminPermission::CanCall], 'SuperUser'),
|
||||||
];
|
];
|
||||||
|
|
||||||
$expectedBody = [
|
$expectedBody = [
|
||||||
'admins' => [
|
'admins' => [
|
||||||
['user_id' => 101, 'permissions' => ['write'], 'alias' => null],
|
['user_id' => 101, 'permissions' => ['write'], 'alias' => null],
|
||||||
['user_id' => 202, 'permissions' => ['pin_message'], 'alias' => null],
|
['user_id' => 202, 'permissions' => ['pin_message'], 'alias' => null],
|
||||||
|
['user_id' => 303, 'permissions' => ['edit_message', 'can_call'], 'alias' => 'SuperUser'],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
$rawResponse = ['success' => true];
|
$rawResponse = ['success' => true];
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Inline\RequestGeoLoc
|
|||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\AbstractReplyButton;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\AbstractReplyButton;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendContactButton;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendContactButton;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendMessageButton;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\Buttons\Reply\SendMessageButton;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\DataAttachment;
|
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\InlineKeyboardAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\InlineKeyboardAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\LocationAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\LocationAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\KeyboardPayload;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\KeyboardPayload;
|
||||||
@@ -26,7 +25,6 @@ use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\PhotoAttachmentPayl
|
|||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\PhotoAttachmentRequestPayload;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\PhotoAttachmentRequestPayload;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\ShareAttachmentRequestPayload;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\Payloads\ShareAttachmentRequestPayload;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\PhotoAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\PhotoAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\ReplyKeyboardAttachment;
|
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\ShareAttachment;
|
use BushlanovDev\MaxMessengerBot\Models\Attachments\ShareAttachment;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\BotCommand;
|
use BushlanovDev\MaxMessengerBot\Models\BotCommand;
|
||||||
use BushlanovDev\MaxMessengerBot\Models\BotInfo;
|
use BushlanovDev\MaxMessengerBot\Models\BotInfo;
|
||||||
@@ -85,7 +83,6 @@ use Psr\Log\LoggerInterface;
|
|||||||
#[UsesClass(PhotoAttachmentRequestPayload::class)]
|
#[UsesClass(PhotoAttachmentRequestPayload::class)]
|
||||||
#[UsesClass(VideoUrls::class)]
|
#[UsesClass(VideoUrls::class)]
|
||||||
#[UsesClass(AbstractAttachment::class)]
|
#[UsesClass(AbstractAttachment::class)]
|
||||||
#[UsesClass(DataAttachment::class)]
|
|
||||||
#[UsesClass(ShareAttachment::class)]
|
#[UsesClass(ShareAttachment::class)]
|
||||||
#[UsesClass(ShareAttachmentRequestPayload::class)]
|
#[UsesClass(ShareAttachmentRequestPayload::class)]
|
||||||
#[UsesClass(LinkMarkup::class)]
|
#[UsesClass(LinkMarkup::class)]
|
||||||
@@ -96,7 +93,6 @@ use Psr\Log\LoggerInterface;
|
|||||||
#[UsesClass(AbstractReplyButton::class)]
|
#[UsesClass(AbstractReplyButton::class)]
|
||||||
#[UsesClass(SendContactButton::class)]
|
#[UsesClass(SendContactButton::class)]
|
||||||
#[UsesClass(SendMessageButton::class)]
|
#[UsesClass(SendMessageButton::class)]
|
||||||
#[UsesClass(ReplyKeyboardAttachment::class)]
|
|
||||||
#[UsesClass(AbstractInlineButton::class)]
|
#[UsesClass(AbstractInlineButton::class)]
|
||||||
#[UsesClass(ChatButton::class)]
|
#[UsesClass(ChatButton::class)]
|
||||||
#[UsesClass(RequestContactButton::class)]
|
#[UsesClass(RequestContactButton::class)]
|
||||||
@@ -593,7 +589,6 @@ final class ModelFactoryTest extends TestCase
|
|||||||
'seq' => 102,
|
'seq' => 102,
|
||||||
'text' => 'Message with data attachment',
|
'text' => 'Message with data attachment',
|
||||||
'attachments' => [
|
'attachments' => [
|
||||||
['type' => 'data', 'data' => 'payload_from_reply_button'],
|
|
||||||
[
|
[
|
||||||
'type' => 'share',
|
'type' => 'share',
|
||||||
'payload' => ['url' => 'http://a.com'],
|
'payload' => ['url' => 'http://a.com'],
|
||||||
@@ -615,16 +610,13 @@ final class ModelFactoryTest extends TestCase
|
|||||||
$this->assertInstanceOf(Message::class, $message);
|
$this->assertInstanceOf(Message::class, $message);
|
||||||
$this->assertInstanceOf(MessageBody::class, $message->body);
|
$this->assertInstanceOf(MessageBody::class, $message->body);
|
||||||
$this->assertIsArray($attachments);
|
$this->assertIsArray($attachments);
|
||||||
$this->assertCount(3, $attachments);
|
$this->assertCount(2, $attachments);
|
||||||
|
|
||||||
$this->assertInstanceOf(DataAttachment::class, $attachments[0]);
|
$this->assertInstanceOf(ShareAttachment::class, $message->body->attachments[0]);
|
||||||
$this->assertSame('payload_from_reply_button', $attachments[0]->data);
|
$this->assertSame('Test Share', $attachments[0]->title);
|
||||||
|
|
||||||
$this->assertInstanceOf(ShareAttachment::class, $message->body->attachments[1]);
|
$this->assertInstanceOf(PhotoAttachment::class, $attachments[1]);
|
||||||
$this->assertSame('Test Share', $attachments[1]->title);
|
$this->assertSame(1, $attachments[1]->payload->photoId);
|
||||||
|
|
||||||
$this->assertInstanceOf(PhotoAttachment::class, $attachments[2]);
|
|
||||||
$this->assertSame(1, $attachments[2]->payload->photoId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Test]
|
#[Test]
|
||||||
@@ -665,26 +657,6 @@ final class ModelFactoryTest extends TestCase
|
|||||||
$this->factory->createMarkupElement(['type' => 'brand_new_unsupported_type']);
|
$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]
|
#[Test]
|
||||||
public function createReplyButtonThrowsExceptionForUnknownType(): void
|
public function createReplyButtonThrowsExceptionForUnknownType(): void
|
||||||
{
|
{
|
||||||
@@ -769,14 +741,6 @@ final class ModelFactoryTest extends TestCase
|
|||||||
public static function attachmentTypeProvider(): array
|
public static function attachmentTypeProvider(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'Data Attachment' => [
|
|
||||||
['type' => 'data', 'data' => 'test_payload'],
|
|
||||||
DataAttachment::class,
|
|
||||||
function (TestCase $test, DataAttachment $attachment) {
|
|
||||||
$test->assertSame('test_payload', $attachment->data);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
'Location Attachment' => [
|
'Location Attachment' => [
|
||||||
['type' => 'location', 'latitude' => 55.751244, 'longitude' => 37.618423],
|
['type' => 'location', 'latitude' => 55.751244, 'longitude' => 37.618423],
|
||||||
LocationAttachment::class,
|
LocationAttachment::class,
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace BushlanovDev\MaxMessengerBot\Tests\Models\Attachments;
|
|
||||||
|
|
||||||
use BushlanovDev\MaxMessengerBot\Enums\AttachmentType;
|
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\AbstractAttachment;
|
|
||||||
use BushlanovDev\MaxMessengerBot\Models\Attachments\DataAttachment;
|
|
||||||
use PHPUnit\Framework\Attributes\CoversClass;
|
|
||||||
use PHPUnit\Framework\Attributes\Test;
|
|
||||||
use PHPUnit\Framework\Attributes\UsesClass;
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
|
|
||||||
#[CoversClass(DataAttachment::class)]
|
|
||||||
#[UsesClass(AbstractAttachment::class)]
|
|
||||||
final class DataAttachmentTest extends TestCase
|
|
||||||
{
|
|
||||||
#[Test]
|
|
||||||
public function canBeCreatedAndSerialized(): void
|
|
||||||
{
|
|
||||||
$attachment = new DataAttachment('some_payload_from_button');
|
|
||||||
|
|
||||||
$this->assertSame(AttachmentType::Data, $attachment->type);
|
|
||||||
$this->assertSame('some_payload_from_button', $attachment->data);
|
|
||||||
|
|
||||||
$expectedArray = [
|
|
||||||
'type' => 'data',
|
|
||||||
'data' => 'some_payload_from_button',
|
|
||||||
];
|
|
||||||
|
|
||||||
$this->assertEquals($expectedArray, $attachment->toArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[Test]
|
|
||||||
public function canBeCreatedFromArray(): void
|
|
||||||
{
|
|
||||||
$data = [
|
|
||||||
'type' => 'data',
|
|
||||||
'data' => 'payload123',
|
|
||||||
];
|
|
||||||
|
|
||||||
$attachment = DataAttachment::fromArray($data);
|
|
||||||
|
|
||||||
$this->assertInstanceOf(DataAttachment::class, $attachment);
|
|
||||||
$this->assertSame(AttachmentType::Data, $attachment->type);
|
|
||||||
$this->assertSame('payload123', $attachment->data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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