Bir Discord bot davet bağlantısı, yalnızca bir OAuth2 yetkilendirme URL’sidir: scope parametresi hangi tür erişimin istendiğine (bir bot hesabı, slash komutları veya ikisi birden) karar verir, permissions sayısı ise bot hesabının sunucuya girdikten sonra neler yapabileceğine karar verir. Bir sunucu yöneticisinin de tüm bunları onaylaması gerekir ve onay verilmeden hiçbiri etkili olmaz. Bu iki parametreyi anlamak, güvenli bir davet bağlantısı hazırlamakla tam olarak hesabını veremediğin bir bağlantıyı kopyalamak arasındaki farktır.

An OAuth permission checklist gets reviewed, Administrator is unticked, and the bot joins online. Permissions Kick Members Manage Messages Administrator Authorize YourBot Online

Bir davet bağlantısının yapısı

Tipik bir bot davet bağlantısı şöyle görünür:

https://discord.com/oauth2/authorize?client_id=123456789&permissions=268446800&scope=bot%20applications.commands

  • client_id - uygulamanın herkese açık kimliği, paylaşmak güvenlidir; o botun her davet bağlantısında bulunur.
  • scope - hangi tür erişimin istendiğini belirtir, boşlukla ayrılmış (URL’de %20 olarak kodlanmış).
  • permissions - istenen tüm sunucu izinlerini temsil eden, bunların toplamı olan tek bir sayı.
  • guild_id ve disable_guild_select (isteğe bağlı) - belirli bir sunucuyu önceden seçer ve seçiciyi o sunucuya kilitler; sunucu başına “beni buraya ekle” düğmesi için kullanışlıdır.

“bot” kapsamı

Botu gerçekten sunucunun bir üyesi olarak ekleyen şey budur; üye listesinde yanında bot etiketiyle görünen kayıt. Bu kapsam olmadan hiçbir şey katılmaz, yetkilendirilecek bir bot hesabı da olmaz.

“applications.commands” kapsamı

Bu kapsam, uygulamanın slash, kullanıcı ve mesaj komutlarını o sunucuda kullanılabilmesi için kaydeder. Teknik olarak bir bot yalnızca bot kapsamıyla da katılabilir, ancak biri / yazdığında botun /komutlarından hiçbiri görünmez; çünkü sunucu komut kaydını hiç yetkilendirmemiştir.

Neden neredeyse her zaman ikisini de istersin

Yalnızca bot ile davet edilen bir bot yine de mesaj gönderebilir, zaten gönderdiği mesajlardaki düğmelere tepki verebilir ve slash komutu gerektirmeyen şeylere yanıt verebilir. Ancak modern Discord kullanıcıları komut bekler; komutlarını kaydedemeyen bir bot, sorunsuz çalışsa bile bozuk görünür. Noxyr’ın oluşturduğu her davet bağlantısı ve neredeyse her meşru botun bağlantısı tam da bu yüzden iki kapsamı birlikte içerir.

İzin sayısının çözümlenmesi

Her Discord izni (mesaj gönderme, rolleri yönetme, üyeleri atma) bir bit alanında tek bir bittir: ikinin kuvvetinde bir bayrak. Davet bağlantısındaki sayı, aynı anda istenen tüm bayrakların toplamıdır. permissions değeri 8 olan bir bağlantı tam olarak bir şey ister: Yönetici, yani sunucuya tam ve kısıtlamasız erişim. Düzgün hazırlanmış bir davet bağlantısı ise Discord’un sunduğu her şeyi değil, botun kodunun gerçekten kullandığı belirli bayrakları toplar: bilet kanalları oluşturmak için kanal yönetimi, doğrulama rolü için rol yönetimi, anti-raid yanıtı için moderasyon eylemleri.

Yönetici neden bir gereklilik değil, bir kırmızı bayraktır

Meşru botların çoğu buna ihtiyaç duymaz. Bu izni istemek, neredeyse tüm izinlere aynı anda dokunan bir şey için nadir ve gerçek bir ihtiyaç olabilir; ama çok daha sık görülen durum, permissions değeri 8 olarak ulaşması en kolay sayı olduğu için hızlıca yazılmış bir bottur. Ayrıca kurulum sırasında Discord’un sunucu sahibine gösterdiği en korkutucu ekrandır; bu yüzden davetler doğrudan reddedilebilir veya izinleri düzenleyen biri botu sonradan kaldırabilir. Yetkilendir’e tıklamadan önce herhangi bir davet bağlantısının izin sayısını bir Discord izin hesaplayıcısıyla çözümleyip tam olarak neyin istendiğini görebilirsin.

Örnek olarak Noxyr’ın davet bağlantısı nasıl oluşturulur

Noxyr, Yönetici izni istemek yerine özelliklerinin gerçekten kullandığı belirli izinlerden oluşan bir davet hazırlar: biletler ve doğrulama için kanal ve rol yönetimi, anti-nuke yanıtları için mesaj ve moderasyon izinleri; bunun ötesinde hiçbir şey yoktur. Her zaman hem bot hem de applications.commands kapsamlarını içerir, böylece sunucuya katıldığı anda komutları çalışır.

Karşına çıkabilecek diğer OAuth2 kapsamları

Discord, bot ve applications.commands dışında düzinelerce OAuth2 kapsamı tanımlar. Bunların çoğu, identify veya guilds.join gibi, “Discord ile giriş yap” tarzı web kimlik doğrulamasına aittir ve standart bir davet bağlantısında hiç görünmez. Baktığın bir bağlantı bot yanında tanımadığın bir şey istiyorsa, yetkilendirmeden önce o kapsamın gerçekte neye izin verdiğini kontrol etmeye değer. Bir bot davetinin ek web kimlik doğrulama kapsamlarına ihtiyaç duyması, hesap bağlama da sunan bir hizmet dışında alışılmadık bir durumdur.

Kendi botunun davet bağlantısını oluşturmak

Bir uygulamayı Discord Geliştirici Portalında oluşturduktan sonra, OAuth2 sekmesindeki URL Oluşturucu bu bağlantıyı senin için kutucuklarla hazırlar: kapsamlar altında bot ve applications.commands seçeneklerini işaretle, botunun ihtiyaç duyduğu izinleri işaretle ve sonucu kopyala. URL’yi ve izin sayısını elle birleştirmene gerek kalmaz.

Sık sorulan sorular

disable_guild_select ne işe yarar? Sunucu seçiciyi önceden seçilmiş tek bir sunucuya kilitler; böylece belirli bir topluluk için hazırlanmış bir davet bağlantısı, yanlışlıkla botu başka bir yere eklemek için kullanılamaz.

Botum yalnızca düğme kullanıyorsa applications.commands’a ihtiyacım var mı? Zaten gönderdiği mesajlardaki düğmeler için kesin olarak gerekmez, ama herhangi bir slash komutu devreye girdiği anda gerekir.

İzin sayısını sonradan değiştirmek geriye dönük erişim ekler mi? Hayır. Bir davetı zaten onaylamış bir sunucu, o anda verilen izinleri korur; bağlantıyı değiştirmek yalnızca gelecekteki davetleri etkiler. Mevcut kurulumların daha fazla izin alması için botun yeniden davet edilip onaylanması gerekir.

Yalnızca scope=bot yeterli mi? Botun katılması için yeterlidir, ancak yanında applications.commands yoksa slash komutları görünmez.

Discord neden Yönetici için bu kadar büyük bir uyarı gösteriyor? Çünkü tüm sunucuya kısıtlamasız erişim istiyor; bir bot davetinin isteyebileceği en tehlikeli tek izin budur.

Kendi botunun davetini mi kuruyorsun? Önce Discord uygulaması oluşturma rehberimize bak; arkasındaki kodu yazmaktan tamamen kaçınmak istersen Özel Bot dokümanlarını oku.