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ı
Platformlar arası: Windows, Android, iOS, MacOS, Linux... üzerinde kullanılabilir
Kullanımı kolay: uygulama ile telegram arasında iletişim kurmak için json mesajları kullanır.
Yüksek performans: Telegram Bot API'sinde her TDLib örneği 24000'den fazla botu işler.
Consistent: TDLib, tüm güncellemelerin doğru sırada teslim edileceğini garanti eder.
Güvenilir: TDLib, yavaş ve güvenilmez internet bağlantılarında kararlı kalır.
Secure: Tüm yerel veriler, kullanıcı tarafından sağlanan bir şifreleme anahtarı kullanılarak şifrelenir.
Tamamen Asenkron: TDLib'e gönderilen istekler birbirini engellemez. Yanıtlar, kullanılabilir olduklarında gönderilir.
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:
C:\Program Files (x86)\Embarcadero\Studio\<IDE Version>\lib\iosDevice64\debug
C:\Program Files (x86)\Embarcadero\Studio\<IDE Version>\lib\iosDevice64\release
Bir API id'si almak ve Telegram API'sini kullanarak kendi uygulamanızı geliştirmek için aşağıdakileri yapmanız gerekir:
Herhangi bir uygulamayı kullanarak Telegram'a kaydolun.
Telegram core'unuza giriş yapın: https://my.telegram.org.
API development tools öğesine gidin ve formu doldurun.
Temel adreslerin yanı sıra, kullanıcı yetkilendirmesi için gereken api_id ve api_hash parametrelerini de alırsınız.
Şimdilik her numara, ona bağlı yalnızca bir api_id içerebilir.
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:
PhoneNumber: bir kullanıcı olarak oturum açıyorsanız, telefon numaranızı (uluslararası kodla) ayarlamalısınız, örnek: +34699123456
BotToken: bir bot olarak oturum açarsanız, token'inizi bu özellikte ayarlayın (telegram tarafından sağlandığı şekilde).
DatabaseDirectory: tdlib veritabanının nerede olduğunu belirtmenize olanak tanır. Boş bırakırsanız varsayılan yapılandırmayı kullanır.
Aşağıdaki parametreler yapılandırılabilir:
ApplicationVersion: uygulama sürümü, örnek: 1.0
DeviceModel: cihaz modeli, örnek: desktop
LanguageCode: kullanıcı dil kodu, örnek: en.
SystemVersion: işletim sisteminin sürümü, örnek: windows.
İ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;
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 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ı 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:
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:
|
| 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"}');
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.
MyId: geçerli kullanıcının Kullanıcı Tanımlayıcısını döndürür.
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;