Sık hatalar
Bu sayfada
- Hızlı teşhis tablosu
- Bot çevrimdışı görünüyor
- message.content boş geliyor
- Gateway 4014 veya 4004 ile kapanıyor
- HTTP 401 ve üç farklı 403 hatası
- HTTP 429 hız sınırı ve geçici engel
- Eğik çizgi (/) komutu görünmüyor
- Buton ya da komut "Bot yanıt vermedi." diyor
- Ses kanalına girmiyor ya da ses çıkmıyor
- Bu sayfayı yapay zekaya verirsen
- Sırada ne var
Bot yazarken ya da çalıştırırken karşılaştığın belirtilerin büyük bölümü aynı birkaç nedenden çıkar. Önce aşağıdaki özet tabloya bak, ardından ilgili başlıktaki adımları uygula.
Hızlı teşhis tablosu
| Belirti | En sık sebep | Hızlı çözüm | Ayrıntılı rehber |
|---|---|---|---|
| Bot üye listesinde çevrimdışı görünüyor | Program çalışmıyor ya da gateway'e hiç identify göndermedi | Terminalde READY satırını gör; yalnızca REST çağıran program botu çevrimiçi yapmaz | Gateway, Botu açık tut |
message.content boş ("") geliyor | MESSAGE_CONTENT intent'i kapalı ya da kodda istenmemiş | Portalda Mesaj içeriği'ni aç, intents değerine ekle ve programı yeniden başlat | Intent'ler |
Gateway 4014 ile kapanıyor | Portalda açılmamış (veya 100+ sunucuda onaylanmamış) ayrıcalıklı intent istendi | Portalda ilgili intent'i aç ya da intents değerinden çıkar | Intent'ler, Doğrulama |
Gateway 4004 veya HTTP 401 dönüyor | Token yanlış, yenilenmiş ya da REST başlığında Bot öneki eksik | .env içindeki token'ı kontrol et; gerekirse portaldan Token'ı yenile yap | Kimlik doğrulama |
Gateway 4011 ile kapanıyor | Aynı bot iki yerde birden çalışıyor (örneğin bilgisayar + VPS) | Eski kopyayı durdur; iki süreç birbirini düşürmeye devam eder | Shard'lar, Botu açık tut |
HTTP 403 (missing_access / missing_permissions / role_hierarchy) | Kanalı görme izni yok, işlem izni yok ya da botun rolü aşağıda | Kanalda ViewChannel ver, rolde izni aç ya da bot rolünü yukarı taşı | İzinler |
HTTP 429 (rate_limited / slowmode) | Hız sınırı aşıldı veya kanalda yavaş mod açık | retry_after saniye bekle ya da resmi noluyo-bot kuyruğunu kullan | Hız sınırları |
Eğik çizgi (/) komutu listede görünmüyor | Komut kaydedilmedi, kanalda UseApplicationCommands kapalı ya da 60 sn dolmadı | commands.sync çıktısını kontrol et, 1 dakika bekle, kanal izinlerine bak | Komutlar, Komut izinleri |
| Butona basınca "Bot yanıt vermedi." / etkileşim başarısız | Bot 3 saniye içinde callback dönmedi ya da uzun işi yanıttan önce yaptı | Önce i.defer() (type: 5 / 6) gönder, ağır işi ondan sonra çalıştır | Etkileşimler, Bileşenler |
| Ses kanalına girmiyor ya da ses çıkmıyor | Connect / Speak izni yok, ffmpeg kurulu değil ya da HTTP ses rotası çağrıldı | Gateway'den op 4 gönder, VOICE_JOIN_ERROR koduna bak ve ffmpeg -version dene | Ses |
Bot çevrimdışı görünüyor
Bir botun sunucu üye listesinde yeşil (çevrimiçi) görünmesi yalnızca aktif bir gateway WebSocket oturumu açıkken olur:
Terminal penceren açıksa programın çalışmaya devam ettiğini ve
READYolayını aldığını doğrula.Yalnızca
curlya dafetchile mesaj gönderen bir betik botu çevrimiçi göstermez; mesaj yine gider ama durum çevrimdışı kalır.Bilgisayarını kapattığında bot çevrimdışı düşüyorsa süreci bir sunucuya taşı; adımlar Botu açık tut sayfasında.
message.content boş geliyor
Hata mesajı almadığın halde d.content === "" ve d.attachments === [] görüyorsan bu bir arıza değil, mesaj içeriği kuralıdır:
MESSAGE_CONTENTayrıcalıklı intent'i olmadan bot yalnızca kendi yazdığı ve kendisini doğrudan etiketleyen (@bot) mesajların metnini görür.Çözüm: Geliştirici portalında uygulamanı aç → Ayrıcalıklı intent'ler altında Mesaj içeriği'ni etkinleştir → kodunda
Intents.MESSAGE_CONTENT(1 << 15) bitini ekle → programını yeniden başlat (açık oturum yeni intent'i kendiliğinden almaz).
Gateway 4014 veya 4004 ile kapanıyor
Bu iki kapanış kodunda yeniden bağlanmayı deneme; kodu ya da portal ayarını düzeltmeden her deneme aynı hatayla biter:
4014 DISALLOWED_INTENTS: KodundaGUILD_MEMBERS(1 << 1),GUILD_PRESENCES(1 << 8) veyaMESSAGE_CONTENT(1 << 15) istedin ama portalda o kutu kapalı; ya da botun 100+ sunucuda ve o intent henüz doğrulama sırasında onaylanmadı.4004 AUTHENTICATION_FAILED: Token yanlış, başında/sonunda görünmez boşluk var, portalda yenilenmiş ya da uygulama durdurulmuş. Ayrıca yanlışlıkla kişilere ait/gatewayadresine bağlanırsan da4004alırsın; adresi her zamanGET /api/v1/gateway/botrotasından al.
HTTP 401 ve üç farklı 403 hatası
401 unauthorized: REST isteğindeAuthorization: Bot <token>başlığı eksik ya daBotsözcüğü unutulmuş (Bearerdeğil, bot rotalarındaBotyazılır).403 missing_access: Botun o kanalı görme (ViewChannel,1024) izni yok. Kanal özel bir kanalsa kanal izinlerinden botun rolüneViewChannelekle.403 missing_permissions: Bot kanalı görüyor ama yapmak istediği işin izni (SendMessages,ManageMessages,ManageRolesgibi) rolünde yok ya da bot zaman aşımında.403 role_hierarchy: İzin var ama botun rütbesi yetmiyor. Yeni eklenen botun rolü@everyonerolünün hemen üstünde başlar; sunucu yöneticisi Sunucu ayarları → Roller ekranında botun rolünü hedef üyenin veya verilecek rolün üstüne sürüklemelidir. Ayrıntılar İzinler sayfasında.
HTTP 429 hız sınırı ve geçici engel
429 aldığında yanıt gövdesindeki retry_after saniye kadar beklemeden aynı isteği tekrarlama. X-RateLimit-Scope: shared geliyorsa tüm platformun ortak bot tavanı dolmuştur; X-RateLimit-Scope: user veya bot geliyorsa kendi kotan dolmuştur.
Reddedilen (401, 403, 429) istekleri saniyede yüzlerce kez tekrarlayan bozuk bir döngü 10 dakikada 10.000 hataya ulaşırsa IP adresin geçici olarak 403 temporarily_banned alır. Resmi JavaScript ve Python kütüphaneleri bucket kuyruğunu ve 429 beklemelerini senin yerine otomatik yönetir.
Eğik çizgi (/) komutu görünmüyor
Komutu kaydettiğinden emin ol (
await bot.commands.sync([...])veyaPUT /applications/{id}/commands).İstemciler komut listesini en çok 60 saniyede bir yeniler; kaydettikten sonra bir dakika bekle ya da başka kanala geçip dön.
Kişinin o kanalda Uygulama komutlarını kullan (
UseApplicationCommands) izni kapalıysa ya da komutundefault_member_permissionsbitleri kişide yoksa komut o kişiye gizlenir.Botla açılan DM'de deniyorsan komutun global olduğundan,
contextsiçinde1bulunduğundan vedefault_member_permissionsdeğerininnullolduğundan emin ol; bkz. Komutlar.
Buton ya da komut "Bot yanıt vermedi." diyor
N'oluyo her INTERACTION_CREATE olayına 3 saniye içinde ilk yanıtın (POST /interactions/{id}/{token}/callback) gelmesini bekler:
Yanıttan önce veritabanı sorgusu, dış API isteği ya da çoklu REST çağrısı yapıyorsan süre dolar ve
400 interaction_timeoutalırsın.Çözüm: İşleyici başlar başlamaz
await i.defer({ ephemeral: true })(ham API'detype: 5veya bileşendetype: 6) gönder; 3 saniyelik süreyi 15 dakikaya uzatmış olursun, işin bitinceawait i.editReply(...)ile sonucu yaz. Ayrıntılar Etkileşimler sayfasında.HTTP ile teslim kullanıyorsan portalda Teslim günlüğü tablosuna bak: imza doğrulaması (
401) ya da TLS hatası orada açıkça yazar.
Ses kanalına girmiyor ya da ses çıkmıyor
Ses kanalına girmek için
POST /channels/{id}/voiceçağırma (403 bot_forbiddendöner); açık gateway bağlantındanop 4gönder veya SDK'dabot.voice.join(...)kullan.VOICE_JOIN_ERRORolayı geliyorsacodealanını oku:missing_permissionsise ses kanalındaViewChannel,ConnectveSpeak(izin=3146752) izinlerini ver;channel_bot_limitise kanalda zaten 2 bot vardır.Bot odaya giriyor ama ses gelmiyorsa sunucunda
ffmpeg -versionkomutunun çalıştığını, sesin 48 kHz 2 kanals16lePCM olarak çözüldüğünü veTrackSource.SOURCE_MICROPHONEile yayınlandığını doğrula. Ayrıntılar Ses sayfasında.