Answer the question
In order to leave comments, you need to log in
Displaying a link to the downloaded TELEGRAM file?
Hello everyone, please help, I will be very grateful) When uploading a file to the bot, it displays a message that the photo has been uploaded, the question is, how to display a link in the message to the uploaded photo?
Like this:
Thank you! You can still download I liked to save them.
Link: www.sait.ru/img/foto.jpg
<?php
// определяем кодировку
header('Content-type: text/html; charset=utf-8');
// Создаем объект бота
$bot = new Bot();
// Обрабатываем пришедшие данные
$bot->init('php://input');
/**
* Class Bot
*/
class Bot
{
// <bot_token> - созданный токен для нашего бота от @BotFather
private $botToken = "токен";
// адрес для запросов к API Telegram
private $apiUrl = "https://api.telegram.org/bot";
public function init($data_php)
{
// создаем массив из пришедших данных от API Telegram
$data = $this->getData($data_php);
// id чата отправителя
$chat_id = $data['message']['chat']['id'];
// включаем логирование будет лежать рядом с этим файлом
$this->setFileLog($data, "log.txt");
// проверяем если пришло сообщение
if (array_key_exists('message', $data)) {
//tckb пришла команда /start
if ($data['message']['text'] == "/start") {
$this->sendMessage($chat_id, "Приветствую! Загрузите картинку.");
} elseif (array_key_exists('photo', $data['message'])) {
// если пришла картинка то сохраняем ее у себя
$text = $this->getPhoto($data['message']['photo'])
? "Спасибо! Можете еще загрузить мне понравилось их сохранять. "
: "Что-то пошло не так, попробуйте еще раз";
// отправляем сообщение о результате
$this->sendMessage($chat_id, $text);
} else {
// если пришло что-то другое
$this->sendMessage($chat_id, "Не понимаю команду! Просто загрузите картинку.");
}
}
}
// функция отправки текстового сообщения
private function sendMessage($chat_id, $text)
{
$this->requestToTelegram([
'chat_id' => $chat_id,
'text' => $text,
], "sendMessage");
}
// общая функция загрузки картинки
private function getPhoto($data)
{
// берем последнюю картинку в массиве
$file_id = $data[count($data) - 1]['file_id'];
// получаем file_path
$file_path = $this->getPhotoPath($file_id);
// возвращаем результат загрузки фото
return $this->copyPhoto($file_path);
}
// функция получения метонахождения файла
private function getPhotoPath($file_id) {
// получаем объект File
$array = json_decode($this->requestToTelegram(['file_id' => $file_id], "getFile"), TRUE);
// возвращаем file_path
return $array['result']['file_path'];
}
// копируем фото к себе
private function copyPhoto($file_path) {
// ссылка на файл в телеграме
$file_from_tgrm = "https://api.telegram.org/file/bot".$this->botToken."/".$file_path;
// достаем расширение файла
$ext = end(explode(".", $file_path));
// назначаем свое имя здесь время_в_секундах.расширение_файла
$name_our_new_file = time().".".$ext;
return copy($file_from_tgrm, "img/".$name_our_new_file);
}
// функция логирования в файл
private function setFileLog($data, $file)
{
$fh = fopen($file, 'a') or die('can\'t open file');
((is_array($data)) || (is_object($data))) ? fwrite($fh, print_r($data, TRUE) . "\n") : fwrite($fh, $data . "\n");
fclose($fh);
}
/**
* Парсим что приходит преобразуем в массив
* @param $data
* @return mixed
*/
private function getData($data)
{
return json_decode(file_get_contents($data), TRUE);
}
/** Отправляем запрос в Телеграмм
* @param $data
* @param string $type
* @return mixed
*/
private function requestToTelegram($data, $type)
{
$result = null;
if (is_array($data)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->apiUrl . $this->botToken . '/' . $type);
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result = curl_exec($ch);
curl_close($ch);
}
return $result;
}
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question