API Discord

Discord

Note : à partir de l'API v10, le domaine de l'API Discord est passé de discordapp.com à discord.com. Le composant a été mis à jour pour utiliser la version 10 de l'API et le nouveau domaine.

 

Les passerelles sont la forme de communication en temps réel de Discord via des WebSockets sécurisés. Les clients reçoivent des événements et des données via la passerelle à laquelle ils sont connectés et envoient des données via l'API REST.

 

Autorisation

Vous devez d'abord générer un nouveau Bot et copier le jeton Bot qui sera utilisé pour s'authentifier via l'API. Définissez ensuite ce jeton dans le composant API.

 


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

 

Intentions

Maintenir une application avec état peut être difficile en raison de la quantité de données à traiter, surtout à grande échelle. Les Gateway Intents sont un système pour vous aider à réduire cette charge de calcul.

Lors de l'identification auprès de la passerelle, vous pouvez spécifier un paramètre intents qui vous permet de vous abonner conditionnellement à des « intents » prédéfinis, groupes d'événements définis par Discord. Si vous ne spécifiez pas un certain intent, vous ne recevrez aucun des événements de passerelle regroupés dans ce groupe. Les intents valides sont (valeur zéro signifie que tous les événements sont reçus) :

 

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

Les battements de cœur sont gérés automatiquement par le composant, vous n'avez donc pas à vous en préoccuper. Lorsque le client se connecte au serveur, le serveur envoie une réponse HELLO avec un intervalle de battement de cœur, et le composant lit la réponse et ajuste automatiquement le battement de cœur pour envoyer un ping toutes les x secondes. Parfois, le serveur peut envoyer un ping au client ; cela est également géré automatiquement par le client.

 

Connexion prête

Lorsque la connexion est prête, après un login et une autorisation réussis par le serveur, l'événement OnDiscordReady est déclenché et vous pouvez alors commencer à recevoir des mises à jour du serveur.

 

Reprise de connexion

 

Si la connexion se ferme de manière inattendue, lorsque le client tente de se reconnecter, il appelle l'événement OnDiscordBeforeReconnect. Le composant sauvegarde automatiquement toutes les données nécessaires pour effectuer une reprise réussie, mais les paramètres peuvent être modifiés si nécessaire. Si vous ne souhaitez pas vous reconnecter et démarrer une nouvelle session propre, définissez simplement Reconnect sur False.

 

Si la session est reprise, l'événement OnDiscordResumed est déclenché. S'il s'agit d'une nouvelle session, OnDiscordReady sera déclenché.

 

 

Distribuer les événements

Les événements sont distribués via OnDiscordDispatch, vous pouvez donc y lire les événements envoyés par le serveur au client.

 


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

aEvent le paramètre contient le nom de l'événement.

RawData contient le message JSON complet.

 

Requêtes HTTP

Pour demander des informations sur les guildes, les utilisateurs ou mettre à jour des données... au lieu d'utiliser des messages WebSocket de passerelle, Discord requiert l'utilisation de requêtes HTTP. Vous trouverez ci-dessous toutes les méthodes disponibles pour effectuer une requête HTTP :

 

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;

 

Exemple : obtenir les informations de l'utilisateur actuel


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

 

exemple de réponse du serveur :


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