API Telegram

Telegram

 

Telegram oferuje dwa rodzaje API: Bot API umożliwia tworzenie programów korzystających z botów i protokołu HTTPs, natomiast Telegram API i TDLib pozwalają budować niestandardowych klientów Telegram i oferują znacznie więcej możliwości niż Bot API.

 

sgcWebSockets obsługuje TDLib za pośrednictwem biblioteki tdjson, co oznacza, że można zbudować własnego klienta Telegram. TDLib zajmuje się wszystkimi szczegółami implementacji sieciowej, szyfrowaniem i lokalnym przechowywaniem danych. TDLib obsługuje wszystkie funkcje Telegram.

 

Zalety TDLib (Telegram Database Library)

 

 

Konfiguracja

Windows

 

TDLib wymaga innych bibliotek firm trzecich: OpenSSL i ZLib. Biblioteki te muszą być wdrożone razem z biblioteką tdjson.

 

* Wersje Windows wymagają VCRuntime, który można pobrać od firmy Microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=52685. Jeśli problem nadal występuje po instalacji, należy skopiować następujące biblioteki DLL do folderu, w którym znajduje się aplikacja: VCRUNTIME140.dll i VCRUNTIME140_1.dll.

 

Skopiuj następujące biblioteki do tego samego katalogu, w którym znajduje się aplikacja:

 

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

 

Wdróż bibliotekę libtdjson.dylib na urządzeniu i możesz ustawić lokalizację biblioteki za pomocą SetTDJsonPath, na przykład:

 

Jeśli wdrożenie następuje do katalogu „Contents\MacOS\", należy ustawić ścieżkę w folderze TPath.GetDirectoryName(ParamStr(0)).

 

OSXARM64

 

Wdróż bibliotekę libtdjson.dylib na urządzeniu i możesz ustawić lokalizację biblioteki za pomocą SetTDJsonPath, na przykład:

 

Jeśli wdrożenie następuje do katalogu „Contents\MacOS\", należy ustawić ścieżkę w folderze TPath.GetDirectoryName(ParamStr(0)).

 

Linux64

 

Wdróż bibliotekę libtdjson.so na urządzeniu i ustaw ścieżkę biblioteki, wywołując metodę SetTDJsonPath.

 

Android

 

Należy wdrożyć bibliotekę libtdjsonandroid.so na urządzeniu. Przykład: jeśli wdrażana jest biblioteka Android64, należy ustawić RemotePath w Project/Deployment na "library\lib\arm64-v8a\". Dla wersji Android32 należy ustawić RemotePath na "library\lib\armeabi-v7a\".

 

iOS64

 

Skopiuj bibliotekę libtdjson.a do następujących katalogów:

 

 

Tworzenie aplikacji Telegram

Aby uzyskać identyfikator API i opracować własną aplikację korzystającą z Telegram API, należy wykonać następujące czynności:

 

 

Wartości te należy ustawić we właściwości Telegram.API komponentu Telegram. W celu uwierzytelnienia można zalogować się jako użytkownik lub jako bot; dostępne są 2 właściwości, które można ustawić, aby zalogować się do Telegrama:

 

 

Można skonfigurować następujące parametry:

 

 

Opcjonalnie można skonfigurować ścieżkę, w której znajduje się biblioteka tdjson, używając metody SetTDJsonPath. Wystarczy przekazać ścieżkę przed rozpoczęciem nowej sesji Telegram.

 

Po skonfigurowaniu komponentu Telegram można ustawić właściwość Active na true, a program podejmie próbę połączenia z Telegram.

 

Przykładowy 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;

 

Autoryzacja

Istnieją dwa zdarzenia, które mogą być wywoływane przez bibliotekę w celu uzyskania kodu uwierzytelniającego (dostarczanego w aplikacji Telegram, nie SMS-em) lub podania hasła.

 

OnAuthenticationCode

 

To zdarzenie jest wywoływane, gdy Telegram wyśle kod autoryzacyjny do aplikacji Telegram i użytkownik musi skopiować ten kod i wprowadzić go w argumencie Code tego zdarzenia.

 


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

 

W systemie Android pole wprowadzania tekstu nie blokuje wątku, dlatego zamiast zwracać wartość wprowadzoną przez użytkownika w parametrze Code, należy użyć metody SetAuthenticationCode do ustawienia wartości kodu.

 


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

 

To zdarzenie jest wywoływane, gdy Telegram wymaga od użytkownika ustawienia hasła.

 

 

Stan autoryzacji

Po rozpoczęciu autoryzacji można sprawdzać jej status w zdarzeniu OnAuthorizationStatus, wywoływanym za każdym razem, gdy nastąpi zmiana statusu autoryzacji. Niektóre wartości parametru Status to:

 

 

Stan połączenia

Po rozpoczęciu połączenia można sprawdzić jego status za pomocą zdarzenia OnConnectionStatus, które jest wywoływane za każdym razem, gdy zmienia się stan połączenia. Przykładowe wartości Status:

 

 

Główne metody

Komponent API TsgcTDLib_Telegram obsługuje kilka metod Telegrama; poniżej przedstawiono najczęściej używane.

 

Metoda Parametry Opis
SendTextMessage

aChatId: Identyfikator czatu, do którego zostanie wysłana wiadomość aText: Treść wiadomości.

InlineKeyboard: Opcjonalne przyciski (wyłącznie boty).

Wysyła wiadomość tekstową do czatu.
SendRichTextMessage

aChatId: Identyfikator czatu, do którego zostanie wysłana wiadomość aText: Treść wiadomości.

InlineKeyboard: Opcjonalne przyciski (wyłącznie boty).

Wysyła sformatowaną wiadomość tekstową do czatu. Składnia Markdown:
  • Pogrubienie: **bold**
  • Kursywa: __italic__
  • Przekreślenie: --strike--
  • Podkreślenie: ~~underline~~
  • Kod: ##code##
SendDocumentMessage aChatId: Identyfikator czatu, do którego zostanie wysłana wiadomość aFilePath: pełna ścieżka pliku dokumentu aInlineKeyboard: Opcjonalne przyciski (tylko boty). Wysyła dokument do czatu.
SendPhotoMessage

aChatId: Identyfikator czatu, do którego zostanie wysłana wiadomość aFilePath: pełna ścieżka pliku zdjęcia

Width: szerokość zdjęcia.

Height: szerokość zdjęcia.

InlineKeyboard: Opcjonalne przyciski (wyłącznie boty).

Wysyła zdjęcie do czatu.
SendVideoMessage

aChatId: identyfikator czatu, do którego zostanie wysłana wiadomość aFilePath: pełna ścieżka pliku wideo aWidth: szerokość wideo.

Wysokość: szerokość wideo.

aDuration: czas trwania wideo w sekundach.

aInlineKeyboard: Opcjonalne przyciski (tylko dla botów).

Wysyła wideo do czatu.
SendInvoiceMessage

aChatId: Identyfikator czatu, do którego zostanie wysłana wiadomość aInvoice: Treść wiadomości.

aInlineKeyboard: Opcjonalne przyciski (tylko dla botów).

Wysyła fakturę (dostępne tylko gdy jest botem i w kanałach prywatnych).
EditTextMessage

aChatId: Identyfikator czatu, do którego zostanie wysłana wiadomość

aMessageId: Identyfikator wiadomości do zmodyfikowania

Text: Treść wiadomości.

InlineKeyboard: Opcjonalne przyciski (wyłącznie boty).

ShowKeyboard: Opcjonalne przyciski (tylko boty).

Edytuje tekst wiadomości (lub tekst wiadomości gry)
AddChatMember aChatId: Identyfikator czatu, do którego zostanie wysłana wiadomość. aUserId: Identyfikator użytkownika. aForwardLimit: Liczba wcześniejszych wiadomości z czatu do przekazania nowemu członkowi; maksymalnie 100. Ignorowane w przypadku supergroup i kanałów. Dodaje nowego członka do czatu. Nie można dodawać członków do prywatnych lub tajnych czatów. Członkowie nie zostaną dodani, dopóki stan czatu nie zostanie zsynchronizowany z serwerem.
AddChatMembers aChatId: Identyfikator czatu, do którego zostanie wysłana wiadomość. aUserIds: Identyfikatory użytkowników, którzy mają zostać dodani do czatu. Dodaje wielu nowych członków do czatu. Opcja ta jest obecnie dostępna tylko dla supergrup i kanałów. Nie można jej używać do dołączania do czatu. Nie można dodawać członków do kanału, jeśli liczy on więcej niż 200 członków. Członkowie nie będą dodani do momentu zsynchronizowania stanu czatu z serwerem.
GetChatMember aChatId: Identyfikator czatu. aUserId: Identyfikator użytkownika. Zwraca informacje o pojedynczym członku czatu.
GetBasicGroupFullInfo aGroupId: Identyfikator grupy podstawowej Zwraca pełne informacje o grupie podstawowej na podstawie jej identyfikatora.
GetSupergroupMembers

aSuperGroupId: Identyfikator supergrupy lub kanału.

aSupergroupMembersFilter: Typ użytkowników do zwrócenia. Domyślnie null. aOffset: Liczba użytkowników do pominięcia.

aLimit: Maksymalna liczba zwracanych użytkowników; do 200.

Zwraca informacje o członkach lub zbanowanych użytkownikach supergrupy lub kanału.
JoinChatByInviteLink aLink: Link zaproszenia do zaimportowania; Używa łącza z zaproszeniem, aby dodać bieżącego użytkownika do czatu, jeśli jest to możliwe. Nowy członek nie zostanie dodany do chwili zsynchronizowania stanu czatu z serwerem.
CreateNewSecretChat aUserId: Identyfikator użytkownika. Tworzy nowy tajny czat.
CreateNewBasicGroupChat aUserIds: Identyfikatory użytkowników, którzy mają zostać dodani do czatu. aTitle: Tytuł nowej podstawowej grupy Tworzy nową grupę podstawową
CreateNewSupergroupChat

aTitle: Tytuł nowej SuperGrupy

aIsChannel: True, jeśli ma zostać utworzony czat kanałowy. aDescription: Opis czatu.

Tworzy nową supergrупę lub kanał.
CreatePrivateChat

aUserId: Identyfikator użytkownika.

aForce: Jeśli true, czat zostanie utworzony bez żądania sieciowego. W takim przypadku wszystkie informacje o czacie z wyjątkiem jego typu, tytułu i zdjęcia mogą być nieprawidłowe.

Zwraca istniejący czat odpowiadający danemu użytkownikowi
GetChats aOffsetOrder: Kolejność czatów, od której należy zwracać czaty aOffsetChatId: Identyfikator czatu, od którego należy zwracać czaty aLimit: Maksymalna liczba czatów do zwrócenia. Zwraca uporządkowaną listę czatów. Czaty są posortowane według pary (order, chat_id) w kolejności malejącej (nie można użyć, jeśli zalogowany jako Bot)
GetChat aChatId: Identyfikator czatu Zwraca informacje o czacie na podstawie jego identyfikatora
GetChatHistory

aChatId: Identyfikator czatu

aFromMessageId: Identyfikator wiadomości, od której należy pobrać historię; użyj 0, aby pobrać wyniki od ostatniej wiadomości.

aOffset: Podaj 0, aby uzyskać wyniki dokładnie od from_message_id, lub ujemne przesunięcie do 99, aby dodatkowo pobrać nowsze wiadomości.

aLimit:Maksymalna liczba wiadomości do zwrócenia

Zwraca wiadomości w czacie. Wiadomości są zwracane w odwrotnym porządku chronologicznym
GetUser aUserId: Identyfikator użytkownika Zwraca informacje o użytkowniku na podstawie jego identyfikatora.
AddProxyHTTP

aServer: Nazwa serwera proxy.

aPort: Numer portu proxy.

aUserName: nazwa użytkownika do logowania; może być pusta.

aPassword: Hasło do logowania; może być puste.

aHTTPOnly: Przekaż true, jeśli proxy obsługuje tylko żądania HTTP i nie obsługuje przezroczystych połączeń TCP przez metodę HTTP CONNECT.

Dodaje serwer proxy HTTP dla żądań sieciowych. Można wywołać przed autoryzacją.
AddProxyMTProto

aServer: Nazwa serwera proxy.

aPort: Numer portu proxy. aSecret: Sekret proxy w kodowaniu szesnastkowym.

Dodaje serwer proxy MTProto dla żądań sieciowych. Może być wywołane przed autoryzacją.
AddProxySocks5

aServer: Nazwa serwera proxy.

aPort: Numer portu proxy.

aUserName: nazwa użytkownika do logowania; może być pusta.

aPassword: Hasło do logowania; może być puste.

Dodaje serwer proxy Socks5 dla żądań sieciowych. Może być wywołane przed autoryzacją.
EnableProxy aId: Identyfikator proxy Włącza serwer proxy. Jednocześnie może być włączony tylko jeden serwer proxy. Może być wywoływane przed autoryzacją.
DisableProxy   Wyłącza aktualnie włączone proxy. Można wywołać przed autoryzacją.
RemoveProxy aId: Identyfikator proxy Usuwa serwer proxy. Może być wywołana przed autoryzacją.
GetProxies   Zwraca listę aktualnie skonfigurowanych serwerów proxy. Można wywołać przed autoryzacją.
getChatSponsoredMessage aChatId: Identyfikator czatu Zwraca sponsorowaną wiadomość do wyświetlenia na czacie; tylko dla czatów kanałowych. Zwraca błąd 404, jeśli na czacie nie ma sponsorowanej wiadomości.
ViewMessage

aSponsorChatId: Identyfikator czatu sponsora

aMessageId: identyfikator wiadomości

Informuje TDLib, że użytkownik aktualnie przegląda wiadomości. Wiele przydatnych operacji zależy od tego, czy wiadomości są w danej chwili wyświetlane
Wylogowanie   Wylogowuje z Telegrama.
TDLibSend aRequest: Żądanie JSON. Wyślij dowolne żądanie w protokole JSON.

 

 

Przykład wysyłania wiadomości tekstowej


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');

Przykład: wysyłanie odpowiedzi „metoda nie zaimplementowana"

 

Dowolną wiadomość JSON można wysłać za pomocą metody TDLibSend, na przykład w celu dołączenia do czatu Telegram.


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"}');

 

 

Zdarzenia

OnBeforeReadEvent

Zdarzenie jest wywoływane, gdy komponent API Telegram odbierze wiadomość JSON, która nie została jeszcze przetworzona. Należy ustawić właściwość Handled na True, jeśli zdarzenie jest przetwarzane ręcznie lub nie ma być obsługiwane przez komponent. Zdarzenia można również używać do rejestrowania wszystkich wiadomości.

 

OnMessageText

Zdarzenie wywoływane po odebraniu nowej wiadomości tekstowej; należy odczytać parametr MessageText, aby uzyskać dostęp do właściwości tekstu wiadomości.

 

 

OnMessageDocument

Zdarzenie jest wywoływane po odebraniu nowej wiadomości dokumentu. Dostęp do właściwości dokumentu można uzyskać przez MessageDocument.

 

 

OnMessagePhoto

Zdarzenie jest wywoływane po odebraniu nowej wiadomości ze zdjęciem. Dostęp do właściwości zdjęcia uzyskuje się za pośrednictwem obiektu MessagePhoto.

 

 

OnVideoPhoto

To zdarzenie jest wywoływane po odebraniu nowej wiadomości wideo. Dostęp do MessageVideo umożliwia odczyt właściwości wideo.

 

 

OnMessageSponsored

To zdarzenie jest wywoływane po odebraniu nowej sponsorowanej wiadomości (po wywołaniu metody getChatSponsoredMessage)

 

 

OnNewChat

To zdarzenie jest wywoływane po odebraniu nowego czatu.

 

 

OnNewCallbackQuery

To zdarzenie jest wywoływane po odebraniu nowego przychodzącego zapytania zwrotnego; tylko dla botów.

 

 

OnEvent

Zdarzenie to jest wywoływane, gdy komponent API odbierze nowe zdarzenie. Może być używane do przetwarzania zdarzeń niezaimplementowanych przez komponent API.

 

 

OnException

To zdarzenie jest wywoływane, gdy podczas przetwarzania danych Telegram API wystąpi wyjątek.

 

Właściwości

MyId: zwraca identyfikator bieżącego użytkownika.

 

Pełny przykład kodu

Zapoznaj się z poniższym przykładem kodu, który pokazuje, jak połączyć się z Telegram API, poprosić użytkownika o wprowadzenie kodu (jeśli jest to wymagane przez Telegram API), wysłać wiadomość po nawiązaniu połączenia oraz rejestrować odbierane wiadomości tekstowe.


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;