Ana içeriğe geç

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
VIEW_CHANNEL = 1 << 10
SEND_MESSAGES = 1 << 11
ADMINISTRATOR = 1 << 3

def has(mask: str, flag: int) -> bool:
    bits = int(mask)
    return bool(bits & ADMINISTRATOR) or (bits & flag) == flag

has("3072", 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.

  1. Sunucu sahibi tanımlı tüm izinleri alır.
  2. Üye olmayan bir kullanıcı boş bir maske alır.
  3. Aksi hâlde temel, @everyone rolünün izinleri ile üyeye atanmış tüm rollerin izinlerinin birleşimidir.
  4. Temel ADMINISTRATOR içeriyorsa üye tanımlı tüm izinleri alır ve hiçbir geçersiz kılma uygulanmaz.
  5. Bir kanal belirtildiyse, o kanalın kendi izin geçersiz kılmaları şu sırayla uygulanır:
    1. @everyone rolü geçersiz kılması: reddedilen bitleri kaldırılır, ardından izin verilen bitleri eklenir.
    2. Ü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.
    3. Ü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.
  • ADMINISTRATOR izin kontrollerini atlar, ancak hiyerarşiyi atlamaz.
  • MANAGE_ROLES iznini 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.

{
  "id": "1489002177550843904",
  "type": 0,
  "allow": "0",
  "deny": "2048"
}

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.