API Discord

Discord

Opmerking: Vanaf API v10 is het Discord API-domein gewijzigd van discordapp.com naar discord.com. De component is bijgewerkt om API-versie 10 en het nieuwe domein te gebruiken.

 

Gateways zijn de vorm van realtime communicatie van Discord via beveiligde WebSockets. Clients ontvangen gebeurtenissen en gegevens via de gateway waarmee ze zijn verbonden en sturen gegevens via de REST API.

 

Autorisatie

Eerst moet u een nieuwe Bot genereren en het Bot Token kopiëren dat wordt gebruikt voor authenticatie via de API. Stel dit token vervolgens in de API-component in.

 


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

 

Intenties

Het bijhouden van een stateful toepassing kan moeilijk zijn als het gaat om de hoeveelheid gegevens die u moet verwerken, vooral op schaal. Gateway Intents zijn een systeem om die rekenkundige last te verlichten.

Bij identificatie bij de gateway kunt u een intents-parameter opgeven waarmee u vooraf gedefinieerde "intents" kunt abonneren, groepen van gebeurtenissen gedefinieerd door Discord. Als u een bepaalde intent niet opgeeft, ontvangt u geen van de gateway-gebeurtenissen die in die groep zijn gebatcht. De geldige intents zijn (nulwaarde betekent dat alle gebeurtenissen worden ontvangen):

 

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) = Geheel getal (4096)

- CHANNEL_CREATE

- MESSAGE_CREATE

- MESSAGE_UPDATE

- MESSAGE_DELETE

- CHANNEL_PINS_UPDATE

DIRECT_MESSAGE_REACTIONS (1 << 13) = Geheel getal (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 worden automatisch verwerkt door de component, dus u hoeft zich er geen zorgen over te maken. Wanneer de client verbinding maakt met de server, stuurt de server een HELLO-antwoord met een heartbeat-interval, en de component leest het antwoord en past de heartbeat automatisch aan om elke x seconden een ping te sturen. Soms kan de server een ping naar de client sturen; dit wordt ook automatisch afgehandeld door de client.

 

Verbinding gereed

Wanneer de verbinding gereed is, nadat een succesvolle aanmelding en autorisatie door de server, wordt de gebeurtenis OnDiscordReady geactiveerd en kunt u updates van de server beginnen te ontvangen.

 

Verbinding Hervatten

 

Als de verbinding onverwacht wordt verbroken, roept het component bij de herverbindingspoging de gebeurtenis OnDiscordBeforeReconnect aan. Het component slaat automatisch alle benodigde gegevens op voor een succesvolle hervatie, maar parameters kunnen indien nodig worden gewijzigd. Als u niet opnieuw wilt verbinden en een nieuwe schone sessie wilt starten, stel dan Reconnect in op False.

 

Als de sessie wordt hervat, wordt de gebeurtenis OnDiscordResumed geactiveerd. Als het een nieuwe sessie is, wordt OnDiscordReady geactiveerd.

 

 

Gebeurtenissen verzenden

Gebeurtenissen worden verzonden via OnDiscordDispatch, zodat u hier de gebeurtenissen kunt lezen die door de server naar de client worden gestuurd.

 


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

aEvent-parameter bevat de naam van de gebeurtenis.

RawData bevat het volledige JSON-bericht.

 

HTTP-verzoeken

Om informatie op te vragen over guilds, gebruikers, of gegevens bij te werken... in plaats van gateway websocket-berichten te gebruiken, vereist Discord het gebruik van HTTP-verzoeken. Hieronder vindt u alle beschikbare methoden om een HTTP-verzoek te maken:

 

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;

 

Voorbeeld: huidige gebruikersinformatie ophalen


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

 

voorbeeldrespons van server:


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