API Telegram

Telegram

 

Telegram iki tür API sunar, biri Bot'ları ve protokol olarak HTTPs'yi kullanan programlar oluşturmanıza olanak tanıyan Bot API'dir. Telegram API ve TDLib, özelleştirilmiş Telegram istemcileri oluşturmanıza olanak tanır ve Bot API'sinden çok daha güçlüdür.

 

sgcWebSockets, kendi telegram istemcinizi oluşturabileceğiniz anlamına gelen tdjson kütüphanesi aracılığıyla TDLib'i destekler. TDLib tüm ağ uygulama ayrıntılarını, şifrelemeyi ve yerel veri depolamayı halleder. TDLib tüm Telegram özelliklerini destekler.

 

TDLib (Telegram Database Library) Avantajları

 

 

Configuration

Windows

 

TDLib diğer üçüncü taraf kütüphaneleri gerektirir: OpenSSL ve ZLib. Bu kütüphaneler tdjson kütüphanesiyle birlikte dağıtılmalıdır.

 

* Windows sürümleri, Microsoft'tan indirilebilen VCRuntime'ı gerektirir: https://www.microsoft.com/en-us/download/details.aspx?id=52685, yükledikten sonra sorun devam ederse, şu dll'leri uygulamanızın bulunduğu klasöre kopyalamayı deneyin: VCRUNTIME140.dll ve VCRUNTIME140_1.dll.

 

Aşağıdaki kütüphaneleri uygulamanızın bulunduğu dizine kopyalayın:

 

Windows 32 Windows 64
tdjson.dll tdjson.dll
libcrypto-1_1.dll libcrypto-1_1-x64.dll
libssl-1_1.dll libssl-1_1-x64.dll
zlib1.dll zlib1.dll

 

 

OSX64

 

libtdjson.dylib kitaplığını cihazınıza dağıtın ve kitaplığın nerede olduğunu SetTDJsonPath kullanarak ayarlayabilirsiniz, örnek:

 

"Contents\MacOS\" konumuna dağıtırsanız, yolu TPath.GetDirectoryName(ParamStr(0)) klasöründe ayarlamanız gerekir.

 

OSXARM64

 

libtdjson.dylib kitaplığını cihazınıza dağıtın ve kitaplığın nerede olduğunu SetTDJsonPath kullanarak ayarlayabilirsiniz, örnek:

 

"Contents\MacOS\" konumuna dağıtırsanız, yolu TPath.GetDirectoryName(ParamStr(0)) klasöründe ayarlamanız gerekir.

 

Linux64

 

libtdjson.so kütüphanesini cihazınıza dağıtın ve SetTDJsonPath yöntemini çağırarak kütüphane yolunu ayarlayın.

 

Android

 

libtdjsonandroid.so kütüphanesini cihazınıza dağıtın. Örnek: bir Android64 kütüphanesi dağıtıyorsanız, Project/Deployment içindeki RemotePath'i "library\lib\arm64-v8a\" olarak ayarlayın. Android32 ise, RemotePath'i "library\lib\armeabi-v7a\" olarak ayarlayın

 

iOS64

 

libtdjson.a kütüphanesini şu dizinlere kopyalayın:

 

 

Telegram Uygulamanızı Oluşturma

Bir API id'si almak ve Telegram API'sini kullanarak kendi uygulamanızı geliştirmek için aşağıdakileri yapmanız gerekir:

 

 

Bu değerler Telegram bileşeninin Telegram.API özelliğinde ayarlanmalıdır. Kimlik doğrulaması yapmak için bir kullanıcı veya bot olarak kimlik doğrulayabilirsiniz, Telegram'a giriş yapmak için ayarlayabileceğiniz 2 özellik vardır:

 

 

Aşağıdaki parametreler yapılandırılabilir:

 

 

İsteğe bağlı olarak, SetTDJsonPath yöntemini kullanarak tdjson kütüphanesinin bulunduğu yolu yapılandırabilirsiniz. Yeni bir telegram oturumu başlatmadan önce yolu geçirin.

 

Telegram Bileşenini yapılandırdıktan sonra, Active özelliğini true olarak ayarlayabilirsiniz ve program Telegram'a bağlanmaya çalışacaktır.

 

Örnek Kod


oTelegram := TsgcTDLib_Telegram.Create(nil);
oTelegram.Telegram.API.ApiHash := 'your api hash';
oTelegram.Telegram.API.ApiId := 'your api id';
oTelegram.PhoneNumber := 'your phone number';
oTelegram.ApplicationVersion := '1.0';
oTelegram.DeviceModel := 'Desktop';
oTelegram.LanguageCode := 'en';
oTelegram.SystemVersion := 'Windows';
oTelegram.Active := true;

 

Authorization

Kütüphane tarafından bir Kimlik Doğrulama Kodu (Telegram Uygulamasında teslim edilir, SMS değil) almak veya bir parola sağlamak için çağrılabilen iki olay vardır.

 

OnAuthenticationCode

 

Bu olay, Telegram Telegram Uygulamasına bir Yetkilendirme Kodu gönderdiğinde ve kullanıcının bu kodu kopyalayıp bu olayın Code argümanına ayarlaması gerektiğinde çağrılır.

 


procedure OnAuthenticationCode(Sender: TObject; var Code: string);
begin
  Code := InputBox('Telegram Code', 'Introduce code', '');
end;

 

Android'de, inputbox iş parçacığını kilitlemez, bu nedenle kullanıcı tarafından Code parametresinde girilen değeri döndürmek yerine, kod değerini ayarlamak için SetAuthenticationCode yöntemini kullanın.

 


procedure OnAuthenticationCode(Sender: TObject; var Code:string);
begin
  InputBox('Telegram', 'Introduce Telegram Code', '',
    procedure(const AResult: TModalResult; const AValue: string)
    begin
      sgcTelegram.SetAuthenticationCode(AValue);
    end
    );
end;

 

OnAuthenticationPassword

 

Bu olay, Telegram kullanıcının bir parola ayarlamasını gerektirdiğinde çağrılır.

 

 

Yetkilendirme Durumu

Yetkilendirme başladıktan sonra, yetkilendirmenin durumunu OnAuthorizationStatus olayı aracılığıyla kontrol edebilirsiniz, bu olay yetkilendirmenin durumunda her değişiklik olduğunda çağrılır. Status'un bazı değerleri:

 

 

Bağlantı Durumu

Bağlantı başladıktan sonra, OnConnectionStatus olayı ile bağlantının durumunu kontrol edebilirsiniz, bu olay bağlantının durumunda her değişiklik olduğunda çağrılır. Bazı Status değerleri:

 

 

Ana Yöntemler

TsgcTDLib_Telegram API Bileşeni birkaç Telegram yöntemini destekler, en çok kullanılanları aşağıda bulabilirsiniz.

 

Yöntem Parametreler Açıklama
SendTextMessage

aChatId: Mesajın gönderileceği Chat'in Id'si aText: Mesajın Metni.

InlineKeyboard: İsteğe bağlı Butonlar (yalnızca botlar).

Bir Sohbete Metin Mesajı Gönderir
SendRichTextMessage

aChatId: Mesajın gönderileceği Chat'in Id'si aText: Mesajın Metni.

InlineKeyboard: İsteğe bağlı Butonlar (yalnızca botlar).

Bir Sohbete Zengin Metin Mesajı gönderir. Markdown sözdizimi:
  • Kalın: **bold**
  • İtalik: __italic__
  • Üstü çizili: --strike--
  • Altı çizili: ~~underline~~
  • Kod: ##code##
SendDocumentMessage aChatId: Mesajın gönderileceği Sohbetin Kimliği aFilePath: belgenin tam dosya yolu aInlineKeyboard: İsteğe bağlı Düğmeler (yalnızca botlar). Bir Sohbete Belge gönderir.
SendPhotoMessage

aChatId: Mesajın gönderileceği Sohbetin Id'si aFilePath: fotoğrafın tam dosya yolu

Width: fotoğrafın genişliği.

Height: fotoğrafın genişliği.

InlineKeyboard: İsteğe bağlı Butonlar (yalnızca botlar).

Bir Sohbete bir Fotoğraf gönderir.
SendVideoMessage

aChatId: Mesajın gönderileceği Sohbetin Id'si aFilePath: videonun tam dosya yolu aWidth: videonun genişliği.

Height: videonun genişliği.

aDuration: videonun saniye cinsinden süresi.

aInlineKeyboard: İsteğe bağlı Düğmeler (yalnızca botlar).

Bir Sohbete Video gönderir.
SendInvoiceMessage

aChatId: Mesajın gönderileceği Chat Id'si aInvoice: Mesaj Metni.

aInlineKeyboard: İsteğe bağlı Düğmeler (yalnızca botlar).

Bir Fatura gönderir (yalnızca Bot olduğunda ve Özel Kanallarda kullanılabilir).
EditTextMessage

aChatId: Mesajın gönderileceği Sohbetin Kimliği

aMessageId: Değiştirilecek Mesajın Id'si

Text: Mesajın Metni.

InlineKeyboard: İsteğe bağlı Butonlar (yalnızca botlar).

ShowKeyboard: İsteğe bağlı Düğmeler (yalnızca botlar).

Bir mesajın metnini (veya bir oyun mesajının metnini) düzenler
AddChatMember aChatId: Mesajın gönderileceği Sohbetin Kimliği aUserId: Kullanıcının tanımlayıcısı. aForwardLimit: Sohbetten yeni üyeye iletilecek daha önceki mesajların sayısı; en fazla 100. Süpergruplar ve kanallar için göz ardı edilir. Bir sohbete yeni bir üye ekler. Üyeler özel veya gizli sohbetlere eklenemez. Sohbet durumu sunucuyla senkronize edilene kadar üyeler eklenmeyecektir.
AddChatMembers aChatId: Mesajın gönderileceği Chat'in Id'si aUserIds: Sohbete eklenecek kullanıcıların tanımlayıcıları. Bir sohbete birden çok yeni üye ekler. Şu anda bu seçenek yalnızca supergrup'lar ve kanallar için kullanılabilir. Bu seçenek bir sohbete katılmak için kullanılamaz. Bir kanalın 200'den fazla üyesi varsa kanala üye eklenemez. Üyeler, sohbet durumu sunucuyla senkronize edilene kadar eklenmez.
GetChatMember aChatId: Sohbet Tanımlayıcısı. aUserId: Kullanıcı Tanımlayıcısı. Bir sohbetin tek bir üyesi hakkında bilgi döndürür.
GetBasicGroupFullInfo aGroupId: Temel Grup Tanımlayıcısı Tanımlayıcısına göre bir temel grup hakkında tam bilgi döndürür.
GetSupergroupMembers

aSuperGroupId: Supergroup veya kanalın tanımlayıcısı.

aSupergroupMembersFilter: Döndürülecek kullanıcıların türü. Varsayılan olarak null aOffset: Atlanacak kullanıcı sayısı.

aLimit: Döndürülecek maksimum kullanıcı sayısı; 200'e kadar.

Bir supergroup veya kanaldaki üyeler veya yasaklanmış kullanıcılar hakkında bilgi döndürür.
JoinChatByInviteLink aLink: içe aktarılacak Davet bağlantısı; Mümkünse mevcut kullanıcıyı sohbete eklemek için bir davet bağlantısı kullanır. Yeni üye, sohbet durumu sunucuyla senkronize edilene kadar eklenmeyecektir.
CreateNewSecretChat aUserId: Kullanıcının tanımlayıcısı. Yeni bir secret chat oluşturur.
CreateNewBasicGroupChat aUserIds: Sohbete eklenecek kullanıcıların tanımlayıcıları. aTitle: Yeni temel grubun başlığı Yeni bir temel grup oluşturur
CreateNewSupergroupChat

aTitle: Yeni SuperGroup'un Başlığı

aIsChannel: Bir kanal sohbeti oluşturulması gerekiyorsa True. aDescription: Sohbet Açıklaması.

Yeni bir supergroup veya kanal oluşturur.
CreatePrivateChat

aUserId: Kullanıcının tanımlayıcısı.

aForce: true ise, sohbet ağ isteği olmadan oluşturulur. Bu durumda sohbet hakkında türü, başlığı ve fotoğrafı dışındaki tüm bilgiler yanlış olabilir

Belirli bir kullanıcıya karşılık gelen mevcut bir sohbeti döndürür
GetChats aOffsetOrder: Sohbetlerin döndürüleceği sohbet sırası aOffsetChatId: Sohbetlerin döndürüleceği sohbet tanımlayıcısı aLimit: Döndürülecek maksimum sohbet sayısı. Sıralı bir sohbet listesi döndürür. Sohbetler, (order, chat_id) çiftine göre azalan sırada sıralanır (Bot olarak günlüğe kaydedildiğinde kullanılamaz)
GetChat aChatId: Sohbet tanımlayıcısı Bir sohbet hakkında tanımlayıcısıyla bilgi döndürür
GetChatHistory

aChatId: Sohbet tanımlayıcısı

aFromMessageId: Geçmişin getirilmeye başlanacağı mesajın tanımlayıcısı; son mesajdan itibaren sonuç almak için 0 kullanın.

aOffset: Tam olarak from_message_id'den sonuç almak için 0 belirtin veya ek olarak bazı daha yeni mesajları almak için 99'a kadar negatif bir offset belirtin.

aLimit:Döndürülecek maksimum mesaj sayısı

Bir sohbetteki mesajları döndürür. Mesajlar ters kronolojik sırada döndürülür
GetUser aUserId: Kullanıcı Tanımlayıcısı Bir kullanıcı hakkında tanımlayıcısına göre bilgi döndürür.
AddProxyHTTP

aServer: Proxy'nin sunucu adı.

aPort: Proxy portunun numarası.

aUserName: Oturum açmak için kullanıcı adı; boş olabilir.

aPassword: Oturum açmak için parola; boş olabilir.

aHTTPOnly: Proxy yalnızca HTTP isteklerini destekliyorsa ve HTTP CONNECT yöntemi aracılığıyla şeffaf TCP bağlantılarını desteklemiyorsa true geçin.

Ağ istekleri için bir HTTP proxy sunucusu ekler. Yetkilendirmeden önce çağrılabilir.
AddProxyMTProto

aServer: Proxy'nin sunucu adı.

aPort: Proxy portu numarası. aSecret: Proxy'nin onaltılık kodlamada gizli anahtarı.

Ağ istekleri için bir MTProto proxy sunucusu ekler. Yetkilendirmeden önce çağrılabilir.
AddProxySocks5

aServer: Proxy'nin sunucu adı.

aPort: Proxy portunun numarası.

aUserName: Oturum açmak için kullanıcı adı; boş olabilir.

aPassword: Oturum açmak için parola; boş olabilir.

Ağ istekleri için bir Socks5 proxy sunucusu ekler. Yetkilendirmeden önce çağrılabilir.
EnableProxy aId: proxy'nin kimliği Bir proxy'yi etkinleştirir. Aynı anda yalnızca bir proxy etkinleştirilebilir. Yetkilendirmeden önce çağrılabilir.
DisableProxy   Şu anda etkin olan proxy'yi devre dışı bırakır. Yetkilendirmeden önce çağrılabilir.
RemoveProxy aId: proxy'nin kimliği Bir proxy sunucusunu kaldırır. Yetkilendirmeden önce çağrılabilir.
GetProxies   Şu anda ayarlanmış proxy'lerin listesini döndürür. Yetkilendirmeden önce çağrılabilir.
getChatSponsoredMessage aChatId: sohbetin Kimliği Bir sohbette gösterilecek sponsorlu mesajı döndürür; yalnızca kanal sohbetleri için. Sohbette sponsorlu mesaj yoksa 404 hatası döndürür.
ViewMessage

aSponsorChatId: Sponsor Sohbetinin ID'si

aMessageId: mesajın kimliği

Mesajların kullanıcı tarafından görüntülendiğini TDLib'e bildirir. Birçok yararlı etkinlik, mesajların şu anda görüntülenip görüntülenmediğine bağlıdır
Logout   Telegram'dan çıkış yapar.
TDLibSend aRequest: JSON İsteği. JSON protokolünde herhangi bir İstek gönderin.

 

 

Örnek: Bir Metin Mesajı Nasıl Gönderilir


oTelegram := TsgcTDLib_Telegram.Create(nil);
oTelegram.Telegram.API.ApiHash := 'your api hash';
oTelegram.Telegram.API.ApiId := 'your api id';
oTelegram.PhoneNumber := 'your phone number';
oTelegram.Active := true;
...
oTelegram.SendTextMessage('1234', 'My First Message from sgcWebSockets');

Uygulanmamış bir yöntem nasıl gönderilir Örneği

 

TDLibSend yöntemini kullanarak Herhangi Bir JSON mesajı gönderebilirsiniz, örnek: bir telegram sohbetine katılın.


oTelegram := TsgcTDLib_Telegram.Create(nil);
oTelegram.Telegram.API.ApiHash := 'your api hash';
oTelegram.Telegram.API.ApiId := 'your api id';
oTelegram.PhoneNumber := 'your phone number';
oTelegram.Active := true;
...
oTelegram.TDLibSend('{"@type": "joinChat", "chat_id": "1234"}');

 

 

Olaylar

OnBeforeReadEvent

Bu olay, Telegram API bileşeni tarafından bir JSON mesajı alındığında ve henüz işlenmediğinde çağrılır. Bu olayı manuel olarak işlerseniz veya olayın bileşen tarafından işlenmesini istemiyorsanız Handled özelliğini True olarak ayarlayın. Tüm mesajları günlüğe kaydetmek için de bu olayı kullanabilirsiniz.

 

OnMessageText

Bu olay, Yeni bir Message Text alındığında çağrılır, mesaj metni özelliklerine erişmek için MessageText parametresini okuyun.

 

 

OnMessageDocument

Bu olay, Yeni bir Document Message alındığında çağrılır. Document özelliklerine erişmek için MessageDocument'a erişin.

 

 

OnMessagePhoto

Bu olay, Yeni bir Fotoğraf Mesajı alındığında çağrılır. Photo özelliklerine erişmek için MessagePhoto öğesine erişin.

 

 

OnVideoPhoto

Bu olay, Yeni bir Video Mesajı alındığında çağrılır. Video özelliklerine erişmek için MessageVideo'ya erişin.

 

 

OnMessageSponsored

Bu olay, yeni bir Sponsorlu Mesaj alındığında (getChatSponsoredMessage yöntemi çağrıldıktan sonra) çağrılır

 

 

OnNewChat

Bu olay, yeni bir sohbet alındığında çağrılır.

 

 

OnNewCallbackQuery

Bu olay, yeni bir gelen callback sorgusu alındığında çağrılır; yalnızca botlar için.

 

 

OnEvent

Bu olay, API Bileşeni tarafından yeni bir Event alındığında çağrılır. API Bileşeni tarafından uygulanmayan bazı olayları işlemek için kullanılabilir.

 

 

OnException

Bu olay, Telegram API Verileri işlenirken herhangi bir istisna olması durumunda çağrılır.

 

Özellikler

MyId: geçerli kullanıcının Kullanıcı Tanımlayıcısını döndürür.

 

Full Code Sample

Telegram API'sine nasıl bağlanılacağını, kullanıcıdan bir Code girmesini istemeyi (Telegram API tarafından gerekiyorsa), bağlantı hazır olduğunda bir mesaj göndermeyi ve alınan Metin Mesajlarını günlüğe kaydetmeyi gösteren aşağıdaki kod örneğini kontrol edin.


oTelegram := TsgcTDLib_Telegram.Create(nil);
oTelegram.Telegram.API.ApiHash := 'your api hash';
oTelegram.Telegram.API.ApiId := 'your api id';
oTelegram.PhoneNumber := 'your phone number';
oTelegram.ApplicationVersion := '1.0';
oTelegram.DeviceModel := 'Desktop';
oTelegram.LanguageCode := 'en';
oTelegram.SystemVersion := 'Windows';
oTelegram.Active := true;
procedure OnAuthenticationCode(Sender: TObject; var Code: string);
begin
  Code := InputBox('Telegram Code', 'Introduce code', '');
end;
procedure OnMessageText(Sender: TObject; MessageText: TsgcTelegramMessageText);
begin
  Log('Message Received: ' + MessageText.Text);
end;
procedure OnConnectionStatus(Sender: TObject; const Status: string);
begin
  if Status = 'connectionStateReady' then
    oTelegram.SendTextMessage('1234', 'Hello Telegram!');
end;