Модератор: Модераторы
procedure sendVideo;
procedure sendVideoByFileName;
procedure sendVideoStream;
procedure sendPhoto;
procedure sendPhotoByFileName;
procedure sendMediaGroup;
procedure sendMediaGroupByFileName;
uses tgsendertypes, tgtypes, tgfclhttpclientbroker, httpsend;
...
procedure TDM.BotReceiveMessage(ASender: TObject; AMessage: TTelegramMessageObj);
var s, s1: String;
fid: String;
begin
Log(AMessage.Text);
if AMessage.Text='/stop'
then begin
IsTerminating:=True;
Exit;
end;
if AMessage.Photo.Count>0
then begin
s:='Photo is sended from ChatID='+IntToStr(AMessage.ChatId);
Log(s);
fid:=AMessage.Photo[0].FileID;
if not FBot.getFile(fid)
then begin
Log('Error getting file.');
Exit;
end;
s:=FBot.FileObj.DownloadLink(BOTTOKEN);
s1:=Cfg.FilesDir+FormPhotoFileName;
if not DownloadHTTP(s, s1)
then begin
Log('Error downloading file.');
Exit;
end;
end;
end;
procedure TDM.BotReceiveMessage(ASender: TObject; AMessage: TTelegramMessageObj);
var s, s1: String;
fid: String;
i, j: Integer;
begin
Log(AMessage.Text);
if AMessage.Text='/stop'
then begin
IsTerminating:=True;
Exit;
end;
i:=AMessage.Photo.Count;
if i>0
then begin
s:='Photo is sended from ChatID='+IntToStr(AMessage.ChatId);
Log(s);
for J:=0 to i-1
do begin
fid:=AMessage.Photo[J].FileID;
if not FBot.getFile(fid)
then begin
Log('Error getting file.');
Exit;
end;
s:=FBot.FileObj.DownloadLink(BOTTOKEN);
s1:=Cfg.FilesDir+FormPhotoFileName(J+1);
if not DownloadHTTP(s, s1)
then begin
Log('Error downloading file');
Exit;
end;
end;
end;
end;
slyubez писал(а):Я имел в виду прием файлов из сообщений.
Анализируя библиотеку, решил пока ограничиться записью в файл. Написал такой код, но он почему-то сохраняет только сжатую картинку.
- Код: Выделить всё
uses tgsendertypes, tgtypes, tgfclhttpclientbroker, httpsend;
...
procedure TDM.BotReceiveMessage(ASender: TObject; AMessage: TTelegramMessageObj);
var s, s1: String;
fid: String;
begin
Log(AMessage.Text);
if AMessage.Text='/stop'
then begin
IsTerminating:=True;
Exit;
end;
if AMessage.Photo.Count>0
then begin
s:='Photo is sended from ChatID='+IntToStr(AMessage.ChatId);
Log(s);
fid:=AMessage.Photo[0].FileID;
if not FBot.getFile(fid)
then begin
Log('Error getting file.');
Exit;
end;
s:=FBot.FileObj.DownloadLink(BOTTOKEN);
s1:=Cfg.FilesDir+FormPhotoFileName;
if not DownloadHTTP(s, s1)
then begin
Log('Error downloading file.');
Exit;
end;
end;
end;
Добавлено спустя 16 минут 36 секунд:
UPD.
Модифицировал код.
- Код: Выделить всё
procedure TDM.BotReceiveMessage(ASender: TObject; AMessage: TTelegramMessageObj);
var s, s1: String;
fid: String;
i: Integer;
begin
Log(AMessage.Text);
...
i:=AMessage.Photo.Count;
if i>0
then begin
s:='Photo is sended from ChatID='+IntToStr(AMessage.ChatId);
Log(s);
fid:=AMessage.Photo[i-1].FileID;
if not FBot.getFile(fid)
then begin
Log('Error getting file.');
Exit;
end;
s:=FBot.FileObj.DownloadLink(BOTTOKEN);
s1:=Cfg.FilesDir+FormPhotoFileName;
if not DownloadHTTP(s, s1)
then begin
Log('Error downloading file.');
Exit;
end;
end;
end;
Я пока не очень понимаю, как так происходит, но при отправке фото с телефона число файлов оказывается равно четырем.
ри отправке изображений как фото (изображение в телеграм можно отправлять как файл, тогда он не будет сжиматься в несколько форматов), телеграм в обновлении присылает массив разных размеров одного фото. В первом будет самое сжатое. Поэтому, чтобы получить самое большое нужно использовать Photo.Last (ну или как в вашем примере, я вижу: Photo[Photo.Count-1]). Но, нужно понимать, что оно все равно будет сжатый - в этом смысле отправки подготовленного фото в мессенджере. Если через телеграм боту нужно отправить несжатое фото, то отправлять его нужно как документ (в телеграм мессенджерах можно просто снимать галочку сжимать фото) и отправлять как sendDocument
slyubez писал(а):Я пока не очень понимаю, как так происходит, но при отправке фото с телефона число файлов оказывается равно четырем.
"photo" : [
{
"file_id" : "AgACAgIAAxkBAAILe2W3YegJffY_qgWe4qDQKrc4_owsAAK00TEb1zLBSXUeKR-DP1RUAQADAgADcwADNAQ",
"file_unique_id" : "AQADtNExG9cywUl4",
"file_size" : 1754,
"width" : 90,
"height" : 90
},
{
"file_id" : "AgACAgIAAxkBAAILe2W3YegJffY_qgWe4qDQKrc4_owsAAK00TEb1zLBSXUeKR-DP1RUAQADAgADbQADNAQ",
"file_unique_id" : "AQADtNExG9cywUly",
"file_size" : 30924,
"width" : 320,
"height" : 320
},
{
"file_id" : "AgACAgIAAxkBAAILe2W3YegJffY_qgWe4qDQKrc4_owsAAK00TEb1zLBSXUeKR-DP1RUAQADAgADeAADNAQ",
"file_unique_id" : "AQADtNExG9cywUl9",
"file_size" : 62860,
"width" : 512,
"height" : 512
}
]
slyubez писал(а):Большое спасибо, я это понял, пока сейчас экспериментировал.
Ichthyander писал(а):Здравствуйте!
Аттача не вижу. Но предположу, что fphttpclient не находит библиотеку OpenSSL. Попробуйте установить в систему OpenSSL https://slproweb.com/products/Win32OpenSSL.html или положите в папку с программой файлы libeay32.dll и ssleay32.dll (нужной битности)
Ser9056 писал(а):https://ibb.co/Hx6QPBz вот скрин
Ichthyander писал(а):Ser9056 писал(а):https://ibb.co/Hx6QPBz вот скрин
Собственно, скрин только усилил мою версию о проблеме с OpenSSL. Проблема в защищенного соединении https для нативного клиента fphttpclient. На рабочем компьютере у Вас OpenSSL библиотеки установлены. На домашнем - нет. Попробуйте мою инструкцию выше
Вернуться в Разработки на нашем сайте
Сейчас этот форум просматривают: Yandex [Bot] и гости: 12