if I click "publish" in the moderator channel, I will receive an interaction error and the message will not be displayed in the desired channel.

const { Client, GatewayIntentBits, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle } = require('discord.js');
require('dotenv').config();

const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent] });

// Переменные для отслеживания данных
const PUBLISH_CHANNELS = { announcements: '1307800328950775838', trade: '1307800588049846302', memes: '1307800301205455071' }; // IDs каналов
let userChoices = {}; // Сохраняет данные пользователя
let modQueueChannel = '1307800868820881449'; // ID канала модерации

client.on('ready', () => {
    console.log(Logged in as ${client.user.tag}!);
});

client.on('messageCreate', async (message) => {
    if (message.channel.name === 'размещение-объявлений' && message.content === '!annon_start') {
        const embed = new EmbedBuilder()
            .setTitle('Публикация объявлений')
            .setDescription('Выберите категорию:')
            .setColor(0x00AE86);

        const buttons = new ActionRowBuilder().addComponents(
            new ButtonBuilder().setCustomId('announcements').setLabel('📢 Объявления').setStyle(ButtonStyle.Primary),
            new ButtonBuilder().setCustomId('trade').setLabel('🛒 Торговля').setStyle(ButtonStyle.Primary),
            new ButtonBuilder().setCustomId('memes').setLabel('💩 Мемы').setStyle(ButtonStyle.Primary),
        );

        await message.channel.send({ embeds: [embed], components: [buttons] });
    }
});

client.on('interactionCreate', async (interaction) => {
    if (interaction.isButton()) {
        const category = interaction.customId;

        if (['announcements', 'trade', 'memes'].includes(category)) {
            userChoices[interaction.user.id] = { category };

            const rulesEmbed = new EmbedBuilder()
                .setTitle(Правила публикации объявлений для ${category === 'announcements' ? 'Объявлений' : category === 'trade' ? 'Торговли' : 'Мемов'})
                .setDescription('**Правила:**\n1. Правило 1\n2. Правило 2\n3. Правило 3')
                .setColor(0xFFA500);

            const agreeButton = new ActionRowBuilder().addComponents(
                new ButtonBuilder().setCustomId('agree').setLabel('Согласиться').setStyle(ButtonStyle.Success)
            );

            await interaction.reply({ embeds: [rulesEmbed], components: [agreeButton], ephemeral: true });
        } else if (interaction.customId === 'agree') {
            const modal = new ModalBuilder()
                .setCustomId('announcementModal')
                .setTitle('Создание объявления');

            const titleInput = new TextInputBuilder()
                .setCustomId('title')
                .setLabel('Заголовок')
                .setStyle(TextInputStyle.Short)
                .setRequired(true);

            const contentInput = new TextInputBuilder()
                .setCustomId('content')
                .setLabel('Основной текст')
                .setStyle(TextInputStyle.Paragraph)
                .setRequired(true);

            const imageInput = new TextInputBuilder()
                .setCustomId('image')
                .setLabel('Ссылка на изображение (опционально)')
                .setStyle(TextInputStyle.Short)
                .setRequired(false);

            const firstRow = new ActionRowBuilder().addComponents(titleInput);
            const secondRow = new ActionRowBuilder().addComponents(contentInput);
            const thirdRow = new ActionRowBuilder().addComponents(imageInput);

            modal.addComponents(firstRow, secondRow, thirdRow);

            // Показ модального окна пользователю
            await interaction.showModal(modal);
        } else if (interaction.customId === 'publish') {
            const userId = interaction.user.id;
            if (!userChoices[userId]) {
                await interaction.reply({ content: 'Произошла ошибка: данные отсутствуют.', ephemeral: true });
                return;
            }

            const moderationEmbed = new EmbedBuilder()
                .setAuthor({ name: interaction.user.username, iconURL: interaction.user.displayAvatarURL() })
                .setTitle(userChoices[userId].title)
                .setDescription(userChoices[userId].content)
                .setFooter({ text: Категория: ${userChoices[userId].category} })
                .setColor(0xE74C3C);

            if (userChoices[userId].image) moderationEmbed.setImage(userChoices[userId].image);

            const modButtons = new ActionRowBuilder().addComponents(
                new ButtonBuilder().setCustomId(approve_${userId}).setLabel('Отправить').setStyle(ButtonStyle.Success),
                new ButtonBuilder().setCustomId(reject_${userId}).setLabel('Отклонить').setStyle(ButtonStyle.Danger),
            );

            const modChannel = client.channels.cache.get(modQueueChannel);
            if (!modChannel) {
                await interaction.reply({ content: 'Канал модерации не найден.', ephemeral: true });
                return;
            }

            await modChannel.send({ embeds: [moderationEmbed], components: [modButtons] });
            await interaction.reply({ content: 'Ваше объявление отправлено на модерацию!', ephemeral: true });
        } else if (interaction.customId === 'edit') {
            // Добавьте логику для редактирования объявления здесь
        }
    } else if (interaction.isModalSubmit()) {
        const title = interaction.fields.getTextInputValue('title');
        const content = interaction.fields.getTextInputValue('content');
        const image = interaction.fields.getTextInputValue('image') || null;

        userChoices[interaction.user.id] = {
            ...userChoices[interaction.user.id],
            title,
            content,
            image,
        };

        const previewEmbed = new EmbedBuilder()
            .setAuthor({ name: interaction.user.username, iconURL: interaction.user.displayAvatarURL() })
            .setTitle(title)
            .setDescription(content)
            .setFooter({ text: @${interaction.user.tag} })
            .setColor(0x3498DB);

        if (image) previewEmbed.setImage(image);

        const actionButtons = new ActionRowBuilder().addComponents(
            new ButtonBuilder().setCustomId('publish').setLabel('Опубликовать').setStyle(ButtonStyle.Success),
            new ButtonBuilder().setCustomId('edit').setLabel('Изменить').setStyle(ButtonStyle.Danger),
        );

        await interaction.reply({ embeds: [previewEmbed], components: [actionButtons], ephemeral: true });
    } else if (interaction.customId.startsWith('approve_') || interaction.customId.startsWith('reject_')) {
        const targetUserId = interaction.customId.split('_')[1];
        const targetUser = await client.users.fetch(targetUserId);
        const moderationResponse = interaction.customId.startsWith('approve_') ? 'approve' : 'reject';

        const modEmbed = new EmbedBuilder()
            .setColor(moderationResponse === 'approve' ? 0x00FF00 : 0xFF0000)
            .setDescription(
                moderationResponse === 'approve'
                    ? '✅ Ваше сообщение прошло модерацию!'
                    : '❌ Ваше сообщение отклонено модератором.'
            );

        if (moderationResponse === 'approve') {
            const publishChannel = client.channels.cache.get(PUBLISH_CHANNELS[userChoices[targetUserId].category]);
            if (!publishChannel) {
                await interaction.reply({ content: 'Ошибка: Канал для публикации не найден.', ephemeral: true });
                return;
            }

            await publishChannel.send({ embeds: [interaction.message.embeds[0]] });
        }

        await targetUser.send({ embeds: [modEmbed] }).catch((err) => {
            console.error('Не удалось отправить сообщение пользователю:', err);
        });

        await interaction.reply({ content: Сообщение ${moderationResponse === 'approve' ? 'отправлено' : 'отклонено'}., ephemeral: true });
        await interaction.message.delete();
    }
});

client.login(process.env.BOT_TOKEN);