Discord ayrıcalıklı gateway intent'leri, bir botun sahibinin Geliştirici Portalı'nda açması gereken üç isteğe bağlı izindir (Presence, Server Members ve Message Content). Discord, bu veriyi gateway üzerinden göndermeden önce bu izinlerin açık olmasını ister. Bunlar var çünkü üye listeleri ve mesaj metinleri varsayılan olarak hassas veridir. Birini kaçırırsanız bot yüksek sesle hata vermez; yalnızca ihtiyaç duyduğu olayları sessizce görmeyi bırakır. Bu yüzden "botum çevrimiçi ama hiçbir şey yapmıyor" şikayetinin çoğu bir intent anahtarına dayanır.
Gateway intent'i gerçekte nedir
Bir bot Discord'a bağlandığında, bulunduğu her sunucudaki her olayı otomatik olarak almaz. Intent adı verilen olay kategorilerine abone olur: mesaj olayları, ses durumu olayları, sunucu güncelleme olayları ve benzerleri. Çoğu intent kodda ücretsiz olarak bildirilir ve Discord bunları sormadan verir. Üç tanesi farklıdır. Discord bunlara ayrıcalıklı intent der, çünkü arkalarındaki veri (bir sunucuda tam olarak kimin olduğu ve üyelerin ne yazdığı) o kadar güçlüdür ki sahibinin yalnızca kodda değil, Geliştirici Portalı üzerinden de açıkça onay vermesini ister.
Bir botun kodu ayrıcalıklı bir intent isterse ama sahibi o uygulama için bunu açmamışsa Discord girişi doğrudan reddeder. Bot kısıtlı bir modda çevrimiçi olmaz; hiç bağlanmaz ve gateway "disallowed intents" (izin verilmeyen intent'ler) hatasıyla kapanır.
Üç ayrıcalıklı intent
- Presence Intent. Her üyenin çevrimiçi/boşta/çevrimdışı durumu ve özel etkinlikleri. Canlı durum verisi gösteren botlar kullanır; Noxyr dahil çoğu bilet, moderasyon ve ticaret botu buna ihtiyaç duymaz.
- Server Members Intent. Tam üye listesi, katılma ve ayrılma olayları, rol değişiklikleri ve takma ad güncellemeleri. Hoş geldin mesajlarının, üye sayılarının ve baskın tespitinin arkasındaki intent budur.
- Message Content Intent. Mesajın yalnızca gönderildiği bilgisi değil, gerçek metni. Bu intent olmadan bot, birinin bir kanala yazdığını görebilir ama ne yazdığını göremez.
Noxyr'in kodu üç intent'in ikisini ister: Server Members Intent ve Message Content Intent. Presence Intent hiçbir Noxyr özelliğinin parçası değildir; bu yüzden hiçbir zaman istenmez ve açılması gerekmez.
Server Members Intent olmadan neler bozulur
Server Members Intent, bir botun GUILD_MEMBER_ADD ve GUILD_MEMBER_REMOVE olaylarını almasını sağlar; neredeyse tüm üyelik özellikleri bu katılma ve ayrılma olaylarına dayanır.
- Hoş geldin mesajları. Hoş geldin mesajı katılımda tetiklenir. Intent olmadan bot katılma olayını hiç almaz; bu yüzden hiçbir mesaj gönderilmez ve otomatik rol atanmaz.
- Üye sayıları. Canlı üye sayısı kanalı veya widget'ı aynı katılma/ayrılma olaylarından güncellenir. Intent olmadan son görülen sayıda donar kalır.
- Anti-nuke ve baskın koruması. Toplu katılma baskınını tespit etmek veya şüpheli rol ve takma ad değişikliklerini izlemek üye olaylarına bağlıdır. Intent'i kapatırsanız bu tespit yolunun tamamı devre dışı kalır.
- Doğrulama akışları. Bir üyenin katılma tarihini, rollerini veya hesap yaşını kontrol eden her kapı, intent'in sağladığı üye nesnesine ihtiyaç duyar.
Message Content Intent olmadan neler bozulur
Message Content Intent, bir mesajın gerçek metnine erişimi denetler. Bu intent olmadan bot, bir kanala mesaj geldiğini ve kimin gönderdiğini yine görebilir; yalnızca ne yazıldığını okuyamaz.
- Otomatik yanıtlayıcılar. "iade" veya "nasıl ödeme yapabilirim" gibi bir tetikleyici kelimeyi eşleştirmek mesaj metnini okumayı gerektirir. İçerik yoksa eşleşme de yoktur, yanıt da.
- Yapay zeka sohbet yanıtları. Bir kanalda veya etiketlendiğinde soruları yanıtlayan bir yapay zeka asistanı, sorunun kendisine ihtiyaç duyar. Intent olmadan birinin konuştuğunu bilir ama modele gönderecek bir şeyi yoktur.
- Bilet dökümleri. Bir biletteki personelin ve üyelerin gerçekte ne söylediğini kaydeden bir döküm, içeriği kaydetmek için mesaj içeriğine ihtiyaç duyar; bu olmadan yalnızca zaman damgaları ve kullanıcı adlarından oluşan bir liste elde edersiniz.
- Önek tabanlı moderasyon. Mesajları yasaklı kelimeler, davet bağlantıları veya spam kalıpları için tarayan her şey, otomatik yanıtlayıcının yaptığı gibi içeriği okur.
Slash komutları bu durumdan etkilenmez; Discord komut girdisini normal mesajlardan ayrı iletir. Bu intent'e bağlı olan özellikler özellikle, üyelerin normal mesajlarda yazdıklarını okuyan özelliklerdir.
Geliştirici Portalı'nda intent'ler nasıl etkinleştirilir
- Discord Geliştirici Portalı'nı açın ve botun uygulamasını seçin.
- Sol kenar çubuğunda Bot'a tıklayın.
- Privileged Gateway Intents bölümüne kaydırın.
- Server Members Intent ve Message Content Intent'i açın (Presence Intent'i yalnızca bir bot gerçekten canlı durum verisine ihtiyaç duyuyorsa ekleyin).
- Değişiklikleri kaydedin, ardından botu yeniden başlatın veya bağlantısını yenileyin; böylece bir sonraki girişte yeni intent'leri alır.
Anahtar, zaten oturum açmış bir botta hemen etkili olmaz; bir sonraki gateway bağlantısında geçerli olur. Oturum sırasında bir intent kapatılırsa Discord botu genellikle bağlantıdan çıkarır ve intent tekrar açıldıktan sonra yeniden bağlanması gerekir.
100 sunucu doğrulama kuralı
Portaldaki anahtarı açmak, 100'den az sunucudaki bir bot için yeterlidir. Bir botun kurulu olduğu sunucu sayısı 100'ü aştığında Discord, uygulamanın bot doğrulamasından geçmesini ister; yani sahibinin botu incelemeye gönderdiği ve onay aldığı bir süreç. Bu süreç tamamlanmadan bu ölçekte ayrıcalıklı intent'leri kullanamaz. Doğrulanmamış bir bot eşiği aştığında zaten bulunduğu sunuculara çalışmaya devam eder, ama doğrulama verilene ya da kesinlikle gerekmeyen ayrıcalıklı intent'ler bırakılana kadar yeni sunuculara katılması engellenir.
Bu bir Discord platform kuralıdır; hiçbir bireysel bot barındırıcısı bunu kontrol etmez. Server Members ve Message Content gibi veri hassasiyeti olan intent'lerin, Discord'un botun bu verilerle ne yaptığını incelemeden ölçekli biçimde dağıtılmaması için vardır.
Noxyr bir token'ı kabul etmeden önce neden iki intent'i de kontrol eder
Noxyr'in Custom Bot özelliği tam özellik setini, sizin sağladığınız bir bot token'ı altında çalıştırır. Hoş geldin mesajları, üye sayıları, yapay zeka sohbeti, bilet dökümleri ve otomatik yanıtlayıcıların tümü yukarıdaki iki intent'e bağlı olduğundan, panel token'ınızı kabul etmeden önce Server Members Intent ve Message Content Intent'in açık olduğunu kontrol eder. İkisi de kapalıyken yapıştırılan bir token baştan reddedilir; kabul edilip daha sonra kafa karıştırıcı bir gateway hatasıyla sessizce başarısız olmasına izin verilmez.
Bot zaten çalışırken bir intent kapatılırsa (örneğin birisi aylar sonra portaldaki kutuyu kaldırırsa), Discord gateway bağlantısını 4013 veya 4014 koduyla kapatır. Noxyr'in barındırma düğümleri bu özel kapatma kodunu yakalar, botu kapatır ve hangi ayarı düzeltmeniz gerektiğini açıkça belirten sade bir durum mesajı gönderir; böylece bot sessiz bir yeniden bağlanma döngüsünde takılı kalmaz. Bu hatanın ve diğer yaygın çevrimdışı nedenlerinin tam dökümü gateway hatası 4004/4014 sorun giderme rehberimizde yer alıyor.
Sık sorulan sorular
Noxyr'in Custom Bot'u için Presence Intent gerekir mi? Hayır. Noxyr yalnızca Server Members Intent ve Message Content Intent'i ister. Presence Intent kapalı kalabilir.
Anahtarları açmama rağmen botum neden "disallowed intents" diyor? Gateway mevcut durumu yalnızca yeni bir girişte okur. Portal ayarlarını kaydettikten sonra botu yeniden başlatın ki yeni intent'lerle yeniden bağlansın.
Message Content Intent'i açmak, Discord'un mesaj geçmişini botla paylaşacağı anlamına mı gelir? Hayır. Yalnızca bot bağlıyken ve o kanala erişimi varken gönderilen mesajları etkiler. Bot orada değilken yazılmış geçmiş mesajlara geriye dönük erişim vermez.
Ayrıcalıklı intent'leri istediğim için botum yasaklanır mı? Hayır. Bu intent'leri ihtiyaç duyan özellikler için istemek ve kullanmak, yani hoş geldin mesajları, otomatik yanıtlayıcılar ve yapay zeka yanıtları tam olarak bunun içindir. Doğrulama, ölçekteki botlar için vardır, bir ceza olarak değil.
Tam kurulum adımları için Custom Bot dokümantasyonuna bakın ya da Noxyr'i ücretsiz ekleyin ve token tabanlı bir Custom Bot yerine ana botu kullanarak intent'lerle hiç uğraşmayın.