API Discord

Discord

Not: API v10 itibarıyla, Discord API etki alanı discordapp.com'dan discord.com'a değişti. Bileşen, API sürüm 10'u ve yeni etki alanını kullanacak şekilde güncellendi.

 

Gateway'ler, Discord'un güvenli WebSocket'ler üzerinden gerçek zamanlı iletişim biçimidir. İstemciler, bağlı oldukları gateway üzerinden olayları ve verileri alır ve verileri REST API üzerinden gönderir.

 

Authorization

Önce yeni bir Bot oluşturmalı ve API üzerinden kimlik doğrulamak için kullanılacak Bot Token'ını kopyalamalısınız. Ardından bu token'ı API Bileşeninde ayarlayın.

 


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

 

Intents

İşlemeniz gereken veri miktarı söz konusu olduğunda, özellikle ölçekte, durum bilgisi olan bir uygulamayı sürdürmek zor olabilir. Gateway Intents, bu hesaplama yükünü azaltmanıza yardımcı olacak bir sistemdir.

Gateway'e kimliğinizi bildirirken, önceden tanımlanmış "intent"lere (Discord tarafından tanımlanan olay gruplarına) koşullu olarak abone olmanıza olanak tanıyan bir intents parametresi belirtebilirsiniz. Belirli bir intent belirtmezseniz, o gruba toplanan gateway olaylarının hiçbirini almazsınız. Geçerli intent'ler şunlardır (sıfır değeri tüm olayların alındığı anlamına gelir):

 

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

Heartbeat'ler bileşen tarafından otomatik olarak işlenir, bu nedenle onlar hakkında endişelenmenize gerek yoktur. İstemci sunucuya bağlandığında, sunucu bir heartbeat aralığı içeren bir HELLO yanıtı gönderir ve bileşen yanıtı okur ve her x saniyede bir ping göndermek için heartbeat'i otomatik olarak ayarlar. Bazen sunucu istemciye bir ping gönderebilir; bu da istemci tarafından otomatik olarak işlenir.

 

Connection Ready

Bağlantı hazır olduğunda, sunucu tarafından başarılı bir oturum açma ve yetkilendirmenin ardından OnDiscordReady olayı tetiklenir ve ardından sunucudan güncellemeler almaya başlayabilirsiniz.

 

Bağlantı Sürdürme (Resume)

 

Bağlantı beklenmedik bir şekilde kapanırsa, istemci yeniden bağlanmaya çalıştığında, OnDiscordBeforeReconnect olayını çağırır. Bileşen, başarılı bir devam ettirme yapmak için gereken tüm verileri otomatik olarak kaydeder, ancak gerekirse parametreler değiştirilebilir. Yeniden bağlanmak istemiyor ve yeni temiz bir oturum başlatmak istiyorsanız, Reconnect değerini False olarak ayarlayın.

 

Oturum sürdürülürse, OnDiscordResumed olayı tetiklenir. Yeni bir oturumsa, OnDiscordReady tetiklenir.

 

 

Olayları Dağıt

Olaylar OnDiscordDispatch aracılığıyla gönderilir, böylece burada sunucu tarafından istemciye gönderilen olayları okuyabilirsiniz.

 


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

aEvent parametresi olay adını içerir.

RawData tam JSON mesajını içerir.

 

HTTP Requests

Guild'ler, kullanıcılar hakkında bilgi istemek veya verileri güncellemek için... gateway websocket mesajları kullanmak yerine, Discord HTTP isteklerinin kullanılmasını gerektirir, Bir HTTP isteği yapmak için kullanılabilir tüm yöntemleri aşağıda bulun:

 

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;

 

Örnek: geçerli kullanıcı bilgilerini al


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

 

sunucudan örnek yanıt:


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