# Uygulamalar ve botlar

Bir **uygulama**, botunu temsil eder: adı, resmi, token'ı ve sunuculara ekleme bağlantısı onda durur. Her uygulamanın tek bir bot hesabı ve tek bir token'ı vardır, botun sunuculardaki görünen adı da uygulamanın adıdır.

Uygulamalarını [geliştirici portalından](https://noluyo.net/gelistirici/uygulamalar) yönetirsin. N'oluyo hesabınla giriş yapman yeterlidir.

## Kim uygulama oluşturabilir

Herkes uygulama oluşturabilir (herkese açık beta). Uygulama oluşturmak için:

- E-posta adresin doğrulanmış olmalı,
- Geliştirici sözleşmesini kabul etmiş olmalısın; portal ilk seferde sorar,
- Hesabın misafir hesabı olmamalı; misafir hesaba önce ayarlardan e-posta ve şifre bağla.

Bir hesap en çok 25 uygulamaya sahip olabilir. Portal, bir koşul eksikse ne yapman gerektiğini söyler.

## Uygulama oluşturma

**Uygulamalarım** sayfasında **Yeni uygulama**'ya bas.

| Alan | Kural |
|---|---|
| **Uygulama adı** | En çok 32 karakter. Botun görünen adı olur. |
| **Bot kullanıcı adı** | 4 ile 32 karakter; küçük harf, rakam, `_` ve `.`; art arda iki nokta olamaz. Sonradan değiştirilemez, başkası almışsa kullanılamaz. |

**Oluştur**'a basınca token gösterilir. **Kopyala** ile al: bir daha gösterilmez. Uygulama özel başlar, yani botu yalnızca sen ekleyebilirsin.

## Uygulama sayfası

### Genel

Botun resmini, **Uygulama adı**'nı ve en çok 400 karakterlik **Açıklama**'yı burada değiştirirsin. Açıklama, bot eklenirken gösterilir. Resim PNG, JPEG, WebP veya GIF olabilir; en çok 5 MB (hareketli GIF 10 MB) ve 4096×4096 piksel.

**Herkese açık** açıksa sunucu yöneten herkes botu bağlantıyla ekleyebilir. Kapalıysa yalnızca sen eklersin.

### Ayrıcalıklı intent'ler

**Sunucu üyeleri**, **Presence** ve **Mesaj içeriği** hassas veri açar, bu yüzden bot bunları ancak burada açtıysan identify'da isteyebilir. Yeni açtığın bir intent, çalışan oturuma kendiliğinden geçmez: programını yeniden başlat. Kapattığında botun bağlantıları hemen düşer. Bot 100 ya da daha çok sunucudaysa bu intent'ler için onay gerekir. Ne işe yaradıkları [Intent'ler](https://noluyo.net/gelistirici/intentler.md) sayfasında.

### Token

Kayıtlı token güvenlik için gösterilmez. Kaybettiysen ya da sızdığından şüpheleniyorsan **Token'ı yenile**'ye bas: yeni token yalnızca o anda gösterilir, eskisi hemen çalışmaz olur ve botun açık gateway bağlantıları `4004` ile kapanır. Token'ı nasıl koruyacağın [Kimlik doğrulama](https://noluyo.net/gelistirici/kimlik.md) sayfasında.

### Etkileşim adresi

Etkileşimleri gateway yerine kendi https adresine almak istersen **Etkileşimler** bölümünde **Etkileşim adresi**'ne yaz ve **Kaydet ve test et**'e bas. N'oluyo adrese iki imzalı `PING` yollar; doğru yanıtlanırsa adres kaydedilir ve etkileşimler artık oraya gider. **Herkese açık anahtar** isteklerin imzasını doğrulamana yarar. **Adresi kaldır** gateway'e döner, **Teslim günlüğü** son teslimleri gösterir. Adresi yalnızca sen görürsün. Nasıl kurulduğu [HTTP ile teslim](https://noluyo.net/gelistirici/http-teslim.md) sayfasında.

### Ekleme bağlantısı

Bota vereceğin izinleri seç; bağlantı buna göre oluşur. **Bağlantıyı kopyala** ile paylaş ya da **Bağlantıyı aç** ile kendin kullan. Yalnızca botunun gerçekten ihtiyaç duyduğu izinleri iste.

Bağlantının biçimi şöyledir; `izin`, seçilen izinlerin [değeridir](https://noluyo.net/gelistirici/izinler.md):

```
https://noluyo.net/bot-ekle/<application_id>?izin=68608
```

### Tehlikeli bölge

**Uygulamayı sil**: Bot bulunduğu tüm sunuculardan çıkar ve token'ı çalışmayı bırakır. Gönderdiği mesajlar kalır. Hesabını silersen uygulamaların da silinir.

Oluşturma, token yenileme ve resim yüklemenin kendi sınırları vardır; bkz. [Hız sınırları](https://noluyo.net/gelistirici/rate-limit.md).

## Botu sunucuya ekleme

Bağlantıyı açan kişi giriş yapar, botun adını, açıklamasını ve istediği izinleri görür, **Sunucu** listesinden bir sunucu seçer ve **Sunucuya ekle**'ye basar. Listede yalnızca yönettiği sunucular görünür.

- Kişinin kendisinde olmayan izinler bota verilmez; sayfa bunları işaretler.
- Sayfa yalnızca listelediği izinleri verir. Portaldaki listede olmayan bir izin gerekirse, sunucu yöneticisi onu bot rolüne sonradan ekleyebilir. Embed göndermek için ayrı bir izin gerekmez; [Embed'ler ve bileşenler](https://noluyo.net/gelistirici/embedler.md) için `SendMessages` yeter.

Şu durumlarda bot eklenemez:

| Durum | Hata kodu |
|---|---|
| Kişide sunucuda `ManageGuild` izni yok | `missing_permissions` |
| Bot özel ve kişi sahibi değil | `bot_private` |
| Bot bu sunucudan yasaklı | `banned` |
| Bot zaten sunucuda | `bot_in_guild` |
| Doğrulanmamış bot 100 sunucuya ulaşmış | `bot_guild_limit` |
| Sunucu rol sınırında | `max_roles` |

100 sunucu sınırını kaldırmak için [Doğrulama](https://noluyo.net/gelistirici/dogrulama.md), botunu `/kesfet` dizininde göstermek için [Rehbere girmek](https://noluyo.net/gelistirici/rehbere-girmek.md) sayfasındaki adımları izle.

## Botun rolü

Bir sunucuya eklenen bot, otomatik olarak kendi rolünü alır. API'de buna **yönetilen rol** denir:

- Rolün adı uygulamanın adıdır, izinleri eklenirken seçilen izinlerdir.
- Rolün `application_id` alanı doludur; bu rolü böyle tanırsın. Uygulamada "Bot rolü" etiketiyle görünür.
- Rol, doğrudan `@everyone`'ın üstüne konur. Bu yüzden bot başlangıçta rolü olan üyelere karışamaz; bkz. [rol sıralaması](https://noluyo.net/gelistirici/izinler.md).
- Rol silinemez, başka birine verilemez, bottan alınamaz (`managed_role`). Otomatik atanan role çevrilemez.
- Sunucu yöneticileri rolün adını, rengini, izinlerini ve sırasını, normal rol kurallarıyla değiştirebilir.
- Bot sunucudan ayrılırsa, atılırsa veya yasaklanırsa rol de silinir. Yeniden eklenince yeni bir rol oluşur.

Botun izinleri yalnızca bu rolden gelmez: `@everyone` rolünün izinleri ve kanal ayarları da geçerlidir.

## Botun yapamadıkları

Bot sunucuya kendisi katılamaz, sunucu oluşturamaz, davet kullanamaz, DM kanalı açamaz (kişi açar, bkz. [Özel mesajlar](https://noluyo.net/gelistirici/ozel-mesajlar.md)), arkadaş ekleyemez ve kendi profilini API ile değiştiremez. Bu rotalar `403 bot_forbidden` döner. Bot, sunucudan `DELETE /users/@me/guilds/{guild_id}` ile ayrılabilir.

## API ile yönetmek

Bot kurmak için bu bölüme ihtiyacın yok. Portalın yaptığı her şeyi otomatikleştirmek istersen aynı rotaları kendin çağırabilirsin.

Bu rotalar bot token'ını kabul etmez (`403 bot_forbidden`), kişi oturumu ister: `Authorization: Bearer <oturum token'ı>`. Oturum token'ı hesabının tamamına erişim sağlar; botun koduna veya sunucusuna asla koyma.

Oturum token'ını girişten alırsın:

```bash
curl -X POST "https://noluyo.net/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"email":"sen@example.com","password":"parolan"}'
```

İki adımlı doğrulama açıksa yanıt `{"mfa":true,"ticket":"..."}` olur; `POST /api/v1/auth/mfa/totp` isteğine `{"ticket":"...","code":"123456"}` göndererek tamamlarsın. Google veya Apple ile açılmış hesabın, parola belirlenene kadar parolası yoktur.

| İşlem | Rota |
|---|---|
| Uygulama oluştur | `POST /applications` |
| Uygulamaları listele | `GET /applications` |
| Birini gör | `GET /applications/{application_id}` |
| Ad, açıklama, `public` değiştir | `PATCH /applications/{application_id}` |
| Sil | `DELETE /applications/{application_id}` |
| Token'ı yenile | `POST /applications/{application_id}/token` |
| Avatar yükle (`file` parçası) | `POST /applications/{application_id}/avatar` |
| Avatarı kaldır | `DELETE /applications/{application_id}/avatar` |
| Ekleme ekranının bilgileri | `GET /applications/{application_id}/public` |
| Botu sunucuya ekle | `POST /applications/{application_id}/authorize` |

Botu API ile eklemek şöyledir; başarıda `204` döner:

```bash
curl -i -X POST "https://noluyo.net/api/v1/applications/$APP_ID/authorize" \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"guild_id":"'"$GUILD_ID"'","permissions":"68608"}'
```

Sayfadan farklı olarak API, kişide olmayan bir izni çıkarmaz, isteği `403 missing_permissions` ile reddeder; listede olmayan izinleri de verebilir. `permissions` yoksa rolün izni olmaz. Başkasının uygulaması bu rotalarda `404 unknown_application` verir (herkese açık botlarda `public` ve `authorize` hariç).

Ayrıntılar ve örnekler [REST referansında](https://noluyo.net/gelistirici/api-applications.md).

## Bu sayfayı yapay zekaya verirsen

> **İpucu:** Uygulama yönetimi için yapay zekaya kod yazdırırken şu ayrımı hatırlat:
>
> - Botun mesaj ve sunucu işlemleri `Authorization: Bot <token>` kullanır; `/applications` yönetim uçları ise kişi oturumu (`Bearer`) ister ve normal bir botun kodunda çağrılmaz.
> - Bot bir sunucuya kendiliğinden giremez; sunucu yöneticisi `/bot-ekle/<application_id>?izin=...` adresinden ekler.

## Sırada ne var

- [İzinler](https://noluyo.net/gelistirici/izinler.md): ekleme bağlantısındaki `izin` değerinin hesaplanması ve rol sırası
- [Doğrulama](https://noluyo.net/gelistirici/dogrulama.md): 100 sunucu sınırını aşmak ve ayrıcalıklı intent onayı almak
- [N'oluyo ile giriş](https://noluyo.net/gelistirici/hesapla-giris.md): aynı uygulamayla web sitene kullanıcı girişi eklemek
