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.
Ö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...';
İş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'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.
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ı 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 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.
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
}