Discord botu geliştirirken eninde sonunda DiscordAPIError[50013]: Missing Permissions, Unknown interaction ya da gateway bağlantısının 4014 koduyla kapanması gibi hatalarla karşılaşırsınız. Bu kodlar rastgele değildir; Discord her birini resmî "Opcodes and Status Codes" belgesinde tanımlar. Kodun ne anlama geldiğini bildiğinizde çözüm çoğu zaman tek satırlık bir değişikliktir.
Bu rehberde Discord hata kodlarını üç katmanda topladık: WebSocket bağlantısının kapanış kodları (4000-4014), HTTP durum kodları ve API'nin JSON gövdesinde döndürdüğü ayrıntılı hata kodları. Bot geliştiricilerin en sık gördüğü kodları anlam ve çözüm önerisiyle birlikte Türkçe olarak açıklıyoruz. Tablolardaki tüm numaralar resmî belgeden alınmıştır.
Discord hataları üç katmanda gelir

- Gateway kapanış kodları: botunuzun WebSocket bağlantısı kapandığında gelir. Örneğin 4004 token hatası, 4014 izin verilmeyen intent.
- HTTP durum kodları: REST isteğinin genel sonucudur. 403, 404, 429 gibi.
- JSON hata kodları: HTTP koduna ek olarak gövdedeki
codealanında gelen ayrıntılı koddur. Örneğin 403 ile birlikte 50013 (izin eksik).
Bir REST hatası şöyle görünür. message alanı okunabilir açıklamayı, code alanı ise programla kontrol edebileceğiniz numarayı verir. Bazı hatalarda alan bazlı ayrıntıları içeren bir errors nesnesi de bulunur:
{
"message": "Invalid authentication token",
"code": 50014
}Gateway kapanış kodları (4000-4014)
Discord, bozuk yeniden bağlanma döngülerini önlemek için bazı kapanış kodlarını "tekrar bağlanmayı durdur" sinyali olarak görmenizi ister. Aşağıdaki tablonun son sütunu bunu gösterir.
| Kod | Anlamı | Ne yapmalı | Yeniden bağlan |
|---|---|---|---|
| 4000 | Unknown error | Bilinmeyen hata; yeniden bağlanmayı deneyin | Evet |
| 4001 | Unknown opcode | Geçersiz opcode veya yük gönderildi | Evet |
| 4002 | Decode error | Geçersiz yük gönderildi | Evet |
| 4003 | Not authenticated | Identify öncesi yük gönderildi ya da oturum geçersiz | Evet |
| 4004 | Authentication failed | Token yanlış; token'ı kontrol edin veya yenileyin | Hayır |
| 4005 | Already authenticated | Birden fazla Identify gönderildi | Evet |
| 4007 | Invalid seq | Resume sırasındaki sıra numarası geçersiz; yeni oturum açın | Evet |
| 4008 | Rate limited | Çok hızlı yük gönderildi; bağlantı kesilir | Evet |
| 4009 | Session timed out | Oturum zaman aşımına uğradı; yeni oturum açın | Evet |
| 4010 | Invalid shard | Identify sırasında geçersiz shard bilgisi | Hayır |
| 4011 | Sharding required | Bağlantı çok fazla sunucu taşıyacaktı; shard kullanın | Hayır |
| 4012 | Invalid API version | Gateway için geçersiz sürüm | Hayır |
| 4013 | Invalid intent(s) | Intent bit değeri yanlış hesaplanmış | Hayır |
| 4014 | Disallowed intent(s) | Portalda açılmamış veya onaylanmamış privileged intent | Hayır |
En sık görülenler 4004, 4014 ve 4011'dir. 4004 genellikle token'ın yanlış kopyalanmasından ya da sıfırlandıktan sonra güncellenmemesinden kaynaklanır; discord.js rehberi ayrıca client secret'ın token sanılarak kullanılmasını yaygın bir neden olarak sayar. Bkz. bot token nedir ve nasıl korunur. 4013 ve 4014 için Discord intent rehberi, 4010 ve 4011 için Discord sharding yazılarına bakın.
HTTP durum kodları
| Kod | Anlamı |
|---|---|
| 200 OK | İstek başarıyla tamamlandı |
| 201 CREATED | Kayıt başarıyla oluşturuldu |
| 204 NO CONTENT | Başarılı, ancak içerik dönmedi |
| 304 NOT MODIFIED | Kayıt değişmedi, işlem yapılmadı |
| 400 BAD REQUEST | İstek hatalı biçimlendirilmiş ya da anlaşılamadı |
| 401 UNAUTHORIZED | Authorization başlığı eksik veya geçersiz |
| 403 FORBIDDEN | Token'ın bu kaynağa yetkisi yok |
| 404 NOT FOUND | Belirtilen kaynak yok |
| 405 METHOD NOT ALLOWED | Bu adres için HTTP yöntemi geçersiz |
| 429 TOO MANY REQUESTS | Rate limit; bekleyip tekrar deneyin |
| 502 GATEWAY UNAVAILABLE | İsteği işleyecek gateway yok; biraz bekleyip tekrar deneyin |
| 5xx SERVER ERROR | Sunucu tarafında hata (nadir) |
En sık karşılaşılan JSON hata kodları

Resmî tabloda yüzlerce kod var; aşağıda bot geliştiricilerin en sık gördüklerini seçtik. "Anlamı" sütunu belgedeki açıklamanın çevirisidir, "Çözüm" sütunu ise kontrol etmeniz gereken yerleri özetler.
| Kod | Anlamı | Çözüm / kontrol |
|---|---|---|
| 10003 | Unknown channel | Kanal silinmiş veya kimlik yanlış |
| 10007 | Unknown member | Kullanıcı sunucudan ayrılmış olabilir |
| 10008 | Unknown message | Mesaj zaten silinmiş; silme işlemlerinde yok sayılabilir |
| 10011 | Unknown role | Rol silinmiş veya kimlik yanlış |
| 10013 | Unknown user | Kullanıcı kimliği geçersiz |
| 10062 | Unknown interaction | Etkileşime 3 saniye içinde yanıt verilmedi; defer kullanın |
| 10063 | Unknown application command | Komut silinmiş veya kaydı güncel değil |
| 30034 | Günlük komut oluşturma sınırı (200) | Komutları her açılışta yeniden kaydetmeyin |
| 40001 | Unauthorized | Geçerli bir token gönderin |
| 40060 | Interaction has already been acknowledged | Aynı etkileşime ikinci kez ilk yanıt verilmiş |
| 40333 | Cloudflare is blocking your request | Geçerli bir User-Agent başlığı gönderin |
| 50001 | Missing access | Botun kanala veya kaynağa erişimini kontrol edin |
| 50006 | Cannot send an empty message | İçerik, embed veya bileşenden en az biri dolu olmalı |
| 50007 | Cannot send messages to this user | Kullanıcının DM'i kapalı veya ortak sunucu yok |
| 50013 | You lack permissions to perform that action | Gerekli izni ve rol sırasını kontrol edin |
| 50014 | Invalid authentication token provided | Token hatalı veya sıfırlanmış |
| 50016 | 2 ile 100 arası mesaj silinebilir | Bulk delete listesini düzeltin |
| 50034 | Mesaj toplu silme için çok eski | Bulk delete 2 haftadan eski mesajları silmez |
| 50035 | Invalid form body | errors nesnesinde hangi alanın hatalı olduğu yazar |
| 160002 | Okuma geçmişi izni olmadan yanıt verilemez | Botun mesaj geçmişini okuma iznini kontrol edin |
| 160014 | İçeriğini okuyamadığınız mesajı iletemezsiniz | Message Content erişimini kontrol edin |
| 200000 | Message was blocked by automatic moderation | Mesaj sunucunun AutoMod kuralına takıldı |
| 240000 | Message blocked by harmful links filter | Mesajdaki bağlantı zararlı bağlantı filtresine takıldı |
Sık görülen hataların açıklaması ve çözümü
50013 Missing Permissions
Botun yapmak istediği işlem için gereken izin yok. En yaygın senaryolar: rol vermeye çalışırken botun en yüksek rolünün hedef rolün altında kalması, kanal bazlı izin üzerine yazmalarının (permission overwrite) botu kısıtlaması ya da davet linkinde gereken iznin verilmemiş olması. İşlemden önce izni kodda kontrol etmek, 403 üretip geçersiz istek sayınızı artırmaktan iyidir. Rol hiyerarşisi için Discord bot izinleri ve rol hiyerarşisi, davet linki için botu sunucuya ekleme yazısına bakın.
50001 Missing Access
Belgedeki açıklama yalnızca "Missing access" olsa da pratikte bot ilgili kanalı veya kaynağı göremediğinde karşılaşılır. Kanalın izinlerinde botun ya da rolünün kanalı görüntüleme iznini kontrol edin; botun o sunucuda hâlâ bulunduğundan emin olun.
10062 Unknown Interaction
Discord'a göre bir etkileşime ilk yanıtı 3 saniye içinde göndermelisiniz; süre aşılırsa token geçersizleşir ve sonraki yanıt 10062 ile döner. Uzun süren işlerde önce deferReply() ile etkileşimi onaylayın; token 15 dakika geçerlidir. Aynı etkileşime iki kez ilk yanıt vermeye çalışırsanız 40060 alırsınız. Bu iki hata kullanıcıya "Etkileşim başarısız oldu" olarak yansır; ayrıntılı çözüm için "Etkileşim başarısız oldu" hatası rehberine bakın.
50007 Cannot send messages to this user
discord.js rehberi bu hatanın nedenlerini şöyle sıralar: bot ile kullanıcının ortak sunucusu yoktur (çoğunlukla kullanıcıyı attıktan veya yasakladıktan sonra DM atmaya çalışılır), bot başka bir bota DM atmaya çalışır, kullanıcı botu engellemiştir ya da gizlilik ayarlarında DM'leri kapatmıştır. Son iki durum önceden kontrol edilemez; DM gönderimini mutlaka hata yakalama ile sarın. Moderasyon botlarında DM'i cezadan önce göndermek ilk nedeni ortadan kaldırır.
50035 Invalid Form Body
Gönderdiğiniz gövde şemaya uymuyor. Hata nesnesindeki errors alanı hangi alanın neden reddedildiğini gösterir. discord.js rehberindeki örnekte bir nesne, mesaj kimliği yerine verildiği için yol [object Object] içeriyor ve 50035 dönüyor. Embed alan sınırları, boş alan adları ve yanlış tipte kimlikler sık nedenlerdir. Embed kuralları için Discord embed mesaj oluşturma yazısına bakın.
Hataları kodda yakalamak
discord.js
discord.js, API hatalarını DiscordAPIError olarak fırlatır ve code özelliğinde JSON hata kodunu taşır. Sabitler için RESTJSONErrorCodes kullanabilirsiniz:
const { RESTJSONErrorCodes } = require('discord.js');
async function guvenliDm(user, metin) {
try {
await user.send(metin);
return true;
} catch (error) {
if (error.code === RESTJSONErrorCodes.CannotSendMessagesToThisUser) {
return false; // DM kapalı, sessizce geç
}
throw error;
}
}
async function guvenliSil(message) {
await message.delete().catch((error) => {
if (error.code !== RESTJSONErrorCodes.UnknownMessage) console.error(error);
});
}Yakalanmamış hataları görmek için discord.js rehberi ana dosyaya process.on('unhandledRejection', ...) dinleyicisi eklemeyi önerir. Hata çıktısındaki path ve method alanları sorunun hangi uç noktada çıktığını gösterir.
discord.py
discord.py'de HTTP hataları discord.HTTPException sınıfından türer; 403 için discord.Forbidden, 404 için discord.NotFound fırlatılır. İstisnanın status alanı HTTP kodunu, code alanı Discord JSON kodunu verir:
import discord
async def guvenli_dm(user: discord.User, metin: str) -> bool:
try:
await user.send(metin)
return True
except discord.Forbidden as e:
if e.code == 50007:
return False # DM kapalı veya ortak sunucu yok
raise
except discord.HTTPException as e:
print('Discord hatası:', e.status, e.code, e.text)
return FalseSık Sorulan Sorular
Missing Access ile Missing Permissions arasındaki fark nedir?
Belgede 50001 "Missing access", 50013 ise "You lack permissions to perform that action" olarak geçer. Pratikte 50001 botun kaynağa hiç erişemediği durumlarda, 50013 ise kaynağı görse de istenen işlemi (rol verme, mesaj silme gibi) yapma izni olmadığında görülür.
Botum 4004 ile kapanıyor, ne yapmalıyım?
4004 "Authentication failed" demektir: Identify yükündeki token yanlıştır. Developer Portal'dan yeni token alıp ortam değişkeninizi güncelleyin. Bu kodda otomatik yeniden bağlanma denenmemelidir.
Tüm hata kodlarının listesine nereden bakabilirim?
Tam ve güncel liste Discord'un "Opcodes and Status Codes" sayfasındadır. discord.js kullanıyorsanız aynı kodların sabit adlarını RESTJSONErrorCodes enum'unda bulabilirsiniz.
5xx hatası alırsam ne yapmalıyım?
5xx kodları Discord tarafındaki sorunları gösterir ve nadirdir. 502 için belge biraz bekleyip yeniden denemenizi önerir. Bu sırada isteği sınırsız döngüde tekrar etmeyin; artan aralıklarla birkaç kez denemek yeterlidir.
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: Etkileşim başarısız oldu hatası · Discord rate limit ve 429 · Discord intent nedir · Bot izinleri ve rol hiyerarşisi · Bot token güvenliği · Discord sharding nedir · Discord webhook ve bot entegrasyonu