Ana içeriğe geç

Uygulamalar

Uygulama, tek bir kullanıcı hesabının sahip olduğu bir OAuth2 istemcisidir ve her bot hesabı bir uygulamaya aittir. Bir uygulama oluşturmak her zaman onun bot hesabını da oluşturur. Bir kullanıcı en fazla 25 uygulamaya sahip olabilir. Yetkilendirme kodu akışı (authorisation code grant), kapsamlar ve üçüncü taraf istemcilere verilen token'lar OAuth2 kaynağına aittir. Adım adım anlatım için bkz. Bot oluşturma.

Erişim kuralları

Yönetim yolları yalnızca kullanıcıya yöneliktir: kullanıcı oturumu token'ı gerektirirler; geçerli bir bot token'ı 403 ACCESS_DENIED ile (geçersiz olanı 401 ile) reddedilir. Herkese açık uygulamayı getir hiçbir kimlik bilgisi gerektirmez. Bot uygulamasını getir yalnızca bot token'ı kabul eder; Geçerli uygulamayı getir ise ikisini de kabul eder.

Bir uygulamayı yalnızca sahibi okuyabilir veya değiştirebilir. Başka bir hesap 403 FORBIDDEN alır.

Kimlik bilgisi yenileme yolları ve Uygulamayı sil sudo kipi gerektirir. Kanıtı JSON gövdesine koyun (password, mfa_code veya sudo_proof) ya da bu yolları Sudo kipi ver ile alınmış bir sudo yetkisine sahip bir oturumdan çağırın. Kanıt eksikse 403 SUDO_MODE_REQUIRED döner.

Kimlik bilgileri yalnızca bir kez gösterilir

İstemci gizli anahtarı yalnızca Uygulama oluştur ve İstemci gizli anahtarını sıfırla tarafından, bot token'ı ise yalnızca Uygulama oluştur ve Bot token'ını sıfırla tarafından döndürülür. TEBHOS her birinin yalnızca hash'ini saklar ve onları yeniden gösteremez.

Bot token'ları

Bot token'ı; uygulama kimliği, bir nokta ve base64url olarak kodlanmış 32 rastgele bayttan oluşan bir gizli değerdir:

1501314428688998182.q0lPd3Jm3wX8Yv1lS4a2bQ6uK9tE7nZcR5hJ0mAoVfI

Onu Authorization: Bot <token> olarak gönderin. Bot kullanıcısının kimliği her zaman uygulama kimliğine eşittir. Bkz. Kimlik doğrulama.

Uygulama nesnesi

Uygulamanın, sahibinin gördüğü hâli.

Yapı

Alan Tür Açıklama
id snowflake Uygulama kimliği
name string Uygulama adı (1-100 karakter)
redirect_uris array[string] Kayıtlı OAuth2 yönlendirme URI'leri, tanımlı bir sıra olmadan; hiç yoksa boş dizi
bot_public boolean Botu yalnızca sahibinin değil, herkesin kurup kuramayacağı
bot_require_code_grant boolean Botu kurmanın yönlendirme URI'si içeren tam bir kod akışı gerektirip gerektirmediği
client_secret? string İstemci gizli anahtarı; yalnızca Uygulama oluştur ve İstemci gizli anahtarını sıfırla yanıtlarında bulunur
bot? uygulama botu nesnesi Bot hesabı; bot hesabı artık okunamıyorsa yer almaz

Örnek

{
  "id": "1501314428688998182",
  "name": "Party Parrot",
  "redirect_uris": ["https://example.com/callback"],
  "bot_public": true,
  "bot_require_code_grant": false,
  "bot": {
    "id": "1501314428688998182",
    "username": "Party_Parrot",
    "discriminator": "0001",
    "avatar": null,
    "banner": null,
    "bio": null,
    "mfa_enabled": false,
    "authenticator_types": [],
    "flags": 0
  }
}

Uygulama botu nesnesi

Bir uygulamanın sahip olduğu bot hesabı.

Yapı

Alan Tür Açıklama
id snowflake Bot kullanıcı kimliği; uygulama kimliğine eşittir
username string Botun kullanıcı adı
discriminator string Başı sıfırla doldurulmuş dört haneli ayırt edici (discriminator)
avatar ?string Avatar hash'i veya null
banner ?string Afiş (banner) hash'i veya null
bio ?string Profil biyografisi veya null
mfa_enabled boolean authenticator_types listesinin boş olup olmadığı
authenticator_types array[integer] Bot oluşturulurken sahibinin hesabından kopyalanan kimlik doğrulayıcı türleri
flags integer Botun kullanıcı bayrakları; bot bayrakları dahil
token? string Bot token'ı; yalnızca Uygulama oluştur yanıtında bulunur

Bot bayrakları

Değer Ad Açıklama
1 << 4 FRIENDLY_BOT Bot arkadaşlık isteklerini kabul eder
1 << 5 FRIENDLY_BOT_MANUAL_APPROVAL Bota gelen arkadaşlık istekleri elle onay gerektirir

Bu bitler botun kullanıcı flags değerinde bulunur. Bot profilini güncelle yalnızca bu iki biti değiştirebilir. İstemci tanımadığı bitleri yok saymalıdır (MUST).

Herkese açık uygulama nesnesi

Uygulamanın, kimlik bilgisi göndermeyen çağıranlar dahil herhangi bir çağıranın gördüğü hâli.

Yapı

Alan Tür Açıklama
id snowflake Uygulama kimliği
name string Uygulama adı
icon ?string Uygulama simgesi olarak kullanılan bot avatar hash'i veya null
description null Her zaman null
redirect_uris array[string] Kayıtlı yönlendirme URI'leri
scopes array[string] Uygulamanın bot hesabı varsa ["bot"], aksi hâlde boş
bot_public boolean Çağıranın botu kurup kuramayacağı. Bot özel olsa bile sahip için her zaman true
bot ?object Bot hesabının {id, username, discriminator, global_name, avatar, bot, flags} bilgisi veya null
current_user ?object Çağıranın {id, username, discriminator, global_name, avatar} bilgisi; istekte geçerli bir kullanıcı oturumu yoksa null

Herkese açık veri

Bu nesne yönlendirme URI listesini ve bot profilini herkese açar. İstemci gizli anahtarını, bot token'ını veya sahibin kimliğini hiçbir zaman içermez.

Geçerli bot uygulaması nesnesi

Bir bot token'ının arkasındaki uygulama; o token'a döndürüldüğü hâliyle.

Yapı

Alan Tür Açıklama
id snowflake Uygulama kimliği
name string Uygulama adı
icon ?string Botun avatar hash'i veya null
description ?string Botun biyografisi veya null
bot_public boolean Botu herkesin kurup kuramayacağı
bot_require_code_grant boolean Botu kurmanın tam bir kod akışı gerektirip gerektirmediği
verify_key string Uyumluluk için yer tutucu: her zaman 64 adet 0 karakteri
owner object Sahip hesabın {id, username, discriminator, global_name, avatar} bilgisi
redirect_uris array[string] Kayıtlı yönlendirme URI'leri
bot? uygulama botu nesnesi token olmadan bot hesabı

Bot profili nesnesi

Bot profilini güncelle tarafından döndürülür.

Yapı

Alan Tür Açıklama
id snowflake Bot kullanıcı kimliği
username string Botun kullanıcı adı
discriminator string Başı sıfırla doldurulmuş dört haneli ayırt edici
avatar ?string Avatar hash'i veya null
banner ?string Afiş hash'i veya null
bio ?string Biyografi veya null
flags integer Botun kullanıcı bayrakları

Bot token'ı sıfırlama nesnesi

Bot token'ını sıfırla tarafından döndürülür.

Yapı

Alan Tür Açıklama
token string Yeni bot token'ı
bot uygulama botu nesnesi token olmadan bot hesabı

Sahip olunan uygulamaları listele

GET /users/@me/applications

Geçerli kullanıcının sahip olduğu tüm uygulama nesnelerinin bir dizisini döndürür. Kullanıcı oturumu token'ı gerektirir; Bot kimlik bilgisiyle yapılan bir istek 403 FORBIDDEN döndürür. Hiçbir girdide istemci gizli anahtarı veya bot token'ı yoktur. Liste sayfalanmaz.

Hız sınırı

oauth_dev:clients:list kovasında, her hesap için dakikada 60 istek.

Geçerli uygulamayı getir

GET /oauth2/applications/@me

Çağıranın uygulamalarını, kimlik bilgisi türüne göre seçerek döndürür:

Yanıtın biçimi kimlik bilgisine bağlıdır

Gövde, kullanıcı için bir dizi, bot için tek bir nesnedir. İkisini de kabul eden bir istemci biçime göre dallanmalıdır (MUST).

Hız sınırı

oauth_dev:clients:list kovasında, her kullanıcı veya bot için dakikada 60 istek.

Bot uygulamasını getir

GET /applications/@me

Sunulan bot token'ı için geçerli bot uygulaması nesnesini döndürür. Yalnızca Authorization: Bot <token> kabul edilir.

Yanıt

Durum Gövde Koşul
200 geçerli bot uygulaması nesnesi Uygulama döndürüldü
401 hata yanıtı Kimlik bilgisi eksik, bir bot token'ı değil, doğrulanamıyor ya da uygulaması veya sahibi artık mevcut değil (UNAUTHORIZED, mesaj invalid_token)

Her ret aynıdır; bu yüzden çağıran, hatalı biçimli bir token'ı uygulaması silinmiş bir token'dan ayırt edemez. Bir bot bu yolu açılışta token'ını doğrulamak için kullanabilir.

Herkese açık uygulamayı getir

GET /oauth2/applications/{id}/public

Herkese açık uygulama nesnesini döndürür. Kimlik doğrulama gerekmez. Geçerli bir kullanıcı oturumu current_user alanını doldurur; sahip ise bot_public: true görür.

Yol parametreleri

Alan Tür Açıklama
id snowflake Uygulama kimliği

Yanıt

Durum Gövde Koşul
200 herkese açık uygulama nesnesi Uygulama döndürüldü
400 hata yanıtı Kimlik bir snowflake değil
404 hata yanıtı Uygulama mevcut değil

Hız sınırı

oauth_dev:clients:list kovasında, her istemci için dakikada 60 istek.

Uygulama oluştur

POST /oauth2/applications

Bot hesabıyla birlikte bir uygulama oluşturur. İlk client_secret değerini ve bot.token içinde ilk bot token'ını içeren uygulama nesnesini döndürür.

Yol CAPTCHA korumalıdır: örnekte (instance) bir CAPTCHA sağlayıcısı varsa, eksik bir X-Captcha-Token 400 CAPTCHA_REQUIRED, reddedilen bir token ise 400 INVALID_CAPTCHA döndürür. Bkz. CAPTCHA işleme.

İstek başlıkları

Alan Tür Açıklama
X-Captcha-Token? string CAPTCHA çözümü
X-Captcha-Type? string hcaptcha veya turnstile; örnekteki (instance) sağlayıcıyı kullanmak için göndermeyin

JSON gövdesi

Alan Tür Açıklama
name string Uygulama adı (kırpıldıktan sonra 1-100 karakter)
redirect_uris? ?array[string] Kaydedilecek OAuth2 yönlendirme URI'leri
bot_public? boolean Botu herkesin kurup kuramayacağı (varsayılan true)
bot_require_code_grant? boolean Botu kurmanın tam bir kod akışı gerektirip gerektirmediği (varsayılan false)

Yönlendirme URI'leri tam olarak verildiği gibi saklanır. Uygulamayı yetkilendir ve token değişimi bunları bayt bayt karşılaştırır; bu yüzden geri çağırma adresinizin kullandığı dizeyi birebir, tercihen https ile kaydedin.

Yanıt

Durum Gövde Koşul
200 uygulama nesnesi Uygulama ve botu oluşturuldu
400 hata yanıtı Ad geçersiz ya da CAPTCHA eksik veya reddedildi
401 hata yanıtı Geçerli bir kullanıcı oturumu yok
400 hata yanıtı MAX_APPLICATIONS: çağıran zaten 25 uygulamaya sahip
429 hata yanıtı Yol kovası isteği reddetti

Yan etkiler

Botun kullanıcı adı uygulama adından türetilir: ASCII harfler, rakamlar ve _ korunur; boşluklar, - ve . ise _ olur ve sonuç 32 karaktere kesilir. Bu işlem 2 karakterden az bırakırsa veya adın boş bir ayırt edicisi yoksa, Bot artı 8 harf ve rakamdan oluşan rastgele bir ad kullanılır. Ayırt edici, o kullanıcı adı için boştaki en küçük sayıdır. Bot avatar, afiş veya biyografi olmadan başlar.

Hız sınırı

oauth_dev:clients:create kovasında, her hesap için saatte 10 istek.

Örnek

curl -X POST https://tebhos.com/api/v1/oauth2/applications \
  -H "Authorization: Bearer <session token>" \
  -H "Content-Type: application/json" \
  -d '{"name": "Party Parrot", "redirect_uris": ["https://example.com/callback"]}'

Uygulamayı getir

GET /oauth2/applications/{id}

Tek bir uygulama nesnesi döndürür. Yalnızca sahibi okuyabilir.

Yol parametreleri

Alan Tür Açıklama
id snowflake Uygulama kimliği

Yanıt

Durum Gövde Koşul
200 uygulama nesnesi Uygulama döndürüldü
400 hata yanıtı Kimlik bir snowflake değil
403 hata yanıtı Çağıran uygulamanın sahibi değil
404 hata yanıtı Uygulama mevcut değil

Hız sınırı

oauth_dev:clients:list kovasında, her hesap için dakikada 60 istek.

Uygulamayı güncelle

PATCH /oauth2/applications/{id}

Bir uygulamayı günceller ve sonuçtaki uygulama nesnesini döndürür. Yalnızca sahibi güncelleyebilir. Gönderilmeyen alanlar değiştirilmeden bırakılır.

Yol parametreleri

Alan Tür Açıklama
id snowflake Uygulama kimliği

JSON gövdesi

Alan Tür Açıklama
name? string Uygulama adı (kırpıldıktan sonra 1-100 karakter)
redirect_uris? array[string] Yönlendirme URI'lerinin yeni ve eksiksiz kümesi. [] hepsini kaldırır; null veya alanın gönderilmemesi kümeyi değiştirmez
bot_public? boolean Botu herkesin kurup kuramayacağı
bot_require_code_grant? boolean Botu kurmanın tam bir kod akışı gerektirip gerektirmediği

Bir yönlendirme URI'sini kaldırmak yalnızca yeni yetkilendirme isteklerini etkiler. O URI için zaten verilmiş bir kod onunla hâlâ değiştirilebilir ve mevcut token'lar etkilenmez. Ne istemci gizli anahtarı ne de bot token'ı değişir.

Yanıt

Durum Gövde Koşul
200 uygulama nesnesi Uygulama güncellendi
400 hata yanıtı Kimlik veya ad geçersiz
403 hata yanıtı Çağıran uygulamanın sahibi değil
404 hata yanıtı Uygulama mevcut değil

Hız sınırı

oauth_dev:clients:update kovasında, her uygulama için dakikada 30 istek; Bot profilini güncelle ile paylaşılır.

Bot profilini güncelle

PATCH /oauth2/applications/{id}/bot

Uygulamanın bot hesabını günceller ve bot profili nesnesini döndürür. Yalnızca sahibi güncelleyebilir.

Yol parametreleri

Alan Tür Açıklama
id snowflake Uygulama kimliği

JSON gövdesi

Alan Tür Açıklama
username? string Yeni kullanıcı adı (kırpıldıktan sonra 2-32 karakter)
discriminator? integer Yalnızca mevcut ayırt ediciye eşitse kabul edilir; ayırt edici seçilemez
avatar? ?string Veri URI'si (data:image/png;base64,...) olarak yeni bir avatar veya kaldırmak için null
banner? ?string Veri URI'si olarak yeni bir afiş veya kaldırmak için null
bio? ?string Biyografi (en fazla 1024 karakter) veya kaldırmak için null
bot_flags? integer İstenen bot bayrakları. Yalnızca bu iki bit okunur; diğer tüm bitler yok sayılır

Görsel PNG, JPEG, GIF veya WebP olmalı ve kod çözüldükten sonra 1 bayt ile 8 MiB arasında olmalıdır. Gönderilmeyen bir avatar, banner veya bio saklanan değeri değiştirmez; yalnızca null onu kaldırır.

Kullanıcı adı değiştiğinde bot, yeni ad için boştaysa ayırt edicisini korur; aksi hâlde boştaki en küçük ayırt ediciyi alır. Boş ayırt edicisi olmayan bir ad 400 döndürür.

Güncelleme botun görünen adını her zaman temizler; böylece bot her zaman kullanıcı adıyla gösterilir.

Yanıt

Durum Gövde Koşul
200 bot profili nesnesi Profil güncellendi
400 hata yanıtı Bir alan, bir görsel veya ayırt edici geçersiz ya da boş ayırt edici yok
403 hata yanıtı Çağıran uygulamanın sahibi değil
404 hata yanıtı Uygulama veya bot hesabı mevcut değil

Hız sınırı

oauth_dev:clients:update kovasında, her uygulama için dakikada 30 istek; Uygulamayı güncelle ile paylaşılır.

Bot token'ını sıfırla

POST /oauth2/applications/{id}/bot/reset-token

Bot token'ını yeniler ve bot token'ı sıfırlama nesnesini döndürür. Çağıran uygulamanın sahibi olmalı ve sudo kipini kanıtlamalıdır.

Yol parametreleri

Alan Tür Açıklama
id snowflake Uygulama kimliği

JSON gövdesi

İsteğe bağlı sudo doğrulama alanları: password, mfa_code veya sudo_proof. Oturum bir sudo yetkisine sahipse boş bir gövde gönderin.

Yanıt

Durum Gövde Koşul
200 bot token'ı sıfırlama nesnesi Token yenilendi
401 hata yanıtı Parola veya kod yanlış
403 hata yanıtı Çağıran uygulamanın sahibi değil veya sudo kipi kanıtlanmadı (SUDO_MODE_REQUIRED)
404 hata yanıtı Uygulama veya bot hesabı mevcut değil

Yenileme botun bağlantısını keser

Önceki token hemen çalışmayı bırakır ve botun sahip olduğu her Gateway oturumu kapatılır. Bot ancak operatörü yeni token'ı kurduktan sonra yeniden bağlanır.

Botun sunucu ve grup DM üyelikleri değişmez.

Hız sınırı

oauth_dev:clients:rotate_secret kovasında, her uygulama için saatte 10 istek; İstemci gizli anahtarını sıfırla ile paylaşılır.

İstemci gizli anahtarını sıfırla

POST /oauth2/applications/{id}/client-secret/reset

OAuth2 istemci gizli anahtarını yeniler ve yeni client_secret değerini içeren uygulama nesnesini döndürür. Çağıran uygulamanın sahibi olmalı ve sudo kipini kanıtlamalıdır.

Yol parametreleri

Alan Tür Açıklama
id snowflake Uygulama kimliği

JSON gövdesi

Bot token'ını sıfırla ile aynı şekilde isteğe bağlı sudo doğrulama alanları.

Yanıt

Durum Gövde Koşul
200 uygulama nesnesi Gizli anahtar yenilendi
401 hata yanıtı Parola veya kod yanlış
403 hata yanıtı Çağıran uygulamanın sahibi değil veya sudo kipi kanıtlanmadı
404 hata yanıtı Uygulama mevcut değil

Token değişimi, token inceleme (introspection) ve iptal işlemleri önceki gizli anahtarı hemen kabul etmeyi bırakır. Mevcut erişim ve yenileme token'ları geçerli kalır.

Hız sınırı

oauth_dev:clients:rotate_secret kovasında, her uygulama için saatte 10 istek; Bot token'ını sıfırla ile paylaşılır.

Uygulamayı sil

DELETE /oauth2/applications/{id}

Bir uygulamayı siler ve bot hesabını emekliye ayırır. 204 döndürür. Çağıran uygulamanın sahibi olmalı ve sudo kipini kanıtlamalıdır.

Yol parametreleri

Alan Tür Açıklama
id snowflake Uygulama kimliği

JSON gövdesi

Bot token'ını sıfırla ile aynı şekilde isteğe bağlı sudo doğrulama alanları.

Yanıt

Durum Gövde Koşul
204 boş Uygulama silindi
401 hata yanıtı Parola veya kod yanlış
403 hata yanıtı Çağıran uygulamanın sahibi değil veya sudo kipi kanıtlanmadı
404 hata yanıtı Uygulama mevcut değil

Silme kalıcıdır

Bot her sunucudan çıkarılır, Gateway oturumları kapatılır ve profili anonimleştirilir (kullanıcı adı silinmis_bot_<id>, görünen ad Silinmiş Bot, avatar, afiş veya biyografi yok). Uygulama, istemci gizli anahtarı ve bot token'ı yok edilir.

Silmeden sonra token, token inceleme ve iptal yolları istemciyi reddeder; Geçerli OAuth2 yetkilendirmesini getir ise uygulamanın erişim token'ları için 401 döndürür. Botun mesajları, anonimleştirilmiş hesaba atfedilmiş olarak kalır.

Hız sınırı

oauth_dev:clients:delete kovasında, her uygulama için saatte 10 istek.