Roller ve izinler¶
İzin, bir üyeye sunucuda mesaj göndermek veya başka bir üyeyi yasaklamak gibi tek bir yetenek verir. Rol, bir izin kümesini işaretsiz 64 bitlik bir maske olarak tutar; bir kanalda saklanan izin geçersiz kılma ise bu kümeyi o kanal için ayarlar.
Bu sayfadaki rol yolları bir kullanıcı oturumu token'ını veya bir bot token'ını kabul eder. Sunucu rollerini listele ayrıca guilds kapsamlı bir OAuth2 erişim token'ını da kabul eder; diğer rol yolları geçerli bir erişim token'ını 403 ACCESS_DENIED ile yanıtlar. Sunucunun üyesi olmayan bir çağıran 403 FORBIDDEN alır. Rolleri değiştiren her yol, rol okunmadan önce kontrol edilen MANAGE_ROLES iznini gerektirir.
İzinler¶
TEBHOS'un tanımladığı her bit aşağıda yer alır.
| Değer | Onluk | Ad | Açıklama |
|---|---|---|---|
1 << 0 |
1 | CREATE_INSTANT_INVITE |
Bir sunucu kanalına davet oluşturma |
1 << 1 |
2 | KICK_MEMBERS |
Bir üyeyi sunucudan çıkarma |
1 << 2 |
4 | BAN_MEMBERS |
Üyeleri yasaklama ve yasaklarını kaldırma |
1 << 3 |
8 | ADMINISTRATOR |
Her izne sahip olma ve her kanal izin geçersiz kılmasını atlama |
1 << 4 |
16 | MANAGE_CHANNELS |
Sunucu kanallarını oluşturma, değiştirme, yeniden sıralama ve silme |
1 << 5 |
32 | MANAGE_GUILD |
Sunucu ayarlarını ve davetler, özel URL ve keşif gibi sunucu düzeyindeki kaynakları değiştirme |
1 << 6 |
64 | ADD_REACTIONS |
Bir mesaja yeni tepki ekleme |
1 << 7 |
128 | VIEW_AUDIT_LOG |
Sunucu denetim kaydını okuma |
1 << 8 |
256 | PRIORITY_SPEAKER |
Ses kanalında öncelikli konuşmacıyı kullanma |
1 << 9 |
512 | STREAM |
Ses kanalında ekranı veya kamerayı paylaşma |
1 << 10 |
1024 | VIEW_CHANNEL |
Bir kanalı görüntüleme ve mesajlarını okuma |
1 << 11 |
2048 | SEND_MESSAGES |
Bir kanala mesaj gönderme |
1 << 12 |
4096 | SEND_TTS_MESSAGES |
Metin okuma (TTS) mesajları gönderme |
1 << 13 |
8192 | MANAGE_MESSAGES |
Diğer üyelerin mesajlarını silme, toplu silme, diğer üyelerin tepkilerini kaldırma |
1 << 14 |
16384 | EMBED_LINKS |
Çağıranın mesajlarındaki bağlantıların gömmelere genişletilmesi |
1 << 15 |
32768 | ATTACH_FILES |
Mesajlara dosya ekleme |
1 << 16 |
65536 | READ_MESSAGE_HISTORY |
Üyenin kanalı görebilmesinden önce gönderilmiş mesajları okuma |
1 << 17 |
131072 | MENTION_EVERYONE |
@everyone ve @here bahislerini kullanma |
1 << 18 |
262144 | USE_EXTERNAL_EMOJIS |
Diğer sunuculardaki emojileri kullanma |
1 << 20 |
1048576 | CONNECT |
Bir ses kanalına bağlanma |
1 << 21 |
2097152 | SPEAK |
Ses kanalında konuşma |
1 << 22 |
4194304 | MUTE_MEMBERS |
Ses kanallarında üyeleri sunucu genelinde susturma |
1 << 23 |
8388608 | DEAFEN_MEMBERS |
Ses kanallarında üyelerin sesini sunucu genelinde kapatma |
1 << 24 |
16777216 | MOVE_MEMBERS |
Üyeleri ses kanalları arasında taşıma veya bağlantılarını kesme |
1 << 25 |
33554432 | USE_VAD |
Bas-konuş yerine ses etkinliği algılamayı kullanma |
1 << 26 |
67108864 | CHANGE_NICKNAME |
Çağıranın kendi takma adını değiştirme |
1 << 27 |
134217728 | MANAGE_NICKNAMES |
Diğer üyelerin takma adlarını değiştirme |
1 << 28 |
268435456 | MANAGE_ROLES |
Rolleri oluşturma, değiştirme, yeniden sıralama ve silme, rol atama ve kanal izin geçersiz kılmalarını ayarlama |
1 << 29 |
536870912 | MANAGE_WEBHOOKS |
Webhook oluşturma, değiştirme ve silme |
1 << 30 |
1073741824 | MANAGE_EXPRESSIONS |
Herkesin oluşturduğu emojileri ve çıkartmaları değiştirme ve silme |
1 << 37 |
137438953472 | USE_EXTERNAL_STICKERS |
Diğer sunuculardaki çıkartmaları kullanma |
1 << 40 |
1099511627776 | MODERATE_MEMBERS |
Üyelere zaman aşımı uygulama |
1 << 43 |
8796093022208 | CREATE_EXPRESSIONS |
Emoji ve çıkartma oluşturma ve çağıranın oluşturduklarını yönetme |
1 << 51 |
2251799813685248 | PIN_MESSAGES |
Mesajları sabitleme ve sabitlemelerini kaldırma |
1 << 52 |
4503599627370496 | BYPASS_SLOWMODE |
Kanalın yavaş modunu beklemeden mesaj gönderme |
1 << 53 |
9007199254740992 | UPDATE_RTC_REGION |
Bir ses kanalının ses bölgesini değiştirme |
1 << 54 |
18014398509481984 | VIEW_CHANNEL_MEMBERS |
Bir kanalın üye listesini Gateway üzerinden görme. Yazmada özellik kapısına tabidir |
19, 31–36, 38, 39, 41, 42, 44–50 ve 55–63 numaralı bitler atanmamıştır. Tanımlı tüm bitlerin birleşimi 33787032395841535 değeridir.
Yeni bir sunucunun @everyone rolü CREATE_INSTANT_INVITE, ADD_REACTIONS, STREAM, VIEW_CHANNEL, SEND_MESSAGES, EMBED_LINKS, ATTACH_FILES, READ_MESSAGE_HISTORY, USE_EXTERNAL_EMOJIS, CONNECT, SPEAK, USE_VAD, CHANGE_NICKNAME, USE_EXTERNAL_STICKERS ve VIEW_CHANNEL_MEMBERS ile başlar; bu 18014536052624961 değerine karşılık gelir.
İzin maskeleri iletimde onluk dizelerdir
Bir yanıttaki her izin alanı, işaretsiz 64 bitlik bir tamsayının JSON dizesi içindeki onluk biçimidir; ör. "permissions": "1099511639046". Bir istek alanı onluk bir dizeyi veya negatif olmayan bir JSON tamsayısını kabul eder. Maskeleri 64 bitlik tamsayı aritmetiğiyle ayrıştırın ve birleştirin (JavaScript'te BigInt); bir JSON double değeri yüksek bitleri tam olarak tutamaz.
TEBHOS tanımlamadığı bitleri atar. Bir rol veya geçersiz kılma yazımı yalnızca tanımlı bitleri tutar ve bir yanıt hiçbir zaman atanmamış bir bit içermez.
const Permissions = {
VIEW_CHANNEL: 1n << 10n,
SEND_MESSAGES: 1n << 11n,
MANAGE_MESSAGES: 1n << 13n,
ADMINISTRATOR: 1n << 3n,
};
function has(mask, flag) {
const bits = BigInt(mask);
return (bits & Permissions.ADMINISTRATOR) !== 0n || (bits & flag) === flag;
}
has("3072", Permissions.SEND_MESSAGES); // true
Özellik kapısına tabi izin bitleri¶
VIEW_CHANNEL_MEMBERS, bir istemci özellik bildirimine bağlıdır. Bu biti anlayan bir istemci, bunu X-Tebhos-Features istek başlığında view_channel_members_permission değerini içeren virgülle ayrılmış bir liste olarak bildirir.
Sunucu rolünü değiştir isteğinde özelliği bildirmeyen bir istek, rolün kayıtlı VIEW_CHANNEL_MEMBERS değerini korur; dolayısıyla bu biti ne ayarlayabilir ne de temizleyebilir. Maskedeki diğer tüm bitler normal şekilde yazılır. Bu, biti onun varlığından haberi olmayan eski istemcilere karşı korur.
İzin hesaplama¶
TEBHOS bir üye için sunucuda ve isteğe bağlı olarak tek bir kanalda tek bir etkin maske hesaplar. Gateway aynı algoritmayı kullanır; böylece REST kontrolleri ile olay teslimi tutarlı olur.
- Sunucu sahibi tanımlı tüm izinleri alır.
- Üye olmayan bir kullanıcı boş bir maske alır.
- Aksi hâlde temel,
@everyonerolünün izinleri ile üyeye atanmış tüm rollerin izinlerinin birleşimidir. - Temel
ADMINISTRATORiçeriyorsa üye tanımlı tüm izinleri alır ve hiçbir geçersiz kılma uygulanmaz. - Bir kanal belirtildiyse, o kanalın kendi izin geçersiz kılmaları şu sırayla uygulanır:
@everyonerolü geçersiz kılması: reddedilen bitleri kaldırılır, ardından izin verilen bitleri eklenir.- Üyenin sahip olduğu tüm rollerin geçersiz kılmaları, izin verilen bitlerin tek bir birleşimi ve reddedilen bitlerin tek bir birleşimi olarak toplanır ve tek adımda uygulanır (önce ret kaldırılır, ardından izin eklenir). Dolayısıyla üyenin bir rolündeki izin, başka bir rolündeki reddi yener.
- Üyenin kendi geçersiz kılması; önce ret, ardından izin.
Bir kanalın sonucu yalnızca o kanalın kendi geçersiz kılmalarına bağlıdır. Bir kategorinin geçersiz kılmaları kontrol anında devralınmaz; kanal kategoride oluşturulduğunda veya kategoriyle eşitlendiğinde kanala kopyalanır.
ADMINISTRATOR her biti verir ve geçersiz kılmaları atlar
Hiçbir ret geçersiz kılması ADMINISTRATOR sahibi bir üyeyi kısıtlamaz. Bu üyeyi kısıtlamanın tek yolu, sahip olduğu tüm rollerden bu biti kaldırmaktır.
Bir kanal, kanal düzeyindeki maskesi VIEW_CHANNEL içerdiğinde üye tarafından görülebilir. Kanal kapsamlı bir istek, kanal mevcut değilse veya çağıranın bulunmadığı bir sunucuya aitse 404, çağıran üye olduğu hâlde VIEW_CHANNEL iznine ya da işlemin gerektirdiği belirli bite sahip değilse 403 döndürür.
Özel kanallar (DM'ler ve grup DM'ler) izin bitleri kullanmaz. Alıcıları, kanalın izin verdiği her şeyi yapabilir.
İletişim zaman aşımı¶
Zaman aşımı (bir sunucu üyesinde gelecekteki bir communication_disabled_until değeri), süresi dolana kadar üyenin sunucuda iletişim kurmasını engeller. Hesaplanan maskeyi değiştirmez: üye rollerinin verdiği tüm izinleri korur ve TEBHOS zaman aşımını ayrıca kontrol eder.
Zaman aşımı etkin olduğu sürece şu işlemler 403 FORBIDDEN ile başarısız olur:
- Mesaj gönderme
- Tepki ekleme
- Ek yükleme isteğinde bulunma
- Yazıyor göstergesini tetikleme
- Üyenin kendi takma adını değiştirme
- Bir ses kanalına katılma
Zaman aşımının özel kanallarda etkisi yoktur. İşlemleri maskeye göre gizleyen bir istemci communication_disabled_until değerini de geçerli zamanla karşılaştırmalıdır, çünkü zaman aşımındaki bir üyenin maskesi hâlâ SEND_MESSAGES içerir. Zaman aşımı uygulamak MODERATE_MEMBERS gerektirir.
Rol hiyerarşisi¶
Roller position değerine göre sıralanır; en yüksek konum ilk sıradadır. Aynı konuma sahip iki rol kimliğe göre sıralanır ve düşük kimlik önce gelir. Bir üyenin sırası, @everyone dışındaki en yüksek rolünün sırasıdır; hiç rolü olmayan bir üye tüm rollerin altında yer alır.
- Çağıran bir rolü yalnızca kendi en yüksek rolü o rolün kesinlikle üstündeyse yönetebilir. Sunucu sahibi tüm rolleri yönetir.
- Çağıran başka bir üye üzerinde (atma, yasaklama, zaman aşımı, takma ad, ses moderasyonu) yalnızca kendi sırası hedefin sırasının kesinlikle üstündeyse işlem yapabilir. Sahip herkes üzerinde işlem yapabilir, sahip üzerinde ise kimse işlem yapamaz.
ADMINISTRATORizin kontrollerini atlar, ancak hiyerarşiyi atlamaz.MANAGE_ROLESiznini yalnızca@everyoneüzerinden alan bir çağıranın sıralı bir rolü yoktur; dolayısıyla hiçbir rolü yönetemez.
MANAGE_ROLES iznine sahip olup hedef rolün üstünde olmayan bir çağıran 403 FORBIDDEN alır.
Sahip olmayan biri kendisinde olmayan bir izni veremez
Sahip olmayan biri bir rolün permissions değerini ayarladığında, istenen maskenin tamamı çağıranın kendi etkin sunucu izinlerinin bir alt kümesi olmalıdır. Aksi hâlde istek 403 FORBIDDEN ile başarısız olur. Çağıranın sahip olmadığı bir biti kaldırmaya izin verilir. Aynı kural kanal geçersiz kılmaları için de geçerlidir: bir geçersiz kılmanın izin verdiği ve reddetmeyi bıraktığı her bit, çağıranın o kanalda sahip olduğu bir bit olmalıdır.
Sunucu rolü nesnesi¶
| Alan | Tür | Açıklama |
|---|---|---|
id |
snowflake | Rol kimliği. @everyone rolü sunucunun kimliğine sahiptir |
name |
string | Rol adı, 1-100 karakter |
color |
integer | 0 ile 16777215 arasında RGB tamsayısı olarak rol rengi; 0 renk yok demektir |
position |
integer | Hiyerarşideki sıra; büyük değer daha yüksek sıradadır. @everyone her zaman 0'dır |
hoist_position |
?integer | Ayrı gösterilen üye listesi grupları arasındaki konum; position değerine göre sıralamak için null |
permissions |
string | Onluk dize olarak izin maskesi |
hoist |
boolean | Rolü taşıyan üyelerin üye listesinde kendi grupları olarak gösterilip gösterilmeyeceği |
mentionable |
boolean | Herhangi bir üyenin rolden bahsedip bahsedemeyeceği |
unicode_emoji |
?string | Rol adının yanında gösterilen bir Unicode emoji |
@everyone rolünün adı @everyone'dır. Her üye için temel izinleri tanımlar. Silinemez, yeniden sıralanamaz veya ona ayrı gösterim konumu verilemez; adı, hoist ve mentionable değerleri değiştirilemez. Rengi ve izinleri değiştirilebilir.
{
"id": "1489002177550843904",
"name": "Moderator",
"color": 3447003,
"position": 4,
"hoist_position": 1,
"permissions": "1099511639046",
"hoist": true,
"mentionable": false,
"unicode_emoji": null
}
İzin geçersiz kılma nesnesi¶
Bir kanal geçersiz kılmalarını permission_overwrites içinde saklar. Bunları ayarlayan ve silen işlemler Kanallar sayfasında belgelenmiştir.
| Alan | Tür | Açıklama |
|---|---|---|
id |
snowflake | Geçersiz kılmanın hedeflediği rol kimliği (tür 0 için) veya kullanıcı kimliği (tür 1 için) |
type |
integer | Rol için 0, üye için 1 |
allow |
string | Geçersiz kılmanın verdiği izin bitleri, onluk dize olarak |
deny |
string | Geçersiz kılmanın kaldırdığı izin bitleri, onluk dize olarak |
Aynı bit tek bir geçersiz kılmada hem izin verilmiş hem reddedilmiş olamaz; böyle bir istek 400 BAD_REQUEST ile başarısız olur. Bitler kanal türüne göre filtrelenmez; bu nedenle bir geçersiz kılma, kanalının kullanmadığı bir izni belirtebilir.
Rol konumu nesnesi¶
| Alan | Tür | Açıklama |
|---|---|---|
id |
snowflake | Rol kimliği |
position? |
integer | İstenen konum; büyük değer daha yüksek sıradadır |
Rol ayrı gösterim konumu nesnesi¶
| Alan | Tür | Açıklama |
|---|---|---|
id |
snowflake | Rol kimliği |
hoist_position |
integer | Role verilecek üye listesi konumu |
Sunucu rollerini listele¶
GET /guilds/{guild_id}/roles
Sunucudaki tüm sunucu rolü nesnelerini azalan position sırasıyla döndürür. Çağıran sunucunun üyesi olmalıdır; herhangi bir izin gerekmez.
guilds kapsamlı bir OAuth2 erişim token'ını da kabul eder; bu kapsamı olmayan bir token 403 MISSING_OAUTH_SCOPE alır.
Hız sınırı: guild:role:list, hesap ve sunucu başına 10 saniyede 60.
curl https://tebhos.com/api/v1/guilds/1489002177550843904/roles \
-H "Authorization: Bot $TEBHOS_BOT_TOKEN"
Sunucu rolü oluştur¶
POST /guilds/{guild_id}/roles
Bir rol oluşturur ve yeni sunucu rolü nesnesini döndürür. MANAGE_ROLES gerektirir. Yeni rol, @everyone rolünün hemen üstünde, 1 konumuna yerleştirilir. Bir sunucuda en fazla 250 rol olabilir; daha fazlasını oluşturmak 400 BAD_REQUEST döndürür.
Hız sınırı: guild:role:create, hesap ve sunucu başına 60 saniyede 10.
| Alan | Tür | Açıklama |
|---|---|---|
name |
string | Baştaki ve sondaki boşluklar kırpıldıktan sonra 1-100 karakterlik rol adı |
color? |
?integer | 0 ile 16777215 arasında renk. Varsayılan 0 |
permissions? |
string veya integer | İzin maskesi. Varsayılan olarak @everyone rolünün izinleri. Verme kuralına tabidir |
Gateway sunucuya GUILD_ROLE_CREATE gönderir.
curl -X POST https://tebhos.com/api/v1/guilds/1489002177550843904/roles \
-H "Authorization: Bot $TEBHOS_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Helpers", "color": 3447003, "permissions": "8192"}'
Sunucu rolünü değiştir¶
PATCH /guilds/{guild_id}/roles/{role_id}
Bir rolü günceller ve güncellenmiş sunucu rolü nesnesini döndürür. MANAGE_ROLES ve rolün üstünde bir sıra gerektirir. Mevcut olmayan bir rol 404 NOT_FOUND döndürür.
Hız sınırı: guild:role:update, hesap ve sunucu başına 10 saniyede 20.
| Alan | Tür | Açıklama |
|---|---|---|
name? |
string | Rol adı, 1-100 karakter |
color? |
integer | 0 ile 16777215 arasında renk |
permissions? |
string veya integer | İzin maskesi. Verme kuralına ve özellik kapısına tabidir |
hoist? |
boolean | Rolün ayrı gösterilip gösterilmeyeceği |
hoist_position? |
?integer | Üye listesi konumu; null temizler |
mentionable? |
boolean | Rolden herkesin bahsedip bahsedemeyeceği |
@everyone için name, hoist, hoist_position ve mentionable yok sayılır. Gateway GUILD_ROLE_UPDATE gönderir.
Sunucu rolü konumlarını değiştir¶
PATCH /guilds/{guild_id}/roles
Rolleri yeniden sıralar. Gövde, rol konumu nesnelerinden oluşan bir JSON dizisidir. MANAGE_ROLES gerektirir. Gövdesiz 204 döndürür.
Hız sınırı: guild:role:positions, hesap ve sunucu başına 10 saniyede 20.
Sahip olmayan biri yalnızca kendi en yüksek rolünün altındaki rolleri taşıyabilir ve bu roller yalnızca kendi aralarında yer değiştirir; çağıranın yönetemediği roller yerinde kalır. Değişiklikten sonra konumlar, @everyone üstündeki roller 1'den rol sayısına kadar gidecek şekilde yeniden numaralandırılır.
| Hata | Neden |
|---|---|
400 BAD_REQUEST |
Bir girdi @everyone rolünü veya sunucuda olmayan bir rolü belirtiyor |
403 FORBIDDEN |
Bir girdi, çağıranın yönetemediği bir rolün konumunu değiştiriyor |
Gateway tüm rollerle birlikte GUILD_ROLE_UPDATE_BULK gönderir.
curl -X PATCH https://tebhos.com/api/v1/guilds/1489002177550843904/roles \
-H "Authorization: Bot $TEBHOS_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '[{"id": "1489002177550843905", "position": 3}, {"id": "1489002177550843906", "position": 2}]'
Rol ayrı gösterim konumlarını değiştir¶
PATCH /guilds/{guild_id}/roles/hoist-positions
Ayrı gösterilen rollerin üye listesindeki sırasını ayarlar. Gövde, rol ayrı gösterim konumu nesnelerinden oluşan bir JSON dizisidir. MANAGE_ROLES gerektirir ve sahip olmayan biri dizideki her rolün üstünde olmalıdır. 204 döndürür.
Hız sınırı: guild:role:hoist_positions, hesap ve sunucu başına 10 saniyede 20.
@everyone rolünü veya bilinmeyen bir rolü belirten bir girdi 400 BAD_REQUEST; çağıranın yönetemediği bir rol ise 403 FORBIDDEN döndürür. Tüm girdiler geçerli olmadıkça hiçbir şey yazılmaz. Gateway GUILD_ROLE_UPDATE_BULK gönderir.
Rol ayrı gösterim konumlarını sıfırla¶
DELETE /guilds/{guild_id}/roles/hoist-positions
Tüm rollerde hoist_position değerini temizler; böylece ayrı gösterilen roller yeniden position değerine göre sıralanır. MANAGE_ROLES gerektirir. 204 döndürür.
Hız sınırı: guild:role:hoist_positions_reset, hesap ve sunucu başına 60 saniyede 10.
Sunucu rolünü sil¶
DELETE /guilds/{guild_id}/roles/{role_id}
Bir rolü siler ve onu taşıyan tüm üyelerden kaldırır. MANAGE_ROLES ve rolün üstünde bir sıra gerektirir. 204 döndürür.
Hız sınırı: guild:role:delete, hesap ve sunucu başına 60 saniyede 10.
Mevcut olmayan bir rol ve @everyone rolü 404 NOT_FOUND döndürür. Silme işlemi denetim kaydına yazılır.
Rol atama¶
Bir üyeye rol eklemek ve kaldırmak için PUT ve DELETE /guilds/{guild_id}/members/{user_id}/roles/{role_id} kullanılır; bunlar Sunucu üyeleri sayfasında belgelenmiştir. Her ikisi de MANAGE_ROLES ve rolün üstünde bir sıra gerektirir.