Discord.JS silme komutundaki hata nedir?

Katılım
15 Aralık 2023
Mesajlar
2.756
Makaleler
3
Çözümler
27
Beğeniler
2.652
Yer
Avcılar/İstanbul
Arkadaşlar, bot otomatik olarak sonuç belirten mesajları da siliyor ve "DiscordAPIError[40060]: Interaction has already been acknowledged." hatası alıyorum. Nasıl çözerim?

JavaScript:
const { SlashCommandBuilder } = require('@discordjs/builders');
const { PermissionsBitField, EmbedBuilder, Colors } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
    .setName('sil')
    .setDescription('Belirtilen sayı kadar mesajı siler. (1-99)')
    .addIntegerOption(option =>
    option.setName('sayı')
    .setDescription('Silinecek mesaj sayısı (1-99)')
    .setRequired(true)
    .setMinValue(1)
    .setMaxValue(99)
    ),

    async execute(interaction) {
        const count = interaction.options.getInteger('sayı');

        // Yetki kontrolü
        if (!interaction.member.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({
                content: '❌ Bu komutu kullanmak için `Mesajları Yönet` yetkisine sahip olmalısınız.',
                ephemeral: true
            });
        }

        // Botun yetkisi kontrolü
        if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({
                content: '❌ Mesajları silmek için yeterli yetkim yok. Lütfen `Mesajları Yönet` yetkisini verin.',
                ephemeral: true
            });
        }

        try {
            const deleted = await interaction.channel.bulkDelete(count, true); // true = eski mesajları atla

            // Silinen mesaj sayısı 0 ise
            if (deleted.size === 0) {
                return interaction.reply({
                    content: '⚠️ Hiçbir mesaj silinemedi. Mesajlar 14 günden eski olabilir.',
                    ephemeral: true
                });
            }

            const embed = new EmbedBuilder()
            .setColor(Colors.Green)
            .setTitle('🧹 Mesajlar Silindi')
            .setDescription(`Toplamda **${deleted.size}** mesaj başarıyla silindi.`)
            .addFields(
                { name: '🕒 Silinme Zamanı', value: new Date().toLocaleString(), inline: true },
                       { name: '👤 İşlemi Yapan', value: interaction.user.tag, inline: true }
            )
            .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
            .setFooter({ text: 'Silme İşlemi', iconURL: interaction.client.user.displayAvatarURL() })
            .setTimestamp();

            await interaction.reply({
                content: `✅ ${deleted.size} mesaj başarıyla silindi.`,
                embeds: [embed]
            });

        } catch (error) {
            console.error('Silme hatası:', error);

            return interaction.reply({
                content: '❌ Mesajlar silinirken bir hata oluştu.',
                ephemeral: true
            });
        }
    }
};
 
Etkileşime iki kez yanıt vermeye çalışıyorsunuz. Discord'da 1 sefere izin veriyor. Devamındaki yanıtlar vb. için followUp() veya editReply() kullanmanız gerek.
JavaScript:
const { SlashCommandBuilder } = require('@discordjs/builders');
const { PermissionsBitField, EmbedBuilder, Colors } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
    .setName('sil')
    .setDescription('Belirtilen sayı kadar mesajı siler. (1-99)')
    .addIntegerOption(option =>
    option.setName('sayı')
    .setDescription('Silinecek mesaj sayısı (1-99)')
    .setRequired(true)
    .setMinValue(1)
    .setMaxValue(99)
    ),

    async execute(interaction) {
        const count = interaction.options.getInteger('sayı');

        if (!interaction.member.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({
                content: '❌ Bu komutu kullanmak için `Mesajları Yönet` yetkisine sahip olmalısınız.',
                ephemeral: true
            });
        }

        if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({
                content: '❌ Mesajları silmek için yeterli yetkim yok. Lütfen `Mesajları Yönet` yetkisini verin.',
                ephemeral: true
            });
        }

        try {
            await interaction.deferReply();
            
            const deleted = await interaction.channel.bulkDelete(count, true);

            if (deleted.size === 0) {
                return interaction.editReply({
                    content: '⚠️ Hiçbir mesaj silinemedi. Mesajlar 14 günden eski olabilir.',
                });
            }

            const embed = new EmbedBuilder()
            .setColor(Colors.Green)
            .setTitle('🧹 Mesajlar Silindi')
            .setDescription(`Toplamda **${deleted.size}** mesaj başarıyla silindi.`)
            .addFields(
                { name: '🕒 Silinme Zamanı', value: new Date().toLocaleString(), inline: true },
                { name: '👤 İşlemi Yapan', value: interaction.user.tag, inline: true }
            )
            .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
            .setFooter({ text: 'Silme İşlemi', iconURL: interaction.client.user.displayAvatarURL() })
            .setTimestamp();

            await interaction.editReply({
                content: `✅ ${deleted.size} mesaj başarıyla silindi.`,
                embeds: [embed]
            });

        } catch (error) {
            console.error('Silme hatası:', error);

            if (interaction.deferred) {
                return interaction.editReply({
                    content: '❌ Mesajlar silinirken bir hata oluştu.',
                });
            } else {
                return interaction.reply({
                    content: '❌ Mesajlar silinirken bir hata oluştu.',
                    ephemeral: true
                });
            }
        }
    }
};
 
Tek bir ''interaction.reply()'' kullan. 2 kez yanıt vermeye çalıştığından dolayı kaynaklanıyor. Sadece bir kez yanıt verirsen sorunun çözülür.
 
Tek bir ''interaction.reply()'' kullan. 2 kez yanıt vermeye çalıştığından dolayı kaynaklanıyor. Sadece bir kez yanıt verirsen sorunun çözülür.

Sağ olun hocam sorunu böyle çözdüm ancak bu sefer de başka hata veriyor


Hocam bu sefer de unknown message hatası veriyor, sanırsam sonucu siliyor yine.
 
Test eder misiniz?

JavaScript:
const { SlashCommandBuilder } = require('@discordjs/builders');
const { PermissionsBitField, EmbedBuilder, Colors } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
    .setName('sil')
    .setDescription('Belirtilen sayı kadar mesajı siler. (1-99)')
    .addIntegerOption(option =>
        option.setName('sayı')
        .setDescription('Silinecek mesaj sayısı (1-99)')
        .setRequired(true)
        .setMinValue(1)
        .setMaxValue(99)
    ),

    async execute(interaction) {
        const count = interaction.options.getInteger('sayı');

        if (!interaction.member.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({
                content: '❌ Bu komutu kullanmak için `Mesajları Yönet` yetkisine sahip olmalısınız.',
                ephemeral: true
            });
        }

        if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({
                content: '❌ Mesajları silmek için yeterli yetkim yok. Lütfen `Mesajları Yönet` yetkisini verin.',
                ephemeral: true
            });
        }

        try {
            // Önce mesajları silelim
            const messages = await interaction.channel.messages.fetch({ limit: count });
            const deleted = await interaction.channel.bulkDelete(messages, true);

            if (deleted.size === 0) {
                return interaction.reply({
                    content: '⚠️ Hiçbir mesaj silinemedi. Mesajlar 14 günden eski olabilir.',
                    ephemeral: true
                });
            }

            const embed = new EmbedBuilder()
                .setColor(Colors.Green)
                .setTitle('🧹 Mesajlar Silindi')
                .setDescription(`Toplamda **${deleted.size}** mesaj başarıyla silindi.`)
                .addFields(
                    { name: '🕒 Silinme Zamanı', value: new Date().toLocaleString(), inline: true },
                    { name: '👤 İşlemi Yapan', value: interaction.user.tag, inline: true }
                )
                .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
                .setFooter({ text: 'Silme İşlemi', iconURL: interaction.client.user.displayAvatarURL() })
                .setTimestamp();

            // Son olarak sonucu ephemeral olarak gönderelim
            return interaction.reply({
                embeds: [embed],
                ephemeral: true
            });

        } catch (error) {
            console.error('Silme hatası:', error);
            return interaction.reply({
                content: '❌ Mesajlar silinirken bir hata oluştu.',
                ephemeral: true
            });
        }
    }
};
 
Bu sefer de unknown interaction hatası alıyorum hocam. Mesaj yine gelmiyor.
 
Bu sefer de unknown interaction hatası alıyorum hocam. Mesaj yine gelmiyor.
2 farklı kod var test eder misiniz? Tam olarak anlayamadım hatayı.

Kod:
const { SlashCommandBuilder } = require('@discordjs/builders');
const { PermissionsBitField, EmbedBuilder } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('sil')
        .setDescription('Belirtilen sayı kadar mesajı siler. (1-99)')
        .addIntegerOption(option =>
            option.setName('sayı')
                .setDescription('Silinecek mesaj sayısı (1-99)')
                .setRequired(true)
                .setMinValue(1)
                .setMaxValue(99)
        ),

    async execute(interaction) {
        const count = interaction.options.getInteger('sayı');

        if (!interaction.member.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({
                content: '❌ Bu komutu kullanmak için `Mesajları Yönet` yetkisine sahip olmalısınız.',
                ephemeral: true
            });
        }

        if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({
                content: '❌ Mesajları silmek için yeterli yetkim yok.',
                ephemeral: true
            });
        }

        try {
            const deleted = await interaction.channel.bulkDelete(count, true);

            if (deleted.size === 0) {
                return interaction.reply({
                    content: '⚠️ Hiçbir mesaj silinemedi. 14 günden eski olabilirler.',
                    ephemeral: true
                });
            }

            const embed = new EmbedBuilder()
                .setColor('Green')
                .setTitle('🧹 Mesajlar Silindi')
                .setDescription(`Toplam **${deleted.size}** mesaj silindi.`)
                .addFields(
                    { name: '🕒 Zaman', value: new Date().toLocaleString(), inline: true },
                    { name: '👤 Yapan', value: interaction.user.tag, inline: true }
                )
                .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
                .setFooter({ text: 'Silme İşlemi', iconURL: interaction.client.user.displayAvatarURL() })
                .setTimestamp();

            return interaction.reply({ embeds: [embed], ephemeral: true });

        } catch (error) {
            console.error('Silme hatası:', error);
            return interaction.reply({
                content: '❌ Mesajlar silinirken bir hata oluştu.',
                ephemeral: true
            });
        }
    }
};


Kod:
const { SlashCommandBuilder } = require('@discordjs/builders');
const { PermissionsBitField, EmbedBuilder, Colors } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
    .setName('sil')
    .setDescription('Belirtilen sayı kadar mesajı siler. (1-99)')
    .addIntegerOption(option =>
        option.setName('sayı')
        .setDescription('Silinecek mesaj sayısı (1-99)')
        .setRequired(true)
        .setMinValue(1)
        .setMaxValue(99)
    ),

    async execute(interaction) {
        const count = interaction.options.getInteger('sayı');

        if (!interaction.member.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({
                content: '❌ Bu komutu kullanmak için `Mesajları Yönet` yetkisine sahip olmalısınız.',
                ephemeral: true
            });
        }

        if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({
                content: '❌ Mesajları silmek için yeterli yetkim yok. Lütfen `Mesajları Yönet` yetkisini verin.',
                ephemeral: true
            });
        }

        try {
            // interaction'ı defer edelim
            await interaction.deferReply({ ephemeral: true });

            // Mesajları silelim
            const messages = await interaction.channel.messages.fetch({ limit: count });
            const deleted = await interaction.channel.bulkDelete(messages, true);

            if (deleted.size === 0) {
                return interaction.editReply({
                    content: '⚠️ Hiçbir mesaj silinemedi. Mesajlar 14 günden eski olabilir.'
                });
            }

            const embed = new EmbedBuilder()
                .setColor(Colors.Green)
                .setTitle('🧹 Mesajlar Silindi')
                .setDescription(`Toplamda **${deleted.size}** mesaj başarıyla silindi.`)
                .addFields(
                    { name: '🕒 Silinme Zamanı', value: new Date().toLocaleString(), inline: true },
                    { name: '👤 İşlemi Yapan', value: interaction.user.tag, inline: true }
                )
                .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
                .setFooter({ text: 'Silme İşlemi', iconURL: interaction.client.user.displayAvatarURL() })
                .setTimestamp();

            return interaction.editReply({
                embeds: [embed]
            });

        } catch (error) {
            console.error('Silme hatası:', error);
            
            return interaction.editReply({
                content: '❌ Mesajlar silinirken bir hata oluştu.'
            });
        }
    }
};
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…