如何在 discord.js V.13 中制作按钮事件处理程序

How to make a button event handler in discord.js V.13

我创建了一个函数来发送带有按钮的嵌入消息,现在我想创建一个事件处理程序来检测按钮何时被单击并执行一个函数作为响应。

我想在与事件处理程序文件夹相同的文件夹中创建按钮处理程序。

The folder where I want to place my event handler

button是互动。因此,您可以在 interactionCreate handler 中创建 button handler。你用这样的 if 语句检查交互类型;

client.on("interactionCreate", async (interaction) => {
  if (interaction.isButton()) {
    // ** Buttons handler
  }

  if (interaction.isCommand()) {
    // ** Slash commands handler
  }
});

我终于编写了这段代码并且成功了:

// Button Handler
client.buttons = new Collection();
const buttonFolders = fs.readdirSync('./buttons');

for (const folder of buttonFolders) {
    const buttonFiles = fs.readdirSync(`./buttons/${folder}`).filter(file => file.endsWith('.js'));
    for (const file of buttonFiles) {
        const button = require(`./buttons/${folder}/${file}`);
        client.buttons.set(button.data.name, button);
    }
}

client.on('interactionCreate', async interaction => {
    if(interaction.isButton()) {
        const button = client.buttons.get(interaction.customId);
        if(!button) return;

        try {
            await button.execute(interaction);
        } catch (error) {
            console.error(error);
            await interaction.reply({ content: 'There was an error while executing the button script !', ephemeral: true});
        }
    } else {
        return;
    }
})