N'oluyo · Geliştirici Dokümanları · Son güncelleme: · https://noluyo.net/gelistirici

Intent'ler

Bot, sunucularında olan biten her şeyi duymak zorunda değil. Yalnızca !ping'e yanıt veren bir botun, kimin hangi ses kanalına girdiğini bilmesine gerek yok. Intent, botun hangi olay gruplarını almak istediğini söylediği seçimdir. İstemediğin olaylar sana hiç gönderilmez, programın da onlarla boşuna uğraşmaz.

Intent'ler

Bot, sunucularında olan biten her şeyi duymak zorunda değil. Yalnızca !ping'e yanıt veren bir botun, kimin hangi ses kanalına girdiğini bilmesine gerek yok. Intent, botun hangi olay gruplarını almak istediğini söylediği seçimdir. İstemediğin olaylar sana hiç gönderilmez, programın da onlarla boşuna uğraşmaz.

Intent'leri identify çerçevesinde bir sayı olarak gönderirsin. Bu alan zorunludur.

Intent'ler ve değerleri

IntentBitDeğerNe açarAyrıcalıklı
GUILDS01Sunucular, roller, kanallar, sabitlemeler
GUILD_MEMBERS12Üye katılma, değişme, ayrılma; op 8 ve GET /guilds/{guild_id}/members ile tam listeEvet
GUILD_MODERATION24Yasaklar
GUILD_EXPRESSIONS38Emoji, çıkartma, ses paneli
GUILD_WEBHOOKS532Webhook değişiklikleri
GUILD_INVITES664Davetler
GUILD_VOICE_STATES7128Seste kimlerin olduğu, orada çalınan sesler
GUILD_PRESENCES8256Üyelerin çevrimiçi durumu ve etkinlikleriEvet
GUILD_MESSAGES9512Sunucu kanallarındaki mesajlar
GUILD_MESSAGE_REACTIONS101024Sunucu kanallarındaki tepkiler
GUILD_MESSAGE_TYPING112048Sunucu kanallarında yazıyor bilgisi
DIRECT_MESSAGES124096Kişilerin botunla açtığı DM'lerdeki mesajlar; içerik MESSAGE_CONTENT olmadan da tam gelir
DIRECT_MESSAGE_REACTIONS138192DM'lerdeki tepkiler
DIRECT_MESSAGE_TYPING1416384DM'lerde yazıyor bilgisi
MESSAGE_CONTENT1532768Mesajların içeriğiEvet
GUILD_SCHEDULED_EVENTS1665536Zamanlanmış etkinlikler
AUTO_MODERATION_CONFIGURATION201048576Otomatik moderasyon kuralları

Hangi olayın hangi intent'e bağlı olduğu Olaylar sayfasında, her olayın altında yazar.

Bazı olaylar intent istemez, her oturuma gider: READY, RESUMED, RATE_LIMITED, GUILD_MEMBERS_CHUNK ve botun kendi profilini anlatan USER_UPDATE. Botun kendi üyeliğiyle ilgili üye olayları da GUILD_MEMBERS olmadan gelir.

Değeri hesaplamak

İstediğin intent'lerin değerlerini topla ya da bitlerini | ile birleştir:

const GUILDS = 1 << 0;
const GUILD_MESSAGES = 1 << 9;
const MESSAGE_CONTENT = 1 << 15;

const intents = GUILDS | GUILD_MESSAGES | MESSAGE_CONTENT; // 33281

Değer sayı olarak gönderilir, metin olarak değil. Yoksa, sayı değilse ya da listede olmayan bir bit içeriyorsa bağlantı 4013 ile kapanır. 0 geçerlidir: bot o zaman yalnızca intent istemeyen olayları alır.

Ayrıcalıklı intent'ler

Üç intent hassas veri açar: GUILD_MEMBERS, GUILD_PRESENCES ve MESSAGE_CONTENT. Bunları istemeden önce portalda uygulama sayfasının Ayrıcalıklı intent'ler bölümünden açman gerekir. Portaldaki adları Sunucu üyeleri, Presence ve Mesaj içeriği'dir.

Açmadığın bir ayrıcalıklı intent'i identify'da istersen bağlantı 4014 ile kapanır.

REST'te üye listesi. GET /guilds/{guild_id}/members aynı kurala uyar; bir bağlantı olmadığı için portalın o anki haline bakar. GUILD_MEMBERS yoksa 403 member_list_intent_required döner. Tek üye istemek, GET /guilds/{guild_id}/members/{user_id}, intent istemez.

100 sınırı. Bot 100'den az sunucudaysa bu seçim senindir, açman yeter. Bot 100 ya da daha çok sunucudaysa yalnızca onaylanmış ayrıcalıklı intent'ler geçerlidir: açık ama onaysız bir intent'i istersen yine 4014 gelir, onaysız yeni bir intent'i açmak ise 400 intent_approval_required döner. Onay başvurusu ve gerekçe örnekleri Doğrulama sayfasındadır.

Açık bir oturum, identify ettiği intent'lerle sürer. Portaldaki değişiklik canlı oturumu şöyle etkiler:

  • Bir intent'i açarsan çalışan oturum bunu kendiliğinden kazanmaz. Yeni intent'i kullanmak için programını yeniden başlat ve yeniden identify et; resume yetmez, çünkü resume aynı oturumu sürdürür.
  • Bir intent'i kapatırsan botun bağlantıları hemen düşer ve oturumlar sürdürülemez. Kapattığın intent'i artık istemeden yeniden identify et, yoksa 4014 alırsın.

Mesaj içeriği kuralı

GUILD_MESSAGES, mesajların yazıldığını haber verir. Ne yazdığını okumak ise ayrı bir intent ister: MESSAGE_CONTENT. Bu intent olmayan bir bot MESSAGE_CREATE ve MESSAGE_UPDATE olaylarını yine alır, ama içeriği süzülmüş olarak.

İki istisnada mesaj tam gelir:

  • Mesajı botun kendisi yazdıysa.
  • Mesaj botu adıyla etiketliyorsa, yani bot mesajın mentions listesindeyse. Rol etiketi ve @everyone bu sayılmaz.

Süzülmüş bir mesajda content boş metin, attachments boş liste olur. Şu alanlar kalır, diğerlerinin hepsi çıkarılır:

id, type, channel_id, guild_id, author, timestamp, edited_timestamp, mentions, mention_roles, mention_everyone, message_reference, pinned, nonce, webhook_id, reactions, activity

Çıkarılanlar arasında çıkartmalar (sticker_items), anketler (poll), iletilen mesajlar (forward) ve mesajın başka tüm içerik alanları vardır. Boş content hata değildir: "içerik görme iznin yok" demektir.

REST okumaları da aynı kurala uyar

Gateway'de kapalı olan içeriği REST'ten okuyamazsın. Sunucu kanallarında mesaj listesi, tek mesaj ve sabitlenenler aynı süzmeyi uygular, aynı iki istisnayla.

Tek fark şudur: REST isteğinde intent göndermezsin, bu yüzden uygulamanın portaldaki ayarına bakılır, oturumun identify ettiği intent'lere değil. Yani Mesaj içeriği açıksa (ve bot 100 ya da daha çok sunucudaysa onaylıysa) REST tam içerik döner; identify'da MESSAGE_CONTENT istememiş olsan bile.

İletme de aynı kurala uyar

Okuyamadığın mesajı iletemezsin, yoksa iletilen kopyayı okuyarak kuralı aşmış olurdun. Mesaj içeriği kapalı bir bot, kendisinin yazmadığı ve kendisini etiketlemeyen bir mesajı forward ile göndermeye çalışırsa 400 validation_failed alır: {"forward":"invalid"}.

Etkileşim intent istemez

INTERACTION_CREATE hiçbir intent'e bağlı değildir: bir kişi botunun bileşenine bastıysa bot bunu intents: 0 ile de alır. Olayın taşıdığı message botun kendi mesajı olduğu için MESSAGE_CONTENT kuralına da takılmaz, seçilen üye GUILD_MEMBERS olmadan da resolved içinde gelir. Ayrıntı Bileşenler sayfasında.

Bu sayfayı yapay zekaya verirsen

Sırada ne var