使用discord.js v14 进行交互失败

问题描述 投票:0回答:1

我几周前开始使用discord.js,当我开始交互时,我遇到了问题,我在终端中没有错误,但我“交互失败”,我不知道为什么,我有一个程序很少,但我使用两个来让机器人交互 rn :

interactionCreate.js :

const { Events, Client } = require('discord.js');
const { ActionRowBuilder, ButtonBuilder, ButtonStyle, SlashCommandBuilder } = require('discord.js');

module.exports = {
    name: Events.InteractionCreate,
    async execute(interaction) {
        const channel = interaction.channel;

        if (interaction.isChatInputCommand()) {
            const command = interaction.client.commands.get(interaction.commandName);

            if (!command) {
                console.error(`No command matching ${interaction.commandName} was found.`);
                return;
            }

            try {
                await command.execute(interaction);
            } catch (error) {
                console.error(`Error executing ${interaction.commandName} command.`);
                console.error(error);
            }
        } else if (interaction.isButton()) {
            const message = interaction.message;
            // interaction.reply("Vous avez désormais commencé votre aventure ! Il est temps pour vous de découvrir les commandes importantes à l'aide de la commande /help");
        } else if (interaction.isStringingSelectMenu()) {
            channel.send("Merci d'appuyer sur le bouton pour commencer votre aventure !");
        }
    }
};

和start.js :

const { SlashCommandBuilder } = require("discord.js");
const { EmbedBuilder } = require("discord.js");
const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");

module.exports = {
    data: new SlashCommandBuilder()
        .setName('start')
        .setDescription('Commencer votre aventure...'),
    async execute(interaction) {
        console.log('Deferring reply...');
        await interaction.deferReply();
        console.log('Reply deferred');
        const startEmbed = new EmbedBuilder()
            .setColor(0x6a00ff)
            .setTitle("Commencer votre aventure")
            .setDescription(
                "Il est temps pour vous de commencer votre aventure dans le monde du show-business, à essayer de vous faire une place."
            )
            .addFields(
                {
                    name: "Info n°1",
                    value: "Attention, des spoilers sont inclus dans ce jeu !",
                },
                {
                    name: "Info n°2",
                    value:
                        "Il sera strictement impossible de revenir en arrière ! Attention aux choix que vous ferez, ils peuvent avoir de graves répercussions.",
                },
                {
                    name: "Info n°3",
                    value:
                        "Si vous avez un bug ou une erreur, merci de les signaler en message privé à guiireg.",
                },
                {
                    name: "Info n°4",
                    value:
                        "Mais la règle la plus importante, n'oubliez pas de vous amuser, c'est le plus important !",
                }
            )
            .setImage(
                "https://www.melty.fr/wp-content/uploads/meltyfr/2023/01/001_size10-5.jpg.webp"
            );

        const start = new ButtonBuilder()
            .setCustomId(`${interaction.id}_start`)
            .setLabel("Commencer votre partie dès maintenant")
            .setStyle(ButtonStyle.Primary);

        const startafter = ButtonBuilder.from(start)
            .setDisabled(true)
            .setCustomId(`${interaction.id}_after`);

        const row = new ActionRowBuilder().addComponents(start);
        const rowafter = new ActionRowBuilder().addComponents(startafter);

        interaction.editReply({
            embeds: [startEmbed],
            components: [row],
        });

        const filter = (i) => i.customId === `${interaction.id}_start`; // Vérifie l'identifiant de l'interaction
        const collector = interaction.channel.createMessageComponentCollector({
            filter,
        });

        collector.on("collect", async (i) => {
            console.log('Collector event handler called');
            await interaction.followUp(
                "Vous avez désormais commencé votre aventure ! Ilc est temps pour vous de découvrir les commandes importantes à l'aide de la commande /help"
            );

            await interaction.editReply({
                embeds: [startEmbed],
                components: [rowafter],
            });
        });

        collector.on("end", (collected) =>
            console.log(`Collected ${collected.size} items`)
        );
    }
};

我需要帮助,谢谢!

我尝试更改 deferReply 中的回复,我尝试了其他操作,例如更改文本等...但没有任何效果,我不想让机器人发送消息两次(这就是为什么我使用“//”,并修复互动失败

javascript discord bots
1个回答
0
投票

将interaction.reply更改为message.reply,看看它是否仍然会产生错误

© www.soinside.com 2019 - 2024. All rights reserved.