İzinler
İzinler bir bit alanıdır. Her iznin bir biti vardır ve API değeri ondalık metin olarak taşır: "68672". Metin yerine sayı göndermek veya tanımlı olmayan bir bit kullanmak 400 invalid_body verir.
Değeri hesaplamak
Portaldaki Ekleme bağlantısı bölümünde izinleri seçtiğinde değer senin için hesaplanır ve bağlantıdaki izin olur.
Kendin hesaplamak istersen izinlerin değerlerini topla (veya bitlerini OR ile birleştir). Bazı izinler 32 bitin üstünde olduğu için JavaScript'te BigInt kullan:
const VIEW_CHANNEL = 1n << 10n;
const SEND_MESSAGES = 1n << 11n;
const value = VIEW_CHANNEL | SEND_MESSAGES;
console.log(value.toString()); // "3072"
Başlangıç rehberindeki 68608 şu toplamdır: ViewChannel (1024) + SendMessages (2048) + ReadMessageHistory (65536). Ses kanalına girip yayın yapan bir bot için 3146752 (ViewChannel + Connect + Speak) gerekir; ayrıntılar Ses sayfasında.
Ekleme bağlantısı bölümü Tepki ekle (AddReactions, 64) ve @herkes ve rolleri etiketle (MentionEveryone, 131072) izinlerini de sunar; bot bunları diğer izinler gibi isteyebilir.
İzin listesi
| Bit | Değer | Ad | Anlamı |
|---|---|---|---|
| 0 | 1 | CreateInstantInvite | Davet oluşturma |
| 1 | 2 | KickMembers | Üyeyi sunucudan çıkarma |
| 2 | 4 | BanMembers | Üye yasaklama |
| 3 | 8 | Administrator | Tüm izinler; kanal ayarlarından etkilenmez |
| 4 | 16 | ManageChannels | Kanal yönetme |
| 5 | 32 | ManageGuild | Sunucu yönetme, bot ekleme |
| 6 | 64 | AddReactions | Mesaja yeni emoji ile tepki verme |
| 7 | 128 | ViewAuditLog | Denetim kaydını görme |
| 8 | 256 | PrioritySpeaker | Öncelikli konuşmacı |
| 9 | 512 | Stream | Yayın açma |
| 10 | 1024 | ViewChannel | Kanalı görme |
| 11 | 2048 | SendMessages | Mesaj gönderme |
| 12 | 4096 | SendTTSMessages | Sesli okunan mesaj gönderme |
| 13 | 8192 | ManageMessages | Başkalarının mesajlarını silme, sabitleme, tepki temizleme |
| 14 | 16384 | EmbedLinks | Bağlantı önizlemesi; botun embed'i için gerekmez, SendMessages yeter |
| 15 | 32768 | AttachFiles | Dosya gönderme |
| 16 | 65536 | ReadMessageHistory | Geçmiş mesajları okuma |
| 17 | 131072 | MentionEveryone | Herkesi ve her rolü etiketleme |
| 18 | 262144 | UseExternalEmojis | Başka sunucuların emojilerini kullanma |
| 19 | 524288 | ViewGuildInsights | Sunucu istatistiklerini görme |
| 20 | 1048576 | Connect | Ses kanalına bağlanma |
| 21 | 2097152 | Speak | Seste konuşma |
| 22 | 4194304 | MuteMembers | Üyeyi sunucuda susturma |
| 23 | 8388608 | DeafenMembers | Üyenin sesini kapatma |
| 24 | 16777216 | MoveMembers | Üyeyi ses kanalları arasında taşıma |
| 25 | 33554432 | UseVAD | Ses algılamayla konuşma |
| 26 | 67108864 | ChangeNickname | Kendi takma adını değiştirme |
| 27 | 134217728 | ManageNicknames | Başkalarının takma adını değiştirme |
| 28 | 268435456 | ManageRoles | Rol yönetme ve verme |
| 29 | 536870912 | ManageWebhooks | Webhook yönetme |
| 30 | 1073741824 | ManageGuildExpressions | Emoji, çıkartma ve ses yönetme |
| 31 | 2147483648 | UseApplicationCommands | Uygulama komutlarını kullanma; kanalda yoksa kişi orada hiçbir komutu görmez ve çalıştıramaz, bkz. Komut izinleri |
| 32 | 4294967296 | RequestToSpeak | Konuşma isteme |
| 33 | 8589934592 | ManageEvents | Etkinlik yönetme |
| 34 | 17179869184 | ManageThreads | Alt başlık yönetme |
| 35 | 34359738368 | CreatePublicThreads | Herkese açık alt başlık oluşturma |
| 36 | 68719476736 | CreatePrivateThreads | Özel alt başlık oluşturma |
| 37 | 137438953472 | UseExternalStickers | Başka sunucuların çıkartmalarını kullanma |
| 38 | 274877906944 | SendMessagesInThreads | Alt başlıklarda mesaj gönderme |
| 39 | 549755813888 | UseEmbeddedActivities | Gömülü etkinlikleri kullanma |
| 40 | 1099511627776 | ModerateMembers | Üyeyi zamanlı susturma |
Bu aşamadaki bot rotalarının kullandığı izinler, REST referansında her rotanın altında yazar. Listedeki bazı izinlerin bu aşamada bota açık bir rotası yoktur.
Bir üyenin izinleri nasıl hesaplanır
Bot da diğer üyeler gibi hesaplanır.
Sunucu düzeyinde:
- Sunucunun sahibi tüm izinlere sahiptir.
- Diğer üyeler için
@everyonerolünün izinleri ile üyenin tüm rollerinin izinleri birleştirilir. - Sonuçta
Administratorvarsa üye tüm izinlere sahiptir.
@everyone rolünün ID'si sunucunun ID'siyle aynıdır. Üyenin roles listesinde yer almaz, ama izinleri her zaman sayılır.
Bir rolün ID'sini sunucu ayarlarında Roller sekmesinden rolü açıp Kopyala ile alırsın (Android ve iOS'ta Rol ID'sini kopyala). Bir bot aynı kimlikleri GET /guilds/{id}/roles ile de listeleyebilir.
Kanalda. Administrator olanlar kanal ayarlarından etkilenmez. Diğerleri için kanalın izin geçersiz kılmaları (permission_overwrites) şu sırayla uygulanır; her adımda önce deny bitleri çıkarılır, sonra allow bitleri eklenir:
@everyoneiçin olan geçersiz kılma- Üyenin rolleri için olanlar, birleştirilerek
- Üyenin kendisi için olan
Bağımlı izinler. Kanalda ViewChannel yoksa hiçbir izin kalmaz. SendMessages yoksa SendTTSMessages, MentionEveryone, AttachFiles ve EmbedLinks de geçersiz olur. Connect yoksa Speak, Stream, MuteMembers, DeafenMembers, MoveMembers, UseVAD, PrioritySpeaker ve RequestToSpeak de geçersiz olur.
Susturma. Zamanlı susturma sürerken üyede yalnızca ViewChannel ve ReadMessageHistory kalır. Bu, susturulan bot için de geçerlidir. Sahip ve yöneticiler susturulamaz.
Bir izin geçersiz kılmasının türü (type) rol için 0, üye için 1'dir.
Rol sıralaması
Her rolün bir position değeri vardır, büyük olan daha üsttedir. Üyenin rütbesi, en yüksek rolünün konumudur. Sunucu sahibi herkesten üsttedir.
- Bir üyeyi çıkarmak, yasaklamak, susturmak veya takma adını değiştirmek için rütben hedefin rütbesinden büyük olmalıdır. Eşitlik yetmez; aksi halde
403 role_hierarchydöner. - Bir rolü düzenlemek, silmek, vermek veya almak için rütben o rolün konumundan büyük olmalıdır.
- Rolün
positiondeğerini kendi rütbenden küçük bir değere ayarlayabilirsin; en küçük değer 1'dir. - Sahip olmadığın bir izni kimseye veremezsin (
403 missing_permissions). Kanal geçersiz kılmaları için de aynısı geçerlidir.
Botun için bunun anlamı: Bot sunucuya eklenince rolü doğrudan @everyone'ın üstüne konur. Bu haliyle yalnızca rolü olmayan üyeler üzerinde işlem yapabilir. Moderasyon yapacak botun rolünü, bir sunucu yöneticisi Sunucu ayarları içindeki Roller listesinde sürükleyerek işlem yapacağı rollerin üstüne taşımalıdır.
Bot kendi rolünü değiştiremez, çünkü rütbesi o rolün konumundan büyük değildir; daha yüksek bir rol verilmişse değiştirebilir.
Sık görülen durumlar
| Bot şunu alıyor | Muhtemel neden |
|---|---|
| Kanalı okurken boş liste | ReadMessageHistory yok. Liste rotaları bu durumda hata vermez. |
403 missing_access | Kanalda ViewChannel yok. |
403 missing_permissions | Gereken izin yok ya da bot susturulmuş. |
403 role_hierarchy | Hedefin rolü botun rolünden aşağıda değil. |
404 unknown_guild | Bot o sunucunun üyesi değil. |
Bu sayfayı yapay zekaya verirsen
Sırada ne var
- Komut izinleri: komutların hangi rol ve kanalda çalışacağını yönetmek
- Uygulamalar ve botlar:
/bot-eklebağlantısı ve yönetilen bot rolü - Sık hatalar:
missing_access,missing_permissionsverole_hierarchyfarkı