API Telegram

Telegram

 

Telegram bietet zwei Arten von APIs an, eine ist die Bot API, mit der Sie Programme erstellen können, die Bots und HTTPs als Protokoll verwenden. Telegram API und TDLib ermöglichen es Ihnen, angepasste Telegram-Clients zu erstellen, und sind wesentlich leistungsfähiger als die Bot API.

 

sgcWebSockets unterstützt TDLib über die tdjson-Bibliothek, was bedeutet, dass Sie Ihren eigenen Telegram-Client erstellen können. TDLib kümmert sich um alle Details der Netzwerkimplementierung, Verschlüsselung und lokale Datenspeicherung. TDLib unterstützt alle Telegram-Funktionen.

 

TDLib (Telegram Database Library) – Vorteile

 

 

Konfiguration

Windows

 

TDLib erfordert weitere Drittanbieter-Bibliotheken: OpenSSL und ZLib. Diese Bibliotheken müssen zusammen mit der tdjson-Bibliothek bereitgestellt werden.

 

* Windows-Versionen erfordern VCRuntime, das von Microsoft heruntergeladen werden kann: https://www.microsoft.com/en-us/download/details.aspx?id=52685. Wenn das Problem nach der Installation weiterhin besteht, versuchen Sie, die folgenden DLLs in denselben Ordner zu kopieren, in dem sich Ihre Anwendung befindet: VCRUNTIME140.dll und VCRUNTIME140_1.dll.

 

Kopieren Sie die folgenden Bibliotheken in dasselbe Verzeichnis, in dem sich Ihre Anwendung befindet:

 

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

 

Stellen Sie die Bibliothek libtdjson.dylib auf Ihrem Gerät bereit, und Sie können mit SetTDJsonPath festlegen, wo sich die Bibliothek befindet, Beispiel:

 

Wenn Sie nach "Contents\MacOS\" bereitstellen, müssen Sie den Pfad im Ordner TPath.GetDirectoryName(ParamStr(0)) festlegen.

 

OSXARM64

 

Stellen Sie die Bibliothek libtdjson.dylib auf Ihrem Gerät bereit, und Sie können mit SetTDJsonPath festlegen, wo sich die Bibliothek befindet, Beispiel:

 

Wenn Sie nach "Contents\MacOS\" bereitstellen, müssen Sie den Pfad im Ordner TPath.GetDirectoryName(ParamStr(0)) festlegen.

 

Linux64

 

Stellen Sie die Bibliothek libtdjson.so auf Ihrem Gerät bereit und legen Sie den Bibliothekspfad durch Aufruf der Methode SetTDJsonPath fest.

 

Android

 

Stellen Sie die Bibliothek libtdjsonandroid.so auf Ihrem Gerät bereit. Beispiel: Wenn Sie eine Android64-Bibliothek bereitstellen, setzen Sie RemotePath in Project/Deployment auf "library\lib\arm64-v8a\". Bei Android32 setzen Sie RemotePath auf "library\lib\armeabi-v7a\"

 

iOS64

 

Kopieren Sie die Bibliothek libtdjson.a in diese Verzeichnisse:

 

 

Ihre Telegram-Anwendung erstellen

Um eine API-ID zu erhalten und Ihre eigene Anwendung mit der Telegram-API zu entwickeln, müssen Sie Folgendes tun:

 

 

Diese Werte müssen in der Eigenschaft Telegram.API der Telegram-Komponente gesetzt werden. Zur Authentifizierung können Sie sich als Benutzer oder als Bot anmelden; es gibt 2 Eigenschaften, die Sie zum Anmelden bei Telegram setzen können:

 

 

Die folgenden Parameter können konfiguriert werden:

 

 

Optional können Sie den Pfad konfigurieren, unter dem sich die tdjson-Bibliothek befindet, mit der Methode SetTDJsonPath. Übergeben Sie einfach den Pfad, bevor Sie eine neue Telegram-Sitzung starten.

 

Sobald Sie die Telegram-Komponente konfiguriert haben, können Sie die Eigenschaft Active auf true setzen, und das Programm versucht, sich mit Telegram zu verbinden.

 

Beispielcode


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

Es gibt zwei Ereignisse, die von der Bibliothek aufgerufen werden können, um einen Authentifizierungscode (in der Telegram-Anwendung zugestellt, nicht per SMS) zu erhalten oder ein Passwort bereitzustellen.

 

OnAuthenticationCode

 

Dieses Ereignis wird aufgerufen, wenn Telegram einen Autorisierungscode an die Telegram-Anwendung sendet und der Benutzer diesen Code kopieren und im Argument Code dieses Ereignisses setzen muss.

 


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

 

In Android sperrt inputbox den Thread nicht, daher verwenden Sie anstelle der Rückgabe des vom Benutzer eingegebenen Werts im Parameter Code die Methode SetAuthenticationCode, um den Code-Wert festzulegen.

 


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

 

Dieses Ereignis wird aufgerufen, wenn Telegram verlangt, dass der Benutzer ein Passwort festlegt.

 

 

Autorisierungsstatus

Sobald die Autorisierung gestartet wurde, können Sie den Status der Autorisierung im Ereignis OnAuthorizationStatus prüfen; dieses Ereignis wird jedes Mal aufgerufen, wenn sich der Autorisierungsstatus ändert. Einige Werte von Status sind:

 

 

Verbindungsstatus

Sobald die Verbindung gestartet wurde, können Sie den Verbindungsstatus über das Ereignis OnConnectionStatus prüfen; dieses Ereignis wird jedes Mal aufgerufen, wenn sich der Verbindungsstatus ändert. Einige Werte von Status sind:

 

 

Hauptmethoden

Die API-Komponente TsgcTDLib_Telegram unterstützt mehrere Telegram-Methoden; nachfolgend finden Sie die am häufigsten verwendeten.

 

Methode Parameter Beschreibung
SendTextMessage

aChatId: ID des Chats, an den die Nachricht gesendet wird aText: Text der Nachricht.

InlineKeyboard: Optionale Buttons (nur Bots).

Sendet eine Textnachricht an einen Chat
SendRichTextMessage

aChatId: ID des Chats, an den die Nachricht gesendet wird aText: Text der Nachricht.

InlineKeyboard: Optionale Buttons (nur Bots).

Sendet eine Rich-Text-Nachricht an einen Chat. Markdown-Syntax:
  • Bold: **bold**
  • Italic: __italic__
  • Strike: --strike--
  • Underline: ~~underline~~
  • Code: ##code##
SendDocumentMessage aChatId: Id des Chats, an den die Nachricht gesendet wird aFilePath: vollständiger Dateipfad des Dokuments aInlineKeyboard: Optionale Buttons (nur Bots). Sendet ein Dokument an einen Chat.
SendPhotoMessage

aChatId: ID des Chats, an den die Nachricht gesendet wird aFilePath: vollständiger Dateipfad des Fotos

Width: Breite des Fotos.

Height: Breite des Fotos.

InlineKeyboard: Optionale Buttons (nur Bots).

Sendet ein Foto an einen Chat.
SendVideoMessage

aChatId: ID des Chats, an den die Nachricht gesendet wird aFilePath: vollständiger Dateipfad des Videos aWidth: Breite des Videos.

Height: Breite des Videos.

aDuration: Dauer des Videos in Sekunden.

aInlineKeyboard: Optionale Schaltflächen (nur Bots).

Sendet ein Video an einen Chat.
SendInvoiceMessage

aChatId: ID des Chats, an den die Nachricht gesendet wird aInvoice: Text der Nachricht.

aInlineKeyboard: Optionale Schaltflächen (nur Bots).

Sendet eine Rechnung (nur verfügbar, wenn es sich um einen Bot handelt und in privaten Kanälen).
EditTextMessage

aChatId: ID des Chats, an den die Nachricht gesendet wird

aMessageId: ID der zu ändernden Nachricht

Text: Text der Nachricht.

InlineKeyboard: Optionale Buttons (nur Bots).

ShowKeyboard: Optionale Schaltflächen (nur Bots).

Bearbeitet den Text einer Nachricht (oder den Text einer Spielnachricht)
AddChatMember aChatId: ID des Chats, an den die Nachricht gesendet wird aUserId: Bezeichner des Benutzers. aForwardLimit: Die Anzahl früherer Nachrichten aus dem Chat, die an das neue Mitglied weitergeleitet werden sollen; bis zu 100. Bei Supergruppen und Channels ignoriert. Fügt ein neues Mitglied zu einem Chat hinzu. Mitglieder können privaten oder geheimen Chats nicht hinzugefügt werden. Mitglieder werden erst hinzugefügt, wenn der Chat-Zustand mit dem Server synchronisiert wurde.
AddChatMembers aChatId: ID des Chats, an den die Nachricht gesendet wird aUserIds: Bezeichner der Benutzer, die dem Chat hinzugefügt werden sollen. Fügt einem Chat mehrere neue Mitglieder hinzu. Derzeit ist diese Option nur für Supergruppen und Kanäle verfügbar. Diese Option kann nicht verwendet werden, um einem Chat beizutreten. Mitglieder können einem Kanal nicht hinzugefügt werden, wenn er mehr als 200 Mitglieder hat. Mitglieder werden erst hinzugefügt, wenn der Chat-Zustand mit dem Server synchronisiert wurde.
GetChatMember aChatId: Chat-Bezeichner. aUserId: Benutzer-Bezeichner. Gibt Informationen über ein einzelnes Mitglied eines Chats zurück.
GetBasicGroupFullInfo aGroupId: Basic-Group-Bezeichner Gibt vollständige Informationen über eine Basisgruppe anhand ihres Bezeichners zurück.
GetSupergroupMembers

aSuperGroupId: Bezeichner der Supergroup oder des Kanals.

aSupergroupMembersFilter: Der Typ der zurückzugebenden Benutzer. Standardmäßig null aOffset: Anzahl der zu überspringenden Benutzer.

aLimit: Die maximale Anzahl der zurückzugebenden Benutzer; bis zu 200.

Gibt Informationen über Mitglieder oder gesperrte Benutzer in einer Supergruppe oder einem Channel zurück.
JoinChatByInviteLink aLink: Einladungslink zum Importieren; Verwendet einen Einladungslink, um den aktuellen Benutzer dem Chat hinzuzufügen, falls möglich. Das neue Mitglied wird erst hinzugefügt, wenn der Chat-Zustand mit dem Server synchronisiert wurde.
CreateNewSecretChat aUserId: Bezeichner des Benutzers. Erstellt einen neuen geheimen Chat.
CreateNewBasicGroupChat aUserIds: Bezeichner der Benutzer, die zum Chat hinzugefügt werden sollen. aTitle: Titel der neuen Basisgruppe Erstellt eine neue Basisgruppe
CreateNewSupergroupChat

aTitle: Titel der neuen SuperGroup

aIsChannel: True, wenn ein Kanal-Chat erstellt werden soll. aDescription: Chat-Beschreibung.

Erstellt eine neue Supergruppe oder einen neuen Kanal.
CreatePrivateChat

aUserId: Bezeichner des Benutzers.

aForce: Wenn true, wird der Chat ohne Netzwerkanfrage erstellt. In diesem Fall können alle Informationen über den Chat außer Typ, Titel und Foto falsch sein

Gibt einen vorhandenen Chat zurück, der einem bestimmten Benutzer entspricht
GetChats aOffsetOrder: Chat-Reihenfolge, ab der Chats zurückgegeben werden aOffsetChatId: Chat-Bezeichner, ab dem Chats zurückgegeben werden aLimit: Die maximale Anzahl der zurückzugebenden Chats. Gibt eine geordnete Liste von Chats zurück. Chats werden nach dem Paar (order, chat_id) in absteigender Reihenfolge sortiert (kann nicht verwendet werden, wenn als Bot angemeldet)
GetChat aChatId: Chat-Bezeichner Gibt Informationen über einen Chat anhand seines Bezeichners zurück
GetChatHistory

aChatId: Chat-Bezeichner

aFromMessageId: Kennung der Nachricht, ab der der Verlauf abgerufen werden muss; verwenden Sie 0, um Ergebnisse ab der letzten Nachricht zu erhalten.

aOffset: Geben Sie 0 an, um Ergebnisse genau ab from_message_id zu erhalten, oder einen negativen Offset bis zu 99, um zusätzlich einige neuere Nachrichten zu erhalten.

aLimit:Die maximale Anzahl an Nachrichten, die zurückgegeben werden

Gibt Nachrichten in einem Chat zurück. Die Nachrichten werden in umgekehrter chronologischer Reihenfolge zurückgegeben
GetUser aUserId: Benutzerbezeichner Gibt Informationen über einen Benutzer anhand seines Bezeichners zurück.
AddProxyHTTP

aServer: Servername des Proxys.

aPort: Nummer des Proxy-Ports.

aUserName: Benutzername für die Anmeldung; kann leer sein.

aPassword: Passwort für die Anmeldung; kann leer sein.

aHTTPOnly: Übergeben Sie true, wenn der Proxy nur HTTP-Anfragen unterstützt und keine transparenten TCP-Verbindungen über die HTTP-CONNECT-Methode unterstützt.

Fügt einen HTTP-Proxy-Server für Netzwerk-Requests hinzu. Kann vor der Autorisierung aufgerufen werden.
AddProxyMTProto

aServer: Servername des Proxys.

aPort: Nummer des Proxy-Ports. aSecret: Das Secret des Proxys in hexadezimaler Kodierung.

Fügt einen MTProto-Proxy-Server für Netzwerkanfragen hinzu. Kann vor der Autorisierung aufgerufen werden.
AddProxySocks5

aServer: Servername des Proxys.

aPort: Nummer des Proxy-Ports.

aUserName: Benutzername für die Anmeldung; kann leer sein.

aPassword: Passwort für die Anmeldung; kann leer sein.

Fügt einen Socks5-Proxy-Server für Netzwerkanfragen hinzu. Kann vor der Autorisierung aufgerufen werden.
EnableProxy aId: ID des Proxys Aktiviert einen Proxy. Es kann jeweils nur ein Proxy aktiviert werden. Kann vor der Autorisierung aufgerufen werden.
DisableProxy   Deaktiviert den derzeit aktivierten Proxy. Kann vor der Autorisierung aufgerufen werden.
RemoveProxy aId: ID des Proxys Entfernt einen Proxy-Server. Kann vor der Autorisierung aufgerufen werden.
GetProxies   Gibt eine Liste der derzeit eingerichteten Proxys zurück. Kann vor der Autorisierung aufgerufen werden.
getChatSponsoredMessage aChatId: ID des Chats Gibt eine gesponserte Nachricht zurück, die in einem Chat angezeigt werden soll; nur für Kanal-Chats. Gibt einen 404-Fehler zurück, wenn es keine gesponserte Nachricht im Chat gibt.
ViewMessage

aSponsorChatId: ID des Sponsor-Chats

aMessageId: ID der Nachricht

Informiert TDLib, dass Nachrichten vom Benutzer angesehen werden. Viele nützliche Aktivitäten hängen davon ab, ob die Nachrichten gerade angesehen werden oder nicht
Logout   Meldet sich von Telegram ab.
TDLibSend aRequest: JSON-Anfrage. Sendet eine beliebige Anfrage im JSON-Protokoll.

 

 

Beispiel: So senden Sie eine Textnachricht


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

Beispiel: Wie man "Methode nicht implementiert" sendet

 

Sie können jede beliebige JSON-Nachricht mit der TDLibSend-Methode senden, Beispiel: einem Telegram-Chat beitreten.


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

 

 

Ereignisse

OnBeforeReadEvent

Dieses Ereignis wird aufgerufen, wenn eine JSON-Nachricht von der Telegram-API-Komponente empfangen wird und noch nicht verarbeitet wurde. Setzen Sie die Eigenschaft Handled auf True, wenn Sie dieses Ereignis manuell verarbeiten oder nicht möchten, dass das Ereignis von der Komponente verarbeitet wird. Sie können dieses Ereignis auch verwenden, um alle Nachrichten zu protokollieren.

 

OnMessageText

Dieses Ereignis wird aufgerufen, wenn eine neue Textnachricht empfangen wurde; lesen Sie den Parameter MessageText, um auf die Eigenschaften des Nachrichtentextes zuzugreifen.

 

 

OnMessageDocument

Dieses Ereignis wird aufgerufen, wenn eine neue Dokumentnachricht empfangen wird. Greifen Sie auf MessageDocument zu, um auf die Document-Eigenschaften zuzugreifen.

 

 

OnMessagePhoto

Dieses Ereignis wird aufgerufen, wenn eine neue Fotonachricht empfangen wird. Greifen Sie auf MessagePhoto zu, um auf die Photo-Eigenschaften zuzugreifen.

 

 

OnVideoPhoto

Dieses Ereignis wird aufgerufen, wenn eine neue Videonachricht empfangen wird. Greifen Sie auf MessageVideo zu, um Zugriff auf die Video-Eigenschaften zu erhalten.

 

 

OnMessageSponsored

Dieses Ereignis wird aufgerufen, wenn eine neue gesponserte Nachricht empfangen wurde (nach dem Aufruf der Methode getChatSponsoredMessage)

 

 

OnNewChat

Dieses Ereignis wird aufgerufen, wenn ein neuer Chat empfangen wird.

 

 

OnNewCallbackQuery

Dieses Ereignis wird aufgerufen, wenn eine neue eingehende Callback-Abfrage empfangen wird; nur für Bots.

 

 

OnEvent

Dieses Ereignis wird aufgerufen, wenn ein neues Ereignis von der API-Komponente empfangen wird. Es kann verwendet werden, um einige von der API-Komponente nicht implementierte Ereignisse zu verarbeiten.

 

 

OnException

Dieses Ereignis wird aufgerufen, wenn bei der Verarbeitung von Telegram-API-Daten eine Exception auftritt.

 

Properties

MyId: gibt den Benutzerbezeichner des aktuellen Benutzers zurück.

 

Vollständiges Codebeispiel

Sehen Sie sich das folgende Code-Beispiel an, das zeigt, wie eine Verbindung zur Telegram-API hergestellt wird, der Benutzer aufgefordert wird, einen Code einzugeben (falls von der Telegram-API erforderlich), eine Nachricht gesendet wird, wenn die Verbindung bereit ist, und empfangene Textnachrichten protokolliert werden.


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;