نمایش نتایج 1 تا 40 از 49

نام تاپیک: کار با API ربات تلگرام در دلفی 7

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #17
    کاربر دائمی آواتار mjdeveloper
    تاریخ عضویت
    بهمن 1385
    محل زندگی
    تهران
    پست
    124

    Cool نقل قول: کار با API ربات تلگرام در دلفی 7

    با درود و احترام خدمت دوستان گل

    دریافت فایل توسط ربات تلگرام رو به درخواست دوستان براتون آماده کردم . این کد برای دریافت تصویر و فایل در قالب های photo و document هست فرصت نکردم فرمت های دیگه رو بررسی کنم ببینم نام قالبش چیه . دیگه این و بعهده خودتون میذارم

    Recieve And Download File From bot with delphi


    const
    BotFileUrl = 'https://api.telegram.org/file/bot';

    مرحله بعد افزودن دو متد به botThread هست:

    TBotThread = class(TThread)
    private
    Function GetFile_Path(file_id: string) : String;
    procedure DownloadFile(FilePath , OrginalFileName: String );


    بدنه این دو متد بشرح زیر هست:
    function TBotThread.GetFile_Path(file_id: string): String;Var
    Stream: TStringStream;
    Params: TIdMultipartFormDataStream;
    msg : WideString;
    Src : string;
    LHandler: TIdSSLIOHandlerSocketOpenSSL;
    json , ResultNode , OKNode:TlkJSONbase;
    begin
    Result := '';
    try
    try
    msg := '/getfile';
    LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    FidHttpSend.ReadTimeout := 30000;
    FidHttpSend.IOHandler:=LHandler;
    LHandler.SSLOptions.Method := sslvTLSv1;
    LHandler.SSLOptions.Mode := sslmClient;
    FidHttpSend.HandleRedirects := true;
    Src := FidHttpGet.Get(BotUrl + API + msg + '?file_id=' + file_id);
    json:= TlkJSON.ParseText(Src);
    OKNode := TlkJSONboolean(json).Field['ok'];
    ResultNode := TlkJSONlist(json).Field['result'];
    if ResultNode <> nil then
    Begin
    Result := VarToStr(ResultNode.Field['file_path'].Value);
    End;
    finally
    LHandler.Free;
    ENd;
    except
    on E: EIdHTTPProtocolException do
    begin
    if E.ErrorCode = 403 then
    begin
    WriteToLog('Bot was blocked by the user');
    end;
    end;
    end;
    end;


    procedure TBotThread.DownloadFile(FilePath , OrginalFileName: String );
    var
    Stream: TMemoryStream;
    Url, Filename: String;
    LHandler: TIdSSLIOHandlerSocketOpenSSL;
    tmpFilePath : String;
    Begin
    if OrginalFileName = '' then
    Begin
    tmpFilePath := AnsiReplaceStr(FilePath,'/','\');
    OrginalFileName := ExtractFileName(tmpFilePath);
    End;
    LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    FidHttpSend.ReadTimeout := 0;
    FidHttpSend.IOHandler := LHandler;
    LHandler.SSLOptions.Method := sslvTLSv1;
    LHandler.SSLOptions.Mode := sslmClient;
    FidHttpSend.HandleRedirects := true;
    URL := BotFileUrl+ API + '/' + FilePath;
    Stream := TMemoryStream.Create;
    try
    FidHttpSend.Get(URL, Stream);
    Stream.SaveToFile(OrginalFileName);
    finally
    Stream.Free;
    end;
    end;


    حالا باید متد اصلی ترد یعنی Execute رو یه تغییری بدیم:


    procedure TBotThread.Execute;
    var
    ....
    file_id , file_path , FileName: string;


    فسمت دریافت پیام رو هم بخش های زیر رو بهش اضافه کنید

    if TlkJSONObject(item).Field['message'] <> nil then
    Begin
    msgNode := TlkJSONObject(item).Field['message'];
    .
    .
    .
    .
    //Download file


    if (msgNode.Field['document'] <> nil) then
    Begin
    file_id := VarToStr(msgNode.Field['document'].Field['file_id'].Value);
    FileName := VarToStr(msgNode.Field['document'].Field['file_name'].Value);
    file_path := GetFile_Path(file_id);
    if file_path <> '' then
    DownloadFile(file_path,FileName);
    End;


    //Download file
    if (msgNode.Field['photo'] <> nil) then
    Begin
    file_id := VarToStr(msgNode.Field['photo'].Child[msgNode.Field['photo'].Count-1].Field['file_id'].Value);
    FileName := '';
    file_path := GetFile_Path(file_id);
    if file_path <> '' then
    DownloadFile(file_path,FileName);
    End;
    End


    تصاویر و فایل ها کنار فایل برنامه شما دانلود میشه
    توجه داشته باشید کد با indy 10 نوشته شده شاید روی 9 هم کار کنه البته . تست نکردم .

    یا علی
    ایام بکام
    آخرین ویرایش به وسیله mjdeveloper : پنج شنبه 06 مهر 1396 در 15:18 عصر

تاپیک های مشابه

  1. سوال: کار با api‌ های تلگرام در دلفی
    نوشته شده توسط hadisalahi2 در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 16
    آخرین پست: پنج شنبه 24 تیر 1395, 17:43 عصر
  2. سوال: کار با فایل های متنی در دلفی txt-text
    نوشته شده توسط hassan p.b در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 20
    آخرین پست: یک شنبه 09 شهریور 1393, 00:38 صبح
  3. کار با Windows Agent ها در دلفی
    نوشته شده توسط alidehban در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 2
    آخرین پست: یک شنبه 15 فروردین 1389, 08:59 صبح
  4. کار با کامپوننت fast report در دلفی
    نوشته شده توسط nasim_leila در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 4
    آخرین پست: چهارشنبه 02 خرداد 1386, 11:26 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •