- Katılım
- 9 Şub 2024
- Mesajlar
- 925
- Tepkime puanı
- 1,765
- Puanları
- 93
jhaeger
Discord Bot Hataları ve Çözümleri
Missing Permissions, Unknown Interaction ve Used disallowed intents hatası nasıl düzelir?
Missing Permissions, Unknown Interaction ve Used disallowed intents hatası nasıl düzelir?
Bot yazarken en sık karşılaşılan üç hatayı, nedenlerini ve kesin çözümlerini tek yerde topladım. Hata mesajını konunun altına yapıştırırsanız birlikte bakarız.
Hata okumanın püf noktası
Discord hataları genelde şu formatta gelir:
Kod:
DiscordAPIError[50013]: Missing Permissions
1) Missing Permissions (50013)
Anlamı: Bot, yapmaya çalıştığı işlem için gereken yetkiye sahip değil.
En sık nedenleri:
- Rol sıralaması: Botun rolü, işlem yapacağı kişinin veya rolün altında. Rol verme, kick, ban ve takma ad değiştirmede bu şarttır.
- Botta ilgili yetki yok (Rolleri Yönet, Üyeleri At, Üyeleri Yasakla, Mesaj Gönder, Bağlantı Yerleştir vb.)
- Kanal izni: Sunucuda yetki var ama o kanalın izinlerinde bot veya rolü engellenmiş.
- Sunucu sahibine veya botun üstündeki yöneticilere işlem yapılmaya çalışılıyor. Sunucu sahibi üzerinde hiçbir bot işlem yapamaz.
Çözüm:
- Sunucu Ayarları > Roller bölümünde botun rolünü, yönettiği rollerin üstüne sürükleyin.
- Botun rolünde gerekli yetkilerin açık olduğunu kontrol edin.
- Sorunlu kanalda Kanalı Düzenle > İzinler bölümüne bakıp botun engellenmediğinden emin olun.
Kodda önceden kontrol edin (hata almadan uyarı verin):
JavaScript:
const { PermissionFlagsBits } = require('discord.js');
// Botun sunucu yetkisi var mı?
const me = interaction.guild.members.me;
if (!me.permissions.has(PermissionFlagsBits.BanMembers)) {
return interaction.reply({ content: 'Benim "Üyeleri Yasakla" yetkim yok.', ephemeral: true });
}
// Hedef üyeyi banlayabilir miyim? (rol sıralaması dahil kontrol eder)
if (!member.bannable) {
return interaction.reply({ content: 'Bu kullanıcıyı banlayamıyorum (rolü benden yüksek olabilir).', ephemeral: true });
}
// Rol verilebilir mi?
if (!role.editable) {
return interaction.reply({ content: 'Bu rolü veremem, rolüm bu rolün altında.', ephemeral: true });
}
// Kanalda mesaj atma yetkim var mı?
const perms = channel.permissionsFor(me);
if (!perms.has(PermissionFlagsBits.SendMessages)) return;
member.kickable ve member.manageable da kullanılabilir.Benzer hata:
Missing Access (50001) hatası, botun kanalı göremediği anlamına gelir. Kanalda botun "Kanalı Görüntüle" yetkisi olmalı.2) Unknown Interaction (10062)
Anlamı: Slash komutu, buton veya menüye 3 saniye içinde cevap verilmedi ya da etkileşim artık geçersiz.
En sık nedenleri:
- Komut içinde veritabanı, API isteği gibi uzun süren işlem yapılıp cevap geciktirilmiş
- Bot iki kez açık. Bir örnek cevap verir, diğeri geç kalıp bu hatayı alır. Bilgisayarda ve sunucuda aynı anda çalışıyor olabilir, PM2'de iki kopya olabilir.
- Aynı etkileşime iki kez
replyatılmış (Interaction has already been acknowledgedhatası ile birlikte gelir) - Etkileşimin üzerinden 15 dakikadan fazla geçmiş (follow-up süresi dolmuş)
Çözüm: Uzun sürecek işlerde önce
deferReply() ile Discord'a "bekle" deyin, işi bitirince editReply() ile cevap verin.
JavaScript:
const { Events, MessageFlags } = require('discord.js');
client.on(Events.InteractionCreate, async (interaction) => {
if (!interaction.isChatInputCommand()) return;
try {
await interaction.deferReply(); // 3 saniye süresi uzar
const sonuc = await uzunSurenIs(); // veritabanı, API vb.
await interaction.editReply(`Sonuç: ${sonuc}`);
} catch (err) {
console.error(err);
const mesaj = { content: 'Bir hata oluştu.', flags: MessageFlags.Ephemeral };
if (interaction.deferred || interaction.replied) {
await interaction.followUp(mesaj).catch(() => {});
} else {
await interaction.reply(mesaj).catch(() => {});
}
}
});
Kontrol listesi:
- Aynı bot tokeniyle başka bir yerde (PC, ikinci hosting, eski VPS) çalışan kopya var mı? Hepsini kapatıp tek örnek bırakın.
- Her komutta tek bir
replyveyadeferReplykullanıldığından emin olun. Sonraki mesajlar içinfollowUpveyaeditReplykullanın. - Etkileşim olayını (
InteractionCreate) kodda yanlışlıkla iki kez dinlemediğinizi kontrol edin.
3) Used disallowed intents (DisallowedIntents)
Anlamı: Kodda "ayrıcalıklı" (privileged) bir intent istediniz ama Developer Portal'da açmadınız. Konsolda genelde şu çıkar:
Kod:
Error [DisallowedIntents]: Privileged intent provided is not enabled or whitelisted.
Ayrıcalıklı intent'ler:
GuildMembers: Server Members Intent (üye giriş/çıkış, üye listesi)GuildPresences: Presence Intent (çevrimiçi durumu)MessageContent: Message Content Intent (mesaj içeriğini okuma)
Çözüm:
- discord.com/developers/applications adresinden botunuzu seçin
- Sol menüden Bot sekmesine gidin
- "Privileged Gateway Intents" bölümünde kodda kullandığınız intent'lerin anahtarını açın
- Değişiklikleri kaydedip botu yeniden başlatın
Önemli: Bot 100 sunucuya ulaşınca bu intent'leri kullanmaya devam etmek için Discord'dan bot doğrulaması ve intent onayı almanız gerekir. Bunu önceden planlayın.
Benzer hata:
Invalid intent (4013) hatası, intent sayısının veya değerinin geçersiz verilmesi demektir. GatewayIntentBits kullandığınızdan ve yazım hatası olmadığından emin olun.Bonus: Diğer sık görülen hatalar
- An invalid token was provided: Token yanlış, boşluklu veya Reset Token ile değişmiş. Token rehberine bakın.
- Cannot send messages to this user (50007): Kullanıcının DM'leri kapalı.
.catch(() => {})ile yakalayıp kanala bilgi mesajı atın. - Unknown Message (10008) / Unknown Channel (10003): Mesaj veya kanal silinmiş. İşlemden önce var olup olmadığını kontrol edin.
- Invalid Form Body (50035): Embed alanı 1024 karakteri aşıyor, başlık boş veya bir alan eksik. Metinleri
.slice(0, 1000)ile kısaltın. - Cannot send an empty message (50006): Mesajın içeriği ve embed'i boş. Gönderilecek değişkeni kontrol edin.
Botun çökmesini engelleyin
Yakalanmayan tek bir hata botu komple kapatabilir. Dosyanın en üstüne şu satırları ekleyin, hatalar loglansın ama bot ayakta kalsın:
JavaScript:
process.on('unhandledRejection', (err) => console.error('Yakalanmayan hata:', err));
process.on('uncaughtException', (err) => console.error('Beklenmeyen hata:', err));
Hata ayıklarken işe yarayanlar
- Hatanın tamamını okuyun, çoğu zaman çözüm mesajın içinde yazıyor
console.log(error.code, error.message)ile kodu ve mesajı ayrı yazdırın- Sorunu küçük bir komuta indirip tek başına deneyin
- discord.js'i güncelleyin:
npm i discord.js@latest(yedek almayı unutmayın) - Forumda yardım isterken token'ı silip hata mesajını ve ilgili kodu paylaşın
Başka bir hata mı aldınız? Hata mesajını ve kodunuzu konunun altına yazın, birlikte çözelim.




