Bir Discord botu oluşturduğunuzda bot hiçbir sunucuda değildir. Onu kendi sunucunuza (ya da başkalarının sunucularına) eklemek için bir davet linki, Discord'un deyişiyle bir install link veya OAuth2 yetkilendirme URL'si gerekir. Bu link botun hangi scope'larla ve hangi izinlerle ekleneceğini belirler; yanlış kurulduğunda komutlar görünmez, bot kanalları göremez veya gereğinden fazla yetkiyle sunucuya girer.

Bu yazıda Developer Portal'daki "Installation" sayfasıyla hazır link oluşturmayı, URL'yi elle kurmayı, izin tamsayısının nasıl hesaplandığını, sunucuya kurulum ile kullanıcıya kurulum arasındaki farkı ve en sık karşılaşılan ekleme sorunlarını anlatıyoruz. Henüz bir uygulamanız yoksa önce Discord bot nasıl yapılır rehberindeki ilk adımları tamamlayın.

Ön koşullar

Ön koşullar: Botu eklemek istediğiniz sunucuda "Manage Server" (MANAGE_GUILD) izniniz..., Bot başkalarının da ekleyebileceği bir bot olacaksa, portalın "Bot" sayfasında...
  • Botu eklemek istediğiniz sunucuda "Manage Server" (MANAGE_GUILD) izniniz olmalı. Bu izin yoksa sunucu, yetkilendirme ekranındaki listede çıkmaz.
  • Bot başkalarının da ekleyebileceği bir bot olacaksa, portalın "Bot" sayfasında "Public Bot" seçeneği açık olmalı. Kapalıysa botu yalnızca uygulama sahibi sunuculara ekleyebilir.
  • Uygulamanın Application ID değeri (General Information sayfasında). Davet URL'lerinde bu değer client_id parametresidir.

Yöntem 1: Installation sayfası ve Discord Provided Link

Discord'un önerdiği yol, portaldaki "Installation" sayfasıdır. Önce "Installation Contexts" bölümünde uygulamanın nereye kurulabileceğini seçersiniz. Discord'un belgelerine göre yeni oluşturulan uygulamalar varsayılan olarak yalnızca sunuculara kurulabilir; "User Install" seçeneğini isterseniz ayrıca açarsınız.

"Install Link" bölümünde üç seçenek vardır: "Discord Provided Link", "Custom URL" ve "None". "None" seçerseniz uygulama profilinizde "Add App" düğmesi görünmez ve uygulama App Directory için uygun olmaz. "Discord Provided Link" seçildiğinde altında "Default Install Settings" bölümü açılır:

  • Guild Install için applications.commands ve bot scope'larını ekleyin. bot seçildiğinde bot izinleri listesi görünür.
  • User Install için yalnızca applications.commands scope'u eklenir.

Bu link şöyle kısa bir biçimdedir ve URL'de scope veya izin taşımaz; kullanıcıya Default Install Settings'te seçtiğiniz değerler sorulur:

text
https://discord.com/oauth2/authorize?client_id=UYGULAMA_ID

Yöntem 2: OAuth2 URL'sini kendiniz oluşturun

Yöntem 2: OAuth2 URL'sini kendiniz oluşturun: client_id, scope, permissions, guild_id

discord.js rehberinde anlatılan klasik yöntem, portalın "OAuth2" sayfasındaki URL oluşturucuyu kullanmaktır: bot ve applications.commands seçeneklerini işaretler, açılan listeden izinleri seçer ve oluşan linki kopyalarsınız. Aynı linki elle de kurabilirsiniz. Discord'un bot yetkilendirme akışı (Bot Authorization Flow) şu parametreleri kabul eder:

ParametreAnlamı
client_idUygulamanızın kimliği (Application ID)
scopeBot akışı için bot içermelidir; slash komutları için applications.commands eklenir. Boşlukla ayrılır (URL'de %20)
permissionsBotun isteyeceği izinlerin tamsayı karşılığı
guild_idYetkilendirme ekranında sunucu seçimini önceden doldurur
disable_guild_selecttrue verilirse kullanıcı başka sunucu seçemez
integration_typeKurulum bağlamı: 0 sunucuya (GUILD_INSTALL), 1 kullanıcıya (USER_INSTALL)
text
https://discord.com/oauth2/authorize?client_id=UYGULAMA_ID&scope=bot%20applications.commands&permissions=84992

Discord belgelerine göre yalnızca client_id (isteğe bağlı olarak permissions, guild_id, disable_guild_select) verirseniz portaldaki Default Install Settings kullanılır; scope, integration_type veya redirect_uri belirtmek bu davranışı geçersiz kılar. Bot akışında response_type ve redirect_uri gerekmez, çünkü kullanıcının erişim token'ı alınmaz.

permissions sayısı nasıl hesaplanır?

Discord izinleri bir bit alanı (bitfield) olarak saklar: her izin bir bit değerine karşılık gelir ve istediğiniz izinlerin değerlerini toplarsınız (bit düzeyinde OR). Mesaj okuyup yazan, link önizlemesi gösteren basit bir bot için örnek:

İzinBitDeğer
VIEW_CHANNEL1 << 101024
SEND_MESSAGES1 << 112048
EMBED_LINKS1 << 1416384
READ_MESSAGE_HISTORY1 << 1665536
Toplam84992

Elle toplamak yerine kütüphanenize hesaplatabilirsiniz. discord.js'te:

javascript
const { PermissionsBitField, PermissionFlagsBits } = require('discord.js');

const izinler = PermissionsBitField.resolve([
  PermissionFlagsBits.ViewChannel,
  PermissionFlagsBits.SendMessages,
  PermissionFlagsBits.EmbedLinks,
  PermissionFlagsBits.ReadMessageHistory,
]);

console.log(izinler.toString()); // 84992

discord.py kullanıyorsanız kütüphanenin SSS sayfası, utils.oauth_url fonksiyonunu scopes=("bot", "applications.commands") ile çağırmayı öneriyor. Tüm izin bitlerinin listesi Discord'un Permissions sayfasında bulunur; hangi izinlerin rol sırasından etkilendiğini bot izinleri ve rol hiyerarşisi yazısında açıkladık.

Neden Administrator izni istememelisiniz?

Neden Administrator izni istememelisiniz? Güven, Hasar alanı, Hata maskeleme

ADMINISTRATOR (1 << 3) izni, Discord belgesine göre tüm izinleri verir ve kanal bazlı izin üzerine yazmalarını (permission overwrites) da atlar. Yani sunucu yöneticisi botu belirli bir kanaldan uzak tutmak istese bile bunu yapamaz. Bu üç sorun doğurur:

  • Güven: Discord, Developer Policy'ye atıfla uygulamaların yalnızca ihtiyaç duyduğu izinleri istemesi gerektiğini ve fazla izin istemenin kullanıcı güvenini azalttığını belirtiyor.
  • Hasar alanı: Token sızarsa saldırgan, botun izinleri kadar yetkiye sahip olur. Administrator ile bu, sunucunun tamamı demektir (bkz. bot token güvenliği).
  • Hata maskeleme: Geliştirme sırasında her şey çalıştığı için eksik izinleri fark etmezsiniz; bot başka bir sunucuda kısıtlı rolle çalıştığında beklenmedik hatalar çıkar.

Ayrıca belgelerde yıldızla işaretli bazı izinler (Administrator, Manage Server, Kick Members, Ban Members gibi), sunucuda sunucu genelinde iki adımlı doğrulama açıksa bot sahibinin hesabında da iki adımlı doğrulama gerektirir.

Sunucuya kurulum ve kullanıcıya kurulum farkı

Guild Install (sunucu)User Install (kullanıcı)
Kim kurar"Manage Server" iznine sahip bir üyeHerhangi bir kullanıcı, kendi hesabına
Kim görürSunucunun tüm üyeleriYalnızca kuran kullanıcı
Nerede kullanılırKurulduğu sunucudaKullanıcının sunucularında, DM ve grup DM'lerinde
Scopebot ve applications.commandsapplications.commands
Bot izinleriKurulumda seçilirUygulanmaz; yalnızca komutlarla çalışır

Discord'un belgesine göre kullanıcıya kurulan uygulamalar, kullanıldıkları yerde kullanıcının izinlerine uymak zorundadır. Örneğin kullanıcının mesaj gönderme izni olmayan bir kanalda uygulama, herkese görünür bir yanıt gönderemez. Bir uygulamaya yeni kurulum bağlamı eklediğinizde, mevcut komutlarınızı da bu bağlamı destekleyecek şekilde güncellemeniz gerekir. Ayrıntılar: Discord user install uygulama.

Ekleme sonrası sık karşılaşılan sorunlar

"Bot requires a code grant" hatası

Portalın "Bot" sayfasında "Require OAuth2 Code Grant" seçeneği açıktır. Bu seçenek, botu ekleyen herkesin tam authorization code grant akışından geçmesini zorunlu kılar. discord.js rehberinin önerisi açık: neden gerektiğini bilmiyorsanız kapatın.

Sunucum listede çıkmıyor

O sunucuda "Manage Server" izniniz yoktur ya da "Public Bot" kapalıdır ve botun sahibi siz değilsiniz. Sunucu sahibinden izin isteyin veya linki sahibine gönderin.

Bot sunucuda ama slash komutları görünmüyor

Discord belgesine göre bir sunucuda komut oluşturabilmek için uygulamanın o sunucuda applications.commands scope'u ile yetkilendirilmiş olması gerekir; bu scope bot scope'una otomatik dahildir, yine de discord.js ve discord.py belgeleri linke iki scope'u birlikte yazmayı öneriyor. Scope doğruysa sorun büyük olasılıkla komutların kaydedilmemesidir: kayıt betiğini çalıştırın (bkz. slash komut oluşturma).

Missing Access (50001) ve Missing Permissions (50013)

Bot sunucudayken bir kanala mesaj atamıyor veya bir işlem yapamıyorsa API iki farklı kod döndürebilir. 50001 "Missing access" botun söz konusu kaynağa (ör. göremediği bir kanala) erişimi olmadığını, 50013 ise işlemi yapmak için gereken izne sahip olmadığını anlatır. İlk durumda kanalın izinlerinde botun rolüne VIEW_CHANNEL verin; ikincisinde eksik izni ekleyin veya botun rolünün hedef rolden yukarıda olduğunu kontrol edin. Diğer kodlar için Discord API hata kodları.

integration_type ile hata alıyorum

URL'de verdiğiniz kurulum bağlamı uygulamada açık değilse yetkilendirme başarısız olur. Discord belgesine göre uygulama, verilen integration_type değerini destekleyecek şekilde portalda yapılandırılmış olmalıdır.

Sık Sorulan Sorular

Davet linkini herkese açık paylaşmak güvenli mi?

Evet. Davet linki yalnızca Application ID ve istenen izinleri içerir, gizli bir bilgi taşımaz. Gizli olan bot token'ı ve client secret'tır. Linki kullanan kişi de ancak "Manage Server" iznine sahip olduğu sunuculara ekleme yapabilir.

Botu belirli bir sunucuya sabitleyebilir miyim?

Linke guild_id=SUNUCU_ID ve disable_guild_select=true eklerseniz yetkilendirme ekranı o sunucuyla açılır ve kullanıcı başka sunucu seçemez (kullanıcının o sunucuda yetkisi olması şartıyla).

Botun izinlerini sonradan nasıl artırırım?

Yeni izinleri içeren linki tekrar kullanabilir ya da sunucu ayarlarından botun rolüne izin ekleyebilirsiniz. Koddan izin kontrolü yapıp eksik izinde kullanıcıya açıklayıcı bir mesaj göstermek iyi bir pratiktir.

Bot çok sayıda sunucuya eklenince ne değişir?

Sunucu sayısı arttıkça farklı kurallar devreye girer: belirli bir kullanıcı sayısının üzerinde privileged intent erişimi için başvuru gerekir ve büyük botlar sharding kullanır. Bkz. bot doğrulama ve privileged intent ile sharding nedir.

Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: Discord bot nasıl yapılır · Bot izinleri ve rol hiyerarşisi · User install uygulamalar · Bot token güvenliği · OAuth2 ve OIDC rehberi