# Sık sorulan sorular

Takıldığın yeri burada bulabilirsin. Her hatanın kısa anlamı için [Hatalar](https://noluyo.net/gelistirici/hatalar.md) sayfasına da bakabilirsin.

## Başlarken

### `403 developer_terms_required` alıyorum

Portaldan geliştirici sözleşmesini kabul et, sonra aynı hesapla yeniden dene.

### `403 email_not_verified` veya `403 guest_not_allowed` alıyorum

Uygulama açmak için e-posta adresin doğrulanmış olmalı: gelen kutundaki bağlantıya tıkla. Misafir hesapla uygulama açılamaz; önce ayarlardan hesabına e-posta ve şifre bağla.

### Ekleme sayfasında sunucum listede yok

Liste yalnızca `ManageGuild` iznin olan, yani yönettiğin sunucuları gösterir. Sunucu sahibinden sana bu izni vermesini ya da botu kendisinin eklemesini iste.

### `403 bot_private` alıyorum

Bu botu yalnızca sahibi ekleyebilir. Bot seninse bu hesapla giriş yap; başkası da ekleyebilsin istiyorsan portalda uygulamanın **Herkese açık** seçeneğini aç.

### Botu eklerken `400 bot_guild_limit` alıyorum

Doğrulanmamış bir bot en çok 100 sunucuda olabilir. Sınırı kaldırmak için [Doğrulama](https://noluyo.net/gelistirici/dogrulama.md) başvurusu yapabilirsin.

## Token ve kimlik

### Her istekte `401 unauthorized` alıyorum

Token eksik, yanlış veya artık geçersiz. Sırayla bak:

1. Başlık tam olarak `Authorization: Bot <token>` mi? `Bot` sözcüğü ve ardından tek boşluk gerekli.
2. Token'ı yeniledikten sonra eski değeri mi kullanıyorsun? Yenileme eskisini anında geçersiz kılar.
3. Uygulama silinmiş ya da botun veya sahibinin hesabı kapatılmış olabilir.

Hâlâ çözülmediyse portalda token'ı yenile. `401` aldığın isteği tekrar etme; botu durdurup bak.

### Token'ımı kaybettim

Kayıtlı token bir daha gösterilmez. Portalda uygulama sayfasındaki **Token'ı yenile** ile yenisini al ve programına koy.

### `403 bot_forbidden` alıyorum

Çağırdığın rota botlara kapalı. Bu çoğunlukla kişi hesabına özel bir şeydir: özel mesaj açmak, davet kullanmak, profil değiştirmek ya da portal rotaları. Botların kullanabildiği her şey [REST referansında](https://noluyo.net/gelistirici/api.md).

## İzinler

### Her şey doğru görünüyor ama `403 missing_permissions` alıyorum

Botun bu işlem için gereken izni yok. Rotaya gereken izin [REST referansında](https://noluyo.net/gelistirici/api.md) her rotanın altında yazar. Şunlara bak:

1. **Botun rolünde bu izin var mı?** Sunucu ayarlarındaki Roller listesinde botun adını taşıyan rolü aç. İzin yoksa ekle; bot bunu kendisi ekleyemez.
2. **Kanal ayarları izni kaldırıyor mu?** Sunucuda izni olsa bile kanalın izin ayarı onu alabilir.
3. **Bot zaman aşımında mı?** Zaman aşımındaki bir üye yalnızca `ViewChannel` ve `ReadMessageHistory` izinlerini korur.
4. **Sahip olmadığı bir izni mi veriyor?** Bot sahip olmadığı bir izni bir role veya kanal ayarına veremez; bu da `missing_permissions` döner. Çözüm, önce botun rolüne o izni vermek.

### Rol yeterince yüksek değil: `403 role_hierarchy`

Bot, işlem yaptığı üyenin en yüksek rolünden veya düzenlediği rolden daha yüksek bir role sahip olmalı. Eşit olmak yetmez. Yeni botun rolü `@everyone`'ın hemen üstünde başlar, bu yüzden başta yalnızca rolü olmayan üyeler üzerinde işlem yapabilir.

**Çözüm:** Bir sunucu yöneticisi, **Sunucu ayarları** içindeki **Roller** listesinde botun rolünü işlem yapacağı rollerin üstüne sürüklesin. Sunucu sahibi üzerinde hiçbir bot işlem yapamaz.

> **Not:** İki hata kolayca karışır. `missing_permissions`, izin **yok** demektir; rolü yukarı taşımak düzeltmez. `role_hierarchy`, izin var ama rütbe **yetmiyor** demektir; izin eklemek düzeltmez.

### `403 missing_access` alıyorum

Botun bu kanalı görme izni (`ViewChannel`) yok. Sunucuda veya kanal ayarlarında bu izni ver.

### Mesaj listesi hep boş geliyor, hata da yok

Botun **Mesaj geçmişini oku** (`ReadMessageHistory`) izni yok. Liste rotaları bu durumda hata vermez, boş liste döndürür. Rolüne bu izni ekle.

### Botun rolünü silemiyorum veya başkasına veremiyorum: `400 managed_role`

Botun rolü ona aittir. Silinemez, başkasına verilemez, bottan alınamaz. Adını, rengini, izinlerini ve sırasını ise normal kurallarla değiştirebilirsin. Bot sunucudan çıkınca rol de silinir.

## Hız sınırları

### `429 rate_limited` alıyorum

Sınırı aştın. Yanıttaki `retry_after` kadar saniye bekleyip yeniden dene:

```js
if (res.status === 429) {
  const { retry_after } = await res.json();
  await new Promise((done) => setTimeout(done, retry_after * 1000));
  // sonra isteği yeniden gönder
}
```

Sürekli alıyorsan isteklerini azalt. Sınırlar [Hız sınırları](https://noluyo.net/gelistirici/rate-limit.md) sayfasında.

### `429 slowmode` alıyorum

Kanalda yavaş mod açık. `retry_after` kadar bekle. Bota `ManageMessages` veya `ManageChannels` izni verilirse yavaş moddan etkilenmez.

### `429 upload_quota` alıyorum

Kısa sürede çok dosya yükledin: saatte 1 GiB, günde 3 GiB sınırı var. `retry_after` kadar bekle.

### `403 temporarily_banned` alıyorum

Bu IP adresinden çok fazla reddedilmiş bot isteği geldi. `retry_after` kadar bekle ve programını düzelt: `401`'de dur, `403`'ü tekrar etme, `429`'da bekle. Ayrıntılar [Hız sınırları](https://noluyo.net/gelistirici/rate-limit.md) sayfasında.

## Mesajlar

### Botum `!ping` yazılınca bir şey yapmıyor

Sırayla şunlara bak:

1. Program çalışıyor mu ve terminalde `READY` görünüyor mu? Görünmüyorsa bağlantının kapanış koduna bak, tablosu [Gateway](https://noluyo.net/gelistirici/gateway.md) sayfasında.
2. Identify'daki `intents` değerinde `GUILD_MESSAGES` var mı? Yoksa mesaj olayları hiç gelmez.
3. `MESSAGE_CONTENT` var mı? Yoksa `content` boş gelir ve `!ping` eşleşmez. Aşağıdaki soruya bak.
4. Bot o kanalı görebiliyor mu? **Kanalları görüntüle** izni olmayan kanalların olayları gelmez.
5. Yanıt göndermek için **Mesaj gönder** ve **Mesaj geçmişini oku** izni var mı?

Çalışan bir örnek [Örnekler](https://noluyo.net/gelistirici/ornekler.md) sayfasında.

### Mesajların `content` alanı boş geliyor

Bot, `MESSAGE_CONTENT` intent'i olmadan yalnızca kendi mesajlarının ve kendisini etiketleyen mesajların metnini görür. Portalda **Mesaj içeriği**'ni aç ve identify'da bu intent'i de iste. Portalda yeni açtıysan programı yeniden başlat: açık oturum, identify ettiği intent'lerle sürer. Kural [Intent'ler](https://noluyo.net/gelistirici/intentler.md) sayfasında.

### Bağlantı `4014` ile kapanıyor

Identify'da portalda açmadığın ayrıcalıklı bir intent istiyorsun: `GUILD_MEMBERS`, `GUILD_PRESENCES` ya da `MESSAGE_CONTENT`. Portaldan aç ya da `intents` değerinden çıkar. `op 8` de oturumda olmayan bir intent gerektirirse aynı kod gelir.

### Bağlantı `4011` ile kapanıyor

Botun için aynı shard'la daha yeni bir oturum açıldı. Çoğunlukla programın iki kopyası çalışıyordur: biri eski bir terminalde ya da başka bir sunucuda kalmış olabilir. Birini durdur. Yeniden bağlanma döngüsüne girme, iki kopya birbirini düşürmeye devam eder. Daha küçük bir shard sayısıyla bağlanmak da aynı kodu verir, bkz. [Shard'lar](https://noluyo.net/gelistirici/shardlar.md).

### `400 invalid_body` alıyorum

İstek gövdesi tek bir geçerli JSON nesnesi değil ya da bir alanın türü yanlış. En sık nedeni ID'yi veya izin değerini metin yerine sayı olarak göndermektir: `"111600000000000000"` doğru, tırnaksız yazmak yanlış. Gövde isteyen bir rotaya boş gövde göndermek de bu hatayı verir; değişiklik yoksa `{}` gönder.

### `400 validation_failed` alıyorum

Bir alan kurala uymuyor. Yanıttaki `errors`, hangi alanın neden reddedildiğini söyler: `{"content":"required"}`. Örneğin dosya, anket, iletme veya çıkartma yoksa `content` zorunludur ve en çok 2000 karakterdir.

### `400 automod_blocked` alıyorum

Sunucunun otomatik moderasyonu mesajı engelledi. Yanıttaki `message`, sunucunun kendi metni olabilir. Kural göndereni zaman aşımına da alabilir. Sunucu sahibi ve `ManageGuild` izni olanlar bundan muaftır.

### `403 not_author` alıyorum

Bir bot yalnızca kendi mesajlarını düzenleyebilir. Başkasının mesajını düzenleyemez ama `ManageMessages` izniyle silebilir.

### `404 unknown_guild` veya `404 unknown_channel` alıyorum

Bot o sunucunun üyesi değil, kanal yok ya da ID yanlış. Botun gördüğü sunucuları `GET /users/@me/guilds`, kanalları `GET /guilds/{guild_id}/channels` ile listele.

### Yanıtım `201` değil `200` geldi

Doğru: mesaj göndermek `200` döner. Her rotanın başarılı yanıtı [REST referansında](https://noluyo.net/gelistirici/api.md) yazar.

### Botum kişiye neden ilk yazamıyor?

Çünkü N'oluyo'da bot kimseye kendiliğinden yazamaz: istenmeyen mesajı baştan önlemek için DM'yi yalnızca kişi açar. Kişi botunun profilinden ya da üye listesinden "Mesaj gönder" dediğinde DM açılır; kişi yazdıktan, komut çalıştırdıktan ya da butona bastıktan sonra 24 saat serbestçe yazabilirsin. Bu süre dışında `403 dm_window_closed`, kişi DM'yi kapattıysa ya da botu engellediyse `403 dm_closed` alırsın. Ayrıntılar [Özel mesajlar](https://noluyo.net/gelistirici/ozel-mesajlar.md) sayfasında.

## Embed'ler ve butonlar

### Butona basınca "Bot yanıt vermedi." görünüyor

Bota basma ulaştı ama 3 saniye içinde geçerli bir yanıt gelmedi. Sırayla bak:

1. Bot çalışıyor ve gateway'e bağlı mı? Çevrimdışı bota basma sonradan gönderilmez.
2. `INTERACTION_CREATE` gelince ilk iş yanıt mı? Rol vermek ya da başka bir servise sormak gibi işleri yanıttan sonra yap; iş uzunsa önce `type: 5` ya da `type: 6` gönder.
3. `callback` isteği hata döndürüyor mu? Programının log'una bak: `validation_failed` gibi bir hata yanıtı geçersiz kılar. Reddedilen yanıt hakkını harcamaz, süre içinde düzeltip yeniden gönderebilirsin.

Ayrıntılar [Etkileşimler](https://noluyo.net/gelistirici/etkilesimler.md) sayfasında.

### `400 interaction_timeout` alıyorum

İlk yanıt 3 saniyeden sonra geldi. O etkileşime artık yanıt verilemez. Kodunda yanıttan önce çalışan uzun işi yanıtın arkasına taşı.

### Kişiler "Bu bileşen artık geçerli değil." görüyor

Bot mesajı düzenleyip butonu kaldırmış ya da `custom_id`'sini değiştirmiş; ekranı henüz güncellenmemiş biri eski butona basıyor. Basma bota ulaşmaz. Bu doğru davranıştır.

### Embed'deki görsel `invalid` diye reddediliyor

Embed görseli yalnızca aynı istekle yüklenen bir dosya olabilir: `attachment://dosya.png` yaz ve dosyayı `multipart/form-data` ile `files[0]` olarak gönder. Başka bir siteden adres kabul edilmez. Ayrıntılar [Embed'ler](https://noluyo.net/gelistirici/embedler.md#gorsel-gondermek) sayfasında.

## Yalnızca basan kişinin gördüğü mesajlar

### Ephemeral mesajım sayfa yenilenince kayboluyor

Doğru: N'oluyo bu mesajı saklamaz, yenilemede ve uygulama yeniden açılınca gider. Kalıcı olması gereken bir sonucu kişinin bulabileceği başka bir yere de yaz. Ayrıntısı [Etkileşimler](https://noluyo.net/gelistirici/etkilesimler.md#yalnizca-basan-kisi-gorsun) sayfasında.

### `400 ephemeral_files` alıyorum

Ephemeral mesaj dosya taşıyamaz: `attachment://` ve `multipart/form-data` ikisi de reddedilir. Görseli herkese açık bir mesajla gönder.

### Ephemeral mesajı düzenledim, metni boşaldı

Ephemeral mesajda birleştirilecek bir satır yoktur, göndermediğin alan boş sayılır. `PATCH` ve `type: 7` içinde mesajın tamamını gönder.

## Ses

### Bot ses kanalındaki konuşmaları duyabilir mi?

Hayır. Botların aldığı medya token'ında `canSubscribe: false` yazılıdır ve medya sunucusu botun hiçbir ses, görüntü ya da veri izine abone olmasına izin vermez; kodunda abone olmayı denesen bile tek bir ses karesi gelmez. Bot seste yalnızca ses yayınlar. Odadayken yalnızca kimin bağlı olduğunu, susturma durumunu ve kimin o an konuştuğunu (ses içeriği olmadan) görür. Ayrıntılar [Ses](https://noluyo.net/gelistirici/ses.md) sayfasında.

## Bu sayfayı yapay zekaya verirsen

> **İpucu:** Aldığın bir hatayı yapay zekaya çözdürürken hata metnini yapıştırırken `.env` dosyanı veya `BOT_TOKEN` değerini kesinlikle paylaşma; yanında bu sayfayı ya da [Sık hatalar](https://noluyo.net/gelistirici/sik-hatalar.md) tablosunu ver.

## Sırada ne var

- [Sık hatalar](https://noluyo.net/gelistirici/sik-hatalar.md): belirtiye göre sebep ve çözüm tablosu
- [Hatalar](https://noluyo.net/gelistirici/hatalar.md): tüm REST ve etkileşim hata kodlarının tam listesi
- [Sözlük](https://noluyo.net/gelistirici/sozluk.md): teknik terimlerin iki cümlelik sade açıklamaları
