Mesaj bileşenleri
Botlar mesajlarına Discord biçimli components alanını tıpkı Discord'daki gibi ekler; bir tıklama da alışılmış token ve callback akışıyla INTERACTION_CREATE olarak gelir, yani kütüphanelerde değişiklik gerekmez. Bu sayfa GameVox'un neyi gösterdiğini, etkileşimlerin uygulamana nasıl ulaştığını ve sınırların Discord'dan nerede farklılaştığını anlatır.
Neler çalışıyor
- Düğmeler (type 2, stil 1 ile 5 arası) ve metin seçim menüleri (type 3) içeren eylem satırları (type 1). Bağlantı düğmesi (stil 5)
urladresini açar ve hiçbir zaman etkileşim göndermez. - Bulut ve kendi barındırdığın sunucular. Bileşenler mesajla birlikte saklanır; REST okumalarında ve
MESSAGE_CREATE/MESSAGE_UPDATEiçinde döner. Mesajıcomponents: []ile düzenlemek onları kaldırır. - Tüm istemciler. Masaüstü ve web istemcisi, iOS ve Android düğmeleri ve metin seçim menülerini gösterir (mesaj başına en fazla 5 satır, satır başına 5 öğe); modalları ve geçici yanıtları da gösterir.
- Modallar (callback type 9) ve geçici yanıtlar (
flags: 64), aşağıda anlatılıyor.
Bir düğme satırı ve bir seçim menüsü içeren mesaj:
POST /api/v10/channels/{channel_id}/messages
{
"content": "Next map?",
"components": [
{
"type": 1,
"components": [
{ "type": 2, "style": 1, "label": "Vote", "custom_id": "vote" },
{ "type": 2, "style": 5, "label": "Rules", "url": "https://example.com/rules" }
]
},
{
"type": 1,
"components": [
{
"type": 3,
"custom_id": "map",
"placeholder": "Pick a map",
"options": [
{ "label": "Dust", "value": "dust" },
{ "label": "Nuke", "value": "nuke" }
]
}
]
}
]
} Desteklenmeyenler
- Kullanıcı, rol, bahsedilebilir ve kanal seçim menüleri (type 5 ile 8 arası). Kabul edilir ve saklanırlar, ama istemciler bunları devre dışı gösterir, bu yüzden hiçbir zaman etkileşim üretmezler.
- Components v2 düzen bileşenleri. Gösterilmezler.
- Premium düğmeler (stil 6). Devre dışı gösterilirler.
- DM'ler. Bileşen etkileşimleri, modallar ve geçici yanıtlar yalnızca sunucu kanallarında çalışır.
Tıklama almak
Bir tıklama type: 3 (MESSAGE_COMPONENT) olan bir INTERACTION_CREATE olarak gelir; data.custom_id, data.component_type ve seçim menüsündeyse data.values taşır. message, botunun intent'lerinden bağımsız olarak, bileşenleriyle birlikte tıklanan mesajın tamamıdır. Gönderilen bir modal type: 5 (MODAL_SUBMIT) olarak gelir; girilen değerler data.components içindedir.
GameVox her tıklamayı, uygulaman görmeden önce saklanan mesaja göre denetler: öğe hâlâ mesajda ve etkin olmalı, seçim değerleri seçenekler arasında ve min_values / max_values sınırları içinde olmalı, üye de kanalı görebilmelidir. Tıklama yalnızca mesajı gönderen botun uygulamasına iletilir.
Etkileşimler botunun gateway bağlantısı üzerinden iletilir ya da ayarladıysan Etkileşim Endpoint URL'ne POST edilir (bkz. OAuth2). HTTP modunda iki şey Discord'dan farklıdır:
- Yine de bir gateway oturumunu bağlı tut. GameVox her etkileşimi endpoint'ine POST etmeden önce bu oturum üzerinden uygulamana teslim eder. Bağlı oturum yoksa hiçbir şey iletilmez ve tıklayan üyeye uygulamanın çevrimiçi olmadığı söylenir.
- Yanıt gövdesi yok sayılır.
POST /interactions/{id}/{token}/callbackçağırarak yanıtla; POST'a verilen yanıtın gövdesinde döndürülen bir callback kimseye ulaşmaz.
Yanıt vermek
Alışılmış callback endpoint'ini kullan. Etkileşim token'ı 15 dakika geçerlidir.
| Tür | Etkisi |
|---|---|
4 CHANNEL_MESSAGE_WITH_SOURCE | Kanala bir yanıt gönderir. flags: 64 ile yanıt geçicidir. |
5 DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE | Hemen onaylar; ilk PATCH .../messages/@original yanıtı gönderir. flags: 64 ile o yanıt geçicidir. |
6 DEFERRED_UPDATE_MESSAGE | Görünür bir değişiklik olmadan onaylar. Ardından @original tıklanan mesajı gösterir, yani sonraki bir PATCH .../messages/@original onu düzenler. |
7 UPDATE_MESSAGE | Tıklanan mesajı bileşenleriyle birlikte yerinde düzenler. |
9 MODAL | Tıklayan üye için bir modal açar. |
Takip mesajları (etkileşim başına en fazla 5, geçici için flags: 64) ile @original ve takip mesajları üzerindeki GET / PATCH / DELETE, Discord'daki gibi çalışır. Type 4, 5 ve 9 ile geçici yanıtlar slash komutlarında da çalışır; type 6 ve 7 tıklanmış bir mesaj gerektirir.
Geçici yanıtlar
Geçici bir yanıt yalnızca etkileşimi başlatan üyeye, açık olan oturumlarına gider ve yalnızca ona görünür olarak işaretlenir. Kanala hiçbir zaman yazılmaz: mesaj geçmişinde ya da MESSAGE_CREATE içinde yer almaz, üye sayfayı yenilediğinde kaybolur ve uygulaman onu 15 dakika boyunca düzenleyebilir ya da silebilir. Geçici bir yanıttaki bileşenler diğerleri gibi çalışır. Bulut ve kendi barındırdığın sunucularda durum aynıdır.
Modallar
- Metin girişlerinden (type 4) oluşan en fazla 5 eylem satırı. Modaldaki diğer her şey atılır. Stil 1 tek satır, stil 2 paragraftır.
- Başlık ve etiketler 45 karaktere, yer tutucular 100 karaktere kısaltılır. Bir giriş en fazla 4000 karakter alır.
requiredvarsayılan olarak true'dur. - GameVox, uygulaman görmeden önce gönderimi açtığı modala göre denetler (zorunlu alanlar,
min_length,max_length). - Bir modalın süresi 15 dakika sonra dolar ve yalnızca bir kez gönderilebilir.
Sınırlar
- Bir mesajdaki
components: bulut sunucularında 64 KiB JSON; kendi barındırdığın sunucularda 128 KiB ve en üst düzeyde 40 bileşen. Daha büyük bir istek400ile başarısız olur. custom_id: en fazla 100 karakter; daha uzun olanı taşıyan bir öğe kullanılamaz. Seçim menüleri: her biri en fazla 100 karakter olan en fazla 25 değer.- Tıklamalar: üye ve sunucu başına 0,7 saniyede bir bileşen etkileşimi. Kendi barındırdığın bir sunucu ayrıca üye başına 5 saniyede en fazla 5 tıklamaya izin verir. Daha hızlı tıklamalar reddedilir ve uygulamana hiçbir zaman ulaşmaz.
- Geçici yanıtlar ve modallar: her üye için uygulama başına 15 dakikalık bir pencerede toplam 120. Var olanı düzenlemek sayılmaz. Sınır aşılınca istek
429ile başarısız olur. - Geçici yanıt içeriği: en fazla 4000 karakter.