API Discord

Discord

Hinweis: Ab API v10 hat sich die Discord-API-Domäne von discordapp.com zu discord.com geändert. Die Komponente wurde aktualisiert, um API-Version 10 und die neue Domäne zu verwenden.

 

Gateways sind Discords Form der Echtzeitkommunikation über sichere WebSockets. Clients empfangen Ereignisse und Daten über das Gateway, mit dem sie verbunden sind, und senden Daten über die REST API.

 

Authorization

Zuerst müssen Sie einen neuen Bot generieren und das Bot-Token kopieren, das zur Authentifizierung über die API verwendet wird. Legen Sie dann dieses Token in der API-Komponente fest.

 


TsgcWSAPI_Discord1.DiscordOptions.BotOptions.Token := '...bot token here...';

 

Intents

Die Pflege einer zustandsbehafteten Anwendung kann schwierig sein, wenn es um die Datenmenge geht, die Sie verarbeiten müssen, insbesondere im großen Maßstab. Gateway Intents sind ein System, das Ihnen hilft, diese Rechenlast zu senken.

Bei der Identifikation gegenüber dem Gateway können Sie einen intents-Parameter angeben, der es Ihnen ermöglicht, bedingt vordefinierte "Intents" zu abonnieren, Gruppen von Ereignissen, die von Discord definiert wurden. Wenn Sie ein bestimmtes Intent nicht angeben, erhalten Sie keine der Gateway-Ereignisse, die in dieser Gruppe zusammengefasst sind. Die gültigen Intents sind (der Wert null bedeutet, dass alle Ereignisse empfangen werden):

 

GUILDS (1 << 0) = Integer (1)

- GUILD_CREATE

- GUILD_DELETE

- GUILD_ROLE_CREATE

- GUILD_ROLE_UPDATE

- GUILD_ROLE_DELETE

- CHANNEL_CREATE

- CHANNEL_UPDATE

- CHANNEL_DELETE

- CHANNEL_PINS_UPDATE

GUILD_MEMBERS (1 << 1) = Integer (2)

- GUILD_MEMBER_ADD

- GUILD_MEMBER_UPDATE

- GUILD_MEMBER_REMOVE

GUILD_BANS (1 << 2) = Integer (4)

- GUILD_BAN_ADD

- GUILD_BAN_REMOVE

GUILD_EMOJIS (1 << 3) = Integer (8)

- GUILD_EMOJIS_UPDATE

GUILD_INTEGRATIONS (1 << 4) = Integer (16)

- GUILD_INTEGRATIONS_UPDATE

GUILD_WEBHOOKS (1 << 5) = Integer (32)

- WEBHOOKS_UPDATE

GUILD_INVITES (1 << 6) = Integer (64)

- INVITE_CREATE

- INVITE_DELETE

GUILD_VOICE_STATES (1 << 7) = Integer (128)

- VOICE_STATE_UPDATE

GUILD_PRESENCES (1 << 8) = Integer (256)

- PRESENCE_UPDATE

GUILD_MESSAGES (1 << 9) = Integer (512)

- MESSAGE_CREATE

- MESSAGE_UPDATE

- MESSAGE_DELETE

GUILD_MESSAGE_REACTIONS (1 << 10) = Integer (1024)

- MESSAGE_REACTION_ADD

- MESSAGE_REACTION_REMOVE

- MESSAGE_REACTION_REMOVE_ALL

- MESSAGE_REACTION_REMOVE_EMOJI

GUILD_MESSAGE_TYPING (1 << 11) = Integer (2048)

- TYPING_START

DIRECT_MESSAGES (1 << 12) = Integer (4096)

- CHANNEL_CREATE

- MESSAGE_CREATE

- MESSAGE_UPDATE

- MESSAGE_DELETE

- CHANNEL_PINS_UPDATE

DIRECT_MESSAGE_REACTIONS (1 << 13) = Integer (8192)

- MESSAGE_REACTION_ADD

- MESSAGE_REACTION_REMOVE

- MESSAGE_REACTION_REMOVE_ALL

- MESSAGE_REACTION_REMOVE_EMOJI

DIRECT_MESSAGE_TYPING (1 << 14) = Integer (16384)

- TYPING_START

 

Heartbeat

Heartbeats werden automatisch von der Komponente behandelt, sodass Sie sich nicht darum kümmern müssen. Wenn sich der Client mit dem Server verbindet, sendet der Server eine HELLO-Antwort mit einem Heartbeat-Intervall, und die Komponente liest die Antwort und passt den Heartbeat automatisch an, um alle x Sekunden ein Ping zu senden. Manchmal kann der Server ein Ping an den Client senden; dies wird ebenfalls automatisch vom Client behandelt.

 

Verbindung bereit

Wenn die Verbindung bereit ist, wird nach einer erfolgreichen Anmeldung und Autorisierung durch den Server das Ereignis OnDiscordReady ausgelöst und Sie können beginnen, Aktualisierungen vom Server zu empfangen.

 

Connection Resume

 

Wenn die Verbindung unerwartet geschlossen wird, ruft der Client beim Versuch, die Verbindung wiederherzustellen, das Ereignis OnDiscordBeforeReconnect auf. Die Komponente speichert automatisch alle für eine erfolgreiche Wiederaufnahme benötigten Daten, aber die Parameter können bei Bedarf geändert werden. Wenn Sie keine Wiederverbindung wünschen und eine neue, saubere Sitzung starten möchten, setzen Sie einfach Reconnect auf False.

 

Wenn die Sitzung wieder aufgenommen wird, wird das Ereignis OnDiscordResumed ausgelöst. Wenn es sich um eine neue Sitzung handelt, wird OnDiscordReady ausgelöst.

 

 

Dispatch Events

Ereignisse werden über OnDiscordDispatch verteilt, sodass Sie hier vom Server an den Client gesendete Ereignisse lesen können.

 


procedure OnDiscordDispatch(Sender: TObject; const aEvent, RawData: string);
begin
  DoLog('#discord dispatch: ' + aEvent + ' ' + RawData);
end;

aEvent Parameter enthält den Ereignisnamen.

RawData enthält die vollständige JSON-Nachricht.

 

HTTP Requests

Um Informationen über Gilden, Benutzer anzufordern oder Daten zu aktualisieren... erfordert Discord anstelle von Gateway-WebSocket-Nachrichten die Verwendung von HTTP-Anfragen. Nachfolgend finden Sie alle verfügbaren Methoden, um eine HTTP-Anfrage zu stellen:

 

function GET_Request(const aPath: String): string;

function POST_Request(const aPath, aMessage: String): string;

function PUT_Request(const aPath, aMessage: String): string;

function PATCH_Request(const aPath, aMessage: String): string;

function DELETE_Request(const aPath: String): string;

 

Beispiel: aktuelle Benutzerinformationen abrufen


result := GET_Request('/users/@me');

 

Beispielantwort vom Server:


{
"id": "637423922035480852",
"username": "test",
"avatar": null,
"discriminator": "5125",
"bot": true,
"email": null,
"verified": true,
"locale": "en-US",
"mfa_enabled": false,
"flags": 0
}