# Başka platformdan gelenler

Daha önce başka bir sohbet platformunda bot geliştirdiysen N'oluyo'nun kavramlarının büyük bölümü sana ilk dakikadan tanıdık gelecektir. Ancak N'oluyo başka bir platformun birebir kopyası veya uyumluluk katmanı değildir: gizlilik, güvenlik ve öngörülebilirlik için bilinçli olarak farklı tasarlanmış kuralları vardır.

> **Uyarı:** **Başka platformun kütüphanesiyle bağlanmaya çalışma.** Yabancı bir kütüphanenin taban adresini değiştirip N'oluyo'ya yönlendirmeye kalktığında sıkıştırma, opcode farkları, görsel kuralları ve ses protokolü yüzünden bağlantın kırılır. Sıfır bağımlılıklı resmi [JavaScript](https://noluyo.net/gelistirici/kutuphane-js.md) veya [Python](https://noluyo.net/gelistirici/kutuphane-python.md) `noluyo-bot` kütüphanesini ya da doğrudan standart `fetch` + `WebSocket` çağrılarını kullan.

## Tanıdık gelenler

Şu yapı taşları bildiğin zihinsel modelle aynı şekilde çalışır:

- **Snowflake kimlikler:** 64 bitlik zaman sıralı kimlikler JSON içinde her zaman ondalık metin (`"21531879014400001"`) olarak taşınır; sağ kaydırma (`id >> 22`) mantığı aynıdır.
- **Bot kimlik başlığı:** REST rotalarında `Authorization: Bot <token>`, gateway `op 2` (`IDENTIFY`) çerçevesinde ise öneksiz düz `token` gönderilir.
- **Intent bit maskesi ve ayrıcalıklı üçlü:** Hangi olayların geleceğini `intents` sayısı belirler; `GUILD_MEMBERS` (`1 << 1`), `GUILD_PRESENCES` (`1 << 8`) ve `MESSAGE_CONTENT` (`1 << 15`) ayrıcalıklıdır, portaldan açılır ve 100 sunucudan itibaren onay ister.
- **Shard mantığı ve oturum sürdürme:** `[shard_id, shard_count]` dizisi, `op 1` (`HEARTBEAT`) / `op 11` (`HEARTBEAT_ACK`), `READY` ardından tek tek akan `GUILD_CREATE` olayları ve kopunca `op 6` (`RESUME`) ile devam etme akışı tanıdıktır.
- **Zengin mesajlar ve etkileşimler:** `embeds`, eylem satırlı (`type: 1`) buton ve seçim menüleri (`components`), eğik çizgi (`/`) ve sağ tık komutları, açılır formlar (`modal`), 3 saniyelik ilk yanıt kuralı, `flags: 64` ephemeral yanıtlar ve Ed25519 imzalı HTTP etkileşim teslimi aynı kavramlarla çalışır.
- **Hız sınırı başlıkları:** Yanıtlarda `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset-After`, `X-RateLimit-Bucket` ve `429` durumunda `Retry-After` ile `X-RateLimit-Scope` döner.

## Bilinçli olarak farklı olanlar

Başka bir platformdaki botunu N'oluyo'ya taşırken takılmamak için aşağıdaki fark tablosunu baştan kontrol et:

| Konu | N'oluyo'daki kural | Neden böyle ve ne yapmalısın |
|---|---|---|
| **Taban adres ve sürüm** | `https://noluyo.net/api/v1` ve bot gateway adresi için `GET /api/v1/gateway/bot` (`wss://noluyo.net/bot-gateway`) | `/api/v9` veya `/api/v10` yoktur; insan istemcilerinin kullandığı `/gateway` yolu bot token'ını `4004` ile reddeder. |
| **Gateway opcode `30` ve `31`** | `op 30` (`PHONE_CAMERA`) ve `op 31` (`ACTIVE`) yalnızca insan uygulamalarına aittir; gönderen bot **`4001 UNKNOWN_OPCODE`** ile kapatılır | Sunucu abonelikleri için istemci tarafı özel opcode gönderilmez; sunucu olayları `op 2` içindeki `intents` bitleriyle gelir. |
| **Gateway sıkıştırması yok** | Bot gateway bağlantısında `zlib-stream` veya `zstd` sıkıştırması sunulmaz; `?compress=` parametresi yok sayılır | Her çerçeve her iki yönde de düz UTF-8 JSON metnidir; ek sıkıştırma çözücüsü kurma. |
| **Embed görselleri yalnızca `attachment://`** | `embeds[].image.url`, `thumbnail.url`, `author.icon_url` ve `footer.icon_url` **yalnızca** aynı mesajla yüklenen `attachment://dosya.png` değerini kabul eder | Dış `https://` görsel adresi kullanıcıların IP adresini üçüncü taraf sunuculara sızdırabileceği için `400 validation_failed` ile reddedilir. Görseli `multipart/form-data` ile ekle ([Embed'ler](https://noluyo.net/gelistirici/embedler.md#gorsel-gondermek)). |
| **Seste sıfır dinleme (yalnız yayın)** | Botlar seste `op 4` ve **LiveKit** (`wss://noluyo.net/rtc`) üzerinden yalnızca tek bir mikrofon ses izi yayınlar; `canSubscribe: false` zorunludur | Özel UDP ses şifrelemesi yerine standart LiveKit WebRTC kullanılır ve medya sunucusu bota hiçbir ses karesi göndermez ([Ses](https://noluyo.net/gelistirici/ses.md)). |
| **Sıkı DM gizliliği ve 24 saat penceresi** | `POST /users/@me/channels` botlara kapalıdır (`403 bot_forbidden`); bot asla ilk DM'yi atamaz | DM kanalını yalnızca kişi açar. Kişinin son mesajı, komutu veya buton basmasından sonra botun 24 saat yanıt penceresi vardır; sonrasında `403 dm_window_closed` döner ([Özel mesajlar](https://noluyo.net/gelistirici/ozel-mesajlar.md)). |
| **Katı JSON ve alan doğrulaması** | Kişi/uygulama rotalarında bilinmeyen JSON alanları `400 invalid_body` ile reddedilir; bot rotalarında sayısal ID'ler ve şema dışı değerler reddedilir | ID ve izin bitlerini her zaman tırnak içinde metin (`"68608"`) olarak gönder; yalnızca [REST referansında](https://noluyo.net/gelistirici/api.md) belgelenen alanları kullan. |
| **Ekleme bağlantısı biçimi** | Bot ekleme adresi `/oauth2/authorize?scope=bot` değil, doğrudan `https://noluyo.net/bot-ekle/<application_id>?izin=<deger>` şeklindedir | `/oauth2/authorize` yalnızca [N'oluyo ile giriş yap](https://noluyo.net/gelistirici/hesapla-giris.md) (kullanıcı kimlik doğrulaması) içindir ve `S256` PKCE zorunludur. |
| **Ortak platform bütçesi** | Botların yoğun yazma ve büyük embed yayılma istekleri ortak koruma tavanına tabidir (`X-RateLimit-Scope: shared` ve `fanout_too_large`) | `429` aldığında `X-RateLimit-Scope: shared` gelebilir; `retry_after` süresine uy ([Hız sınırları](https://noluyo.net/gelistirici/rate-limit.md)). |

## Taşıma kontrol listesi

Var olan bir botun iş mantığını N'oluyo'ya taşırken şu sırayı izle:

1. Eski kütüphane bağımlılığını kaldırıp `noluyo-bot` paketini ([JS](https://noluyo.net/gelistirici/kutuphane-js.md) veya [Python](https://noluyo.net/gelistirici/kutuphane-python.md)) kur.
2. Tüm dış URL'li embed görsellerini yerel dosya veya bellek tamponu yüklemesiyle `attachment://...` biçimine çevir.
3. Üyelere kendiliğinden özel mesaj (`DM`) atan akışları kanal içi ephemeral (`flags: 64`) yanıtlara dönüştür; üye bota kendisi DM açarsa 24 saat kuralına ve `dm_closed` hatasına göre davran.
4. Ses çalan kodun varsa özel ses soketi paketlerini çıkarıp `bot.voice.join(...)` ve `@livekit/rtc-node` / `livekit` akışına geçir; ses dinleme/kayıt özelliği varsa kaldır.
5. Sunucu ekleme bağlantısını `https://noluyo.net/bot-ekle/<app_id>?izin=...` olarak güncelle.

## Bu sayfayı yapay zekaya verirsen

> **İpucu:** Başka bir platform için yazılmış eski bot kodunu N'oluyo'ya çevirtirken eski kodun yanına bu sayfayı ve `/gelistirici/llms-kisa.txt` dosyasını ekle. Yapay zekaya eski kütüphaneyi tamamen silip `noluyo-bot` kullanmasını, dış embed resimlerini `attachment://` yapmasını ve otomatik DM gönderen satırları ephemeral yanıta çevirmesini açıkça söyle.

## Sırada ne var

- [JavaScript kütüphanesi](https://noluyo.net/gelistirici/kutuphane-js.md) ve [Python kütüphanesi](https://noluyo.net/gelistirici/kutuphane-python.md): resmi `noluyo-bot` SDK'ları ile temiz başlangıç
- [Embed'ler](https://noluyo.net/gelistirici/embedler.md): `attachment://` görsel kuralı ve kart sınırları
- [Özel mesajlar](https://noluyo.net/gelistirici/ozel-mesajlar.md) ve [Ses](https://noluyo.net/gelistirici/ses.md): DM penceresi ve LiveKit tabanlı yayın modeli
