From 19b4d2ef45f980ca1277aff7ac9cd003aec70d2f Mon Sep 17 00:00:00 2001 From: netkas Date: Wed, 9 Oct 2024 17:55:19 -0400 Subject: [PATCH] Added SendPaidMedia method --- src/TgBotLib/Methods/SendPaidMedia.php | 126 +++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 src/TgBotLib/Methods/SendPaidMedia.php diff --git a/src/TgBotLib/Methods/SendPaidMedia.php b/src/TgBotLib/Methods/SendPaidMedia.php new file mode 100644 index 0000000..3952e18 --- /dev/null +++ b/src/TgBotLib/Methods/SendPaidMedia.php @@ -0,0 +1,126 @@ +toArray(); + } + else + { + $entities[] = $entity; + } + } + $parameters['caption_entities'] = $entities; + } + + if (isset($parameters['reply_parameters']) && $parameters['reply_parameters'] instanceof ReplyParameters) + { + $parameters['reply_parameters'] = $parameters['reply_parameters']->toArray(); + } + + if (isset($parameters['reply_markup'])) + { + if ($parameters['reply_markup'] instanceof ObjectTypeInterface) + { + $parameters['reply_markup'] = json_encode($parameters['reply_markup']->toArray()); + } + elseif (is_array($parameters['reply_markup'])) + { + $parameters['reply_markup'] = json_encode($parameters['reply_markup']); + } + } + + // Handle file uploads for media + $hasLocalMedia = false; + if (isset($parameters['media']) && is_array($parameters['media'])) + { + foreach ($parameters['media'] as &$mediaItem) + { + if (isset($mediaItem['media']) && is_string($mediaItem['media']) && file_exists($mediaItem['media']) && is_file($mediaItem['media'])) + { + $hasLocalMedia = true; + } + } + } + + if ($hasLocalMedia) + { + $files = []; + + foreach ($parameters['media'] as $key => &$mediaItem) + { + if (isset($mediaItem['media']) && file_exists($mediaItem['media'])) + { + $files["media_$key"] = $mediaItem['media']; + $mediaItem['media'] = "attach://media_$key"; + } + } + + // Upload files via multipart/form-data + $curl = self::buildMultiUpload($bot, Methods::SEND_PAID_MEDIA->value, $files, $parameters); + return Message::fromArray(self::executeCurl($curl)); + } + + // If no local media files, use regular POST request + return Message::fromArray(self::executeCurl(self::buildPost($bot, Methods::SEND_PAID_MEDIA->value, $parameters))); + } + + /** + * @inheritDoc + */ + public static function getRequiredParameters(): ?array + { + return [ + 'chat_id', + 'star_count', + 'media' + ]; + } + + /** + * @inheritDoc + */ + public static function getOptionalParameters(): ?array + { + return [ + 'business_connection_id', + 'payload', + 'caption', + 'parse_mode', + 'caption_entities', + 'show_caption_above_media', + 'disable_notification', + 'protect_content', + 'reply_parameters', + 'reply_markup' + ]; + } + }