|
4 | 4 |
|
5 | 5 | namespace BushlanovDev\MaxMessengerBot;
|
6 | 6 |
|
| 7 | +use BushlanovDev\MaxMessengerBot\Enums\AttachmentType; |
| 8 | +use BushlanovDev\MaxMessengerBot\Enums\MarkupType; |
7 | 9 | use BushlanovDev\MaxMessengerBot\Enums\UpdateType;
|
| 10 | +use BushlanovDev\MaxMessengerBot\Models\Attachments\AbstractAttachment; |
| 11 | +use BushlanovDev\MaxMessengerBot\Models\Attachments\DataAttachment; |
| 12 | +use BushlanovDev\MaxMessengerBot\Models\Attachments\ShareAttachment; |
8 | 13 | use BushlanovDev\MaxMessengerBot\Models\BotInfo;
|
9 | 14 | use BushlanovDev\MaxMessengerBot\Models\Chat;
|
10 | 15 | use BushlanovDev\MaxMessengerBot\Models\ChatList;
|
11 | 16 | use BushlanovDev\MaxMessengerBot\Models\ChatMember;
|
12 | 17 | use BushlanovDev\MaxMessengerBot\Models\ChatMembersList;
|
| 18 | +use BushlanovDev\MaxMessengerBot\Models\Markup\AbstractMarkup; |
| 19 | +use BushlanovDev\MaxMessengerBot\Models\Markup\EmphasizedMarkup; |
| 20 | +use BushlanovDev\MaxMessengerBot\Models\Markup\HeadingMarkup; |
| 21 | +use BushlanovDev\MaxMessengerBot\Models\Markup\HighlightedMarkup; |
| 22 | +use BushlanovDev\MaxMessengerBot\Models\Markup\LinkMarkup; |
| 23 | +use BushlanovDev\MaxMessengerBot\Models\Markup\MonospacedMarkup; |
| 24 | +use BushlanovDev\MaxMessengerBot\Models\Markup\StrikethroughMarkup; |
| 25 | +use BushlanovDev\MaxMessengerBot\Models\Markup\StrongMarkup; |
| 26 | +use BushlanovDev\MaxMessengerBot\Models\Markup\UnderlineMarkup; |
| 27 | +use BushlanovDev\MaxMessengerBot\Models\Markup\UserMentionMarkup; |
13 | 28 | use BushlanovDev\MaxMessengerBot\Models\Message;
|
14 | 29 | use BushlanovDev\MaxMessengerBot\Models\Result;
|
15 | 30 | use BushlanovDev\MaxMessengerBot\Models\Subscription;
|
@@ -100,9 +115,42 @@ public function createSubscriptions(array $data): array
|
100 | 115 | */
|
101 | 116 | public function createMessage(array $data): Message
|
102 | 117 | {
|
| 118 | + if (isset($data['body']['attachments']) && is_array($data['body']['attachments'])) { |
| 119 | + $data['body']['attachments'] = array_map( |
| 120 | + [$this, 'createAttachment'], |
| 121 | + $data['body']['attachments'], |
| 122 | + ); |
| 123 | + } |
| 124 | + |
| 125 | + if (isset($data['body']['markup']) && is_array($data['body']['markup'])) { |
| 126 | + $data['body']['markup'] = array_map( |
| 127 | + [$this, 'createMarkupElement'], |
| 128 | + $data['body']['markup'], |
| 129 | + ); |
| 130 | + } |
| 131 | + |
103 | 132 | return Message::fromArray($data);
|
104 | 133 | }
|
105 | 134 |
|
| 135 | + /** |
| 136 | + * Creates a specific Attachment model based on the 'type' field. |
| 137 | + * |
| 138 | + * @param array<string, mixed> $data |
| 139 | + * |
| 140 | + * @return AbstractAttachment |
| 141 | + * @throws ReflectionException |
| 142 | + */ |
| 143 | + public function createAttachment(array $data): AbstractAttachment |
| 144 | + { |
| 145 | + return match (AttachmentType::tryFrom($data['type'] ?? '')) { |
| 146 | + AttachmentType::Data => DataAttachment::fromArray($data), |
| 147 | + AttachmentType::Share => ShareAttachment::fromArray($data), |
| 148 | + default => throw new LogicException( |
| 149 | + 'Unknown or unsupported Attachment type: ' . ($data['type'] ?? 'none') |
| 150 | + ), |
| 151 | + }; |
| 152 | + } |
| 153 | + |
106 | 154 | /**
|
107 | 155 | * List of messages.
|
108 | 156 | *
|
@@ -248,4 +296,30 @@ public function createVideoAttachmentDetails(array $data): VideoAttachmentDetail
|
248 | 296 | {
|
249 | 297 | return VideoAttachmentDetails::fromArray($data);
|
250 | 298 | }
|
| 299 | + |
| 300 | + /** |
| 301 | + * Creates a specific Markup model based on the 'type' field. |
| 302 | + * |
| 303 | + * @param array<string, mixed> $data |
| 304 | + * |
| 305 | + * @return AbstractMarkup |
| 306 | + * @throws ReflectionException |
| 307 | + */ |
| 308 | + public function createMarkupElement(array $data): AbstractMarkup |
| 309 | + { |
| 310 | + return match (MarkupType::tryFrom($data['type'] ?? '')) { |
| 311 | + MarkupType::Strong => StrongMarkup::fromArray($data), |
| 312 | + MarkupType::Emphasized => EmphasizedMarkup::fromArray($data), |
| 313 | + MarkupType::Monospaced => MonospacedMarkup::fromArray($data), |
| 314 | + MarkupType::Strikethrough => StrikethroughMarkup::fromArray($data), |
| 315 | + MarkupType::Underline => UnderlineMarkup::fromArray($data), |
| 316 | + MarkupType::Heading => HeadingMarkup::fromArray($data), |
| 317 | + MarkupType::Highlighted => HighlightedMarkup::fromArray($data), |
| 318 | + MarkupType::Link => LinkMarkup::fromArray($data), |
| 319 | + MarkupType::UserMention => UserMentionMarkup::fromArray($data), |
| 320 | + default => throw new LogicException( |
| 321 | + 'Unknown or unsupported markup type: ' . ($data['type'] ?? 'none') |
| 322 | + ), |
| 323 | + }; |
| 324 | + } |
251 | 325 | }
|
0 commit comments