نقل قول نوشته شده توسط alipil مشاهده تاپیک
===========


ممنونم ممنونم
خیلی خوشحال شدم که جوابمو دادین.
حتما اگر به دست آوردی رسیدم به دوستان ارائه میدم.

من dll‌ های مربوط به نسخه 10 رو جایگزین کردم ، indy 10 ‌رو نتونستم دانلود و نصب کنم. اگر indy 10 رو در دلفی نصب کنم، مشکل برطرف میشه؟

مشکل ارورها موقع قطع اینترنت چطور برطرف میشه؟

بازم ممنونم از پاسخگویی
پروژه باید مجدد روی indy 10 کامپایل بشه و تغییراتی در کد لازم هست : و همچنین dll های ایندی 10 رو کنار برنامه بذارید. صرفا با گذاشتن dll ها کنار نسخه قدیمی مشکل حل نمیشه.

توابع ارسال پیام متنی و ارسال پیام متنی حاوی کیبورد اینطوری خواهد شد:

procedure TBotThread.SendMessage(ChatID:String; Text : WideString; parse_mode:string;disable_notification:boolean);Va  r
Stream: TStringStream;
Params: TIdMultipartFormDataStream;
//Text : WideString;
msg : WideString;
Src : string;
LHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
try
try
if FShowBotLink then
Text := Text + LineBreak + FBotUser;
msg := '/sendmessage';
Stream := TStringStream.Create('');
Params := TIdMultipartFormDataStream.Create;
Params.AddFormField('chat_id',ChatID);
if parse_mode <> '' then
Params.AddFormField('parse_mode',parse_mode);
if disable_notification then
Params.AddFormField('disable_notification','true')
else
Params.AddFormField('disable_notification','false' );
Params.AddFormField('disable_web_page_preview','tr ue');
Params.AddFormField('text',UTF8Encode(Text),'utf-8').ContentTransfer:='8bit';
//Params.AddFormField('text',Text);
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
FidHttpSend.ReadTimeout := 30000;
FidHttpSend.IOHandler:=LHandler;
LHandler.SSLOptions.Method := sslvTLSv1;
LHandler.SSLOptions.Mode := sslmClient;
FidHttpSend.HandleRedirects := true;
//FidHttpSend.Request.CharSet:= 'UTF-8';
FidHttpSend.Post(BaseUrl + API + msg, Params, Stream);
finally
LHandler.Free;
Params.Free;
Stream.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.SendMessageAndKey(ChatID:String; Text : WideString;Keys, parse_mode:string;disable_notification:boolean);
Var
Stream: TStringStream;
Params: TIdMultipartFormDataStream;
msg : WideString;
Src : string;
LHandler: TIdSSLIOHandlerSocketOpenSSL;
Json : TMemoryStream;
btn : string;
UTF8 : UTF8String;
BytesCount : integer;
SaveMsgID : boolean;
begin
btn := keys;
SaveMsgID := False;
if pos('force_reply',btn) > 0 then
SaveMsgID := True;
Json := TMemoryStream.Create;
UTF8 := AnsiToUtf8(btn);
BytesCount := Length(UTF8);
Json.WriteBuffer(UTF8[1], BytesCount);
Json.Position := 0;
try
try
if FShowBotLink then
Text := Text + LineBreak + FBotUser;
msg := '/sendmessage';
Stream := TStringStream.Create('');
Params := TIdMultipartFormDataStream.Create;
Params.AddObject('reply_markup','application/json','UTF-8',Json);
Params.AddFormField('chat_id',ChatID);
if parse_mode <> '' then
Params.AddFormField('parse_mode',parse_mode);
if disable_notification then
Params.AddFormField('disable_notification','true')
else
Params.AddFormField('disable_notification','false' );
Params.AddFormField('text',UTF8Encode(Text),'utf-8').ContentTransfer:='8bit';
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
FidHttpSend.ReadTimeout := 30000;
FidHttpSend.IOHandler:=LHandler;
LHandler.SSLOptions.Method := sslvTLSv1;
LHandler.SSLOptions.Mode := sslmClient;
FidHttpSend.HandleRedirects := true;
FidHttpSend.Post(BaseUrl + API + msg, Params, Stream);
//fmMain.Memo1.Text := Stream.DataString;
if SaveMsgID then
SaveMessageID(Stream.DataString,ChatID);
finally
Json.Free;
LHandler.Free;
Params.Free;
Stream.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;