| Path : /proc/self/root/var/www/html/phkaymedia/vendor/irazasyed/telegram-bot-sdk/src/Traits/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : //proc/self/root/var/www/html/phkaymedia/vendor/irazasyed/telegram-bot-sdk/src/Traits/Http.php |
<?php
namespace Telegram\Bot\Traits;
use InvalidArgumentException;
use Telegram\Bot\Exceptions\CouldNotUploadInputFile;
use Telegram\Bot\Exceptions\TelegramSDKException;
use Telegram\Bot\FileUpload\InputFile;
use Telegram\Bot\HttpClients\HttpClientInterface;
use Telegram\Bot\Objects\BaseObject;
use Telegram\Bot\Objects\File;
use Telegram\Bot\TelegramClient;
use Telegram\Bot\TelegramRequest;
use Telegram\Bot\TelegramResponse;
/**
* Http.
*/
trait Http
{
use Validator;
/** @var string Telegram Bot API Access Token. */
protected $accessToken = null;
/** @var TelegramClient The Telegram client service. */
protected $client = null;
/** @var HttpClientInterface|null Http Client Handler */
protected $httpClientHandler = null;
/** @var bool Indicates if the request to Telegram will be asynchronous (non-blocking). */
protected $isAsyncRequest = false;
/** @var int Timeout of the request in seconds. */
protected $timeOut = 60;
/** @var int Connection timeout of the request in seconds. */
protected $connectTimeOut = 10;
/** @var TelegramResponse|null Stores the last request made to Telegram Bot API. */
protected $lastResponse;
/**
* Set Http Client Handler.
*
* @param HttpClientInterface $httpClientHandler
*
* @return $this
*/
public function setHttpClientHandler(HttpClientInterface $httpClientHandler)
{
$this->httpClientHandler = $httpClientHandler;
return $this;
}
/**
* Returns the TelegramClient service.
*
* @return TelegramClient
*/
protected function getClient(): TelegramClient
{
if ($this->client === null) {
$this->client = new TelegramClient($this->httpClientHandler);
}
return $this->client;
}
/**
* Returns the last response returned from API request.
*
* @return TelegramResponse|null
*/
public function getLastResponse()
{
return $this->lastResponse;
}
/**
* Download a file from Telegram server by file ID.
*
* @param File|BaseObject|string $file Telegram File Instance / File Response Object or File ID.
* @param string $filename Absolute path to dir or filename to save as.
*
* @throws TelegramSDKException
*
* @return string
*/
public function downloadFile($file, string $filename): string
{
$originalFilename = null;
if (! $file instanceof File) {
if ($file instanceof BaseObject) {
$originalFilename = $file->get('file_name');
// Try to get file_id from the object or default to the original param.
$file = $file->get('file_id');
}
if (! is_string($file)) {
throw new InvalidArgumentException(
'Invalid $file param provided. Please provide one of file_id, File or Response object containing file_id'
);
}
$file = $this->getFile(['file_id' => $file]);
}
// No filename provided.
if (pathinfo($filename, PATHINFO_EXTENSION) === '') {
// Attempt to use the original file name if there is one or fallback to the file_path filename.
$filename .= DIRECTORY_SEPARATOR . ($originalFilename ?: basename($file->file_path));
}
return $this->getClient()->download($file->file_path, $filename);
}
/**
* Returns Telegram Bot API Access Token.
*
* @return string
*/
public function getAccessToken(): string
{
return $this->accessToken;
}
/**
* Sets the bot access token to use with API requests.
*
* @param string $accessToken The bot access token to save.
*
* @return $this
*/
public function setAccessToken(string $accessToken)
{
$this->accessToken = $accessToken;
return $this;
}
/**
* Check if this is an asynchronous request (non-blocking).
*
* @return bool
*/
public function isAsyncRequest(): bool
{
return $this->isAsyncRequest;
}
/**
* Make this request asynchronous (non-blocking).
*
* @param bool $isAsyncRequest
*
* @return $this
*/
public function setAsyncRequest(bool $isAsyncRequest)
{
$this->isAsyncRequest = $isAsyncRequest;
return $this;
}
/**
* @return int
*/
public function getTimeOut(): int
{
return $this->timeOut;
}
/**
* @param int $timeOut
*
* @return $this
*/
public function setTimeOut(int $timeOut)
{
$this->timeOut = $timeOut;
return $this;
}
/**
* @return int
*/
public function getConnectTimeOut(): int
{
return $this->connectTimeOut;
}
/**
* @param int $connectTimeOut
*
* @return $this
*/
public function setConnectTimeOut(int $connectTimeOut)
{
$this->connectTimeOut = $connectTimeOut;
return $this;
}
/**
* Sends a GET request to Telegram Bot API and returns the result.
*
* @param string $endpoint
* @param array $params
*
* @throws TelegramSDKException
*
* @return TelegramResponse
*/
protected function get(string $endpoint, array $params = []): TelegramResponse
{
$params = $this->replyMarkupToString($params);
return $this->sendRequest('GET', $endpoint, $params);
}
/**
* Sends a POST request to Telegram Bot API and returns the result.
*
* @param string $endpoint
* @param array $params
* @param bool $fileUpload Set true if a file is being uploaded.
*
* @throws TelegramSDKException
* @return TelegramResponse
*/
protected function post(string $endpoint, array $params = [], $fileUpload = false): TelegramResponse
{
$params = $this->normalizeParams($params, $fileUpload);
return $this->sendRequest('POST', $endpoint, $params);
}
/**
* Converts a reply_markup field in the $params to a string.
*
* @param array $params
*
* @return array
*/
protected function replyMarkupToString(array $params): array
{
if (isset($params['reply_markup'])) {
$params['reply_markup'] = (string) $params['reply_markup'];
}
return $params;
}
/**
* Sends a multipart/form-data request to Telegram Bot API and returns the result.
* Used primarily for file uploads.
*
* @param string $endpoint
* @param array $params
* @param string $inputFileField
*
* @throws CouldNotUploadInputFile
*
* @return TelegramResponse
*/
protected function uploadFile(string $endpoint, array $params, $inputFileField): TelegramResponse
{
//Check if the field in the $params array (that is being used to send the relative file), is a file id.
if (! isset($params[$inputFileField])) {
throw CouldNotUploadInputFile::missingParam($inputFileField);
}
if ($this->hasFileId($inputFileField, $params)) {
return $this->post($endpoint, $params);
}
//Sending an actual file requires it to be sent using multipart/form-data
return $this->post($endpoint, $this->prepareMultipartParams($params, $inputFileField), true);
}
/**
* Prepare Multipart Params for File Upload.
*
* @param array $params
* @param string $inputFileField
*
* @throws CouldNotUploadInputFile
*
* @return array
*/
protected function prepareMultipartParams(array $params, $inputFileField): array
{
$this->validateInputFileField($params, $inputFileField);
//Iterate through all param options and convert to multipart/form-data.
return collect($params)
->reject(function ($value) {
return null === $value;
})
->map(function ($contents, $name) {
return $this->generateMultipartData($contents, $name);
})
->values()
->all();
}
/**
* Generates the multipart data required when sending files to telegram.
*
* @param mixed $contents
* @param string $name
*
* @return array
*/
protected function generateMultipartData($contents, $name): array
{
if (! $this->isInputFile($contents)) {
return compact('name', 'contents');
}
$filename = $contents->getFilename();
$contents = $contents->getContents();
return compact('name', 'contents', 'filename');
}
/**
* Sends a request to Telegram Bot API and returns the result.
*
* @param string $method
* @param string $endpoint
* @param array $params
*
* @throws TelegramSDKException
*
* @return TelegramResponse
*/
protected function sendRequest($method, $endpoint, array $params = []): TelegramResponse
{
$telegramRequest = $this->resolveTelegramRequest($method, $endpoint, $params);
return $this->lastResponse = $this->getClient()->sendRequest($telegramRequest);
}
/**
* Instantiates a new TelegramRequest entity.
*
* @param string $method
* @param string $endpoint
* @param array $params
*
* @return TelegramRequest
*/
protected function resolveTelegramRequest($method, $endpoint, array $params = []): TelegramRequest
{
return (new TelegramRequest(
$this->getAccessToken(),
$method,
$endpoint,
$params,
$this->isAsyncRequest()
))
->setTimeOut($this->getTimeOut())
->setConnectTimeOut($this->getConnectTimeOut());
}
/**
* @param array $params
* @param $inputFileField
*
* @throws CouldNotUploadInputFile
*/
protected function validateInputFileField(array $params, $inputFileField): void
{
if (! isset($params[$inputFileField])) {
throw CouldNotUploadInputFile::missingParam($inputFileField);
}
// All file-paths, urls, or file resources should be provided by using the InputFile object
if ((! $params[$inputFileField] instanceof InputFile) && (is_string($params[$inputFileField]) && ! $this->is_json($params[$inputFileField]))) {
throw CouldNotUploadInputFile::inputFileParameterShouldBeInputFileEntity($inputFileField);
}
}
/**
* @param array $params
* @param $fileUpload
*
* @return array
*/
private function normalizeParams(array $params, $fileUpload)
{
if ($fileUpload) {
return ['multipart' => $params];
}
return ['form_params' => $this->replyMarkupToString($params)];
}
}