DiscordAPIError: Invalid Form Body embeds[0].description: This field is required in discord.js v13

DiscordAPIError: Invalid Form Body embeds[0].description: This field is required in discord.js v13

所以我正在使用 discord.js v13 对这个 discord 机器人进行编码,一切正常,直到由于某种原因我开始收到有关我的嵌入描述的运行时错误。

除了最后一个按钮(应该转到最后一页的按钮)外,有 3 个按钮可以使用。

这是我的代码:

import {
    Interaction,
    Message,
    MessageActionRow,
    MessageButton,
    MessageEmbed,
} from 'discord.js'
import { ICommand } from 'wokcommands'

export default {
    category: 'Testing',
    description: 'Creates an embed pagination',

    slash: 'both',
    testOnly: true,

    callback: async ({ user, message, interaction, channel }) => {

        const embeds: MessageEmbed[] = []
const pages = {} as { [key: string]: number }

for (let i = 0; i < 4; ++i) {
    embeds.push(new MessageEmbed()
    .setDescription(`Testing page ${i + 1}`))
}

const getRow = (id: string) => {
    const row = new MessageActionRow()

    row.addComponents(
        new MessageButton()
        .setCustomId('first_embed')
        .setStyle('SECONDARY')
        .setEmoji('⏮')
        .setDisabled(pages[id] === 0)
    )

    row.addComponents(
        new MessageButton()
        .setCustomId('prev_embed')
        .setStyle('SECONDARY')
        .setEmoji('⏪')
        .setDisabled(pages[id] === 0)
    )

    row.addComponents(
        new MessageButton()
        .setCustomId('next_embed')
        .setStyle('SECONDARY')
        .setEmoji('⏩')
        .setDisabled(pages[id] === embeds.length - 1)
    )

    row.addComponents(
        new MessageButton()
        .setCustomId('last_embed')
        .setStyle('SECONDARY')
        .setEmoji('⏭')
        .setDisabled(pages[id] === embeds.length - 1)
    )

    return row
}

        const id = user.id
        pages[id] = pages[id] || 0

        const embed = embeds[pages[id]]
        let reply: Message | undefined
        let collector

        const filter = (i: Interaction) => i.user.id === user.id
        const time = 1000 * 60 * 5

        if (message) {
            reply = await message.reply({
                embeds: [embed],
                components: [getRow(id)],
            })

            collector = reply.createMessageComponentCollector({ filter, time })
        } else {
            interaction.reply({
                ephemeral: true,
                embeds: [embed],
                components: [getRow(id)],
            })

            collector = channel.createMessageComponentCollector({ filter, time })
        }
        
        collector.on('collect', (btnInt) => {
            if (!btnInt) {
                return
            } 

            btnInt.deferUpdate()

            if (btnInt.customId !== 'prev_embed' && btnInt.customId !== 'next_embed' && btnInt.customId !== 'first_embed' && btnInt.customId !== 'last_embed') {
                return
            }

            console.log(embeds.length - 1)
            console.log(embeds.length)
            console.log(pages[id])

            if (btnInt.customId === 'prev_embed' && pages[id] > 0) {
                --pages[id]
            } else if (btnInt.customId === 'next_embed' && pages[id] < embeds.length - 1) {
                ++pages[id]
            } else if (btnInt.customId === 'first_embed' && pages[id] > 0) {
                pages[id] = 0
            } else if (btnInt.customId === 'last_embed' && pages[id] < embeds.length - 1) {
                pages[id] = embeds.length
            }

            if (reply) {
                reply.edit({
                    embeds: [embeds[pages[id]]],
                    components: [getRow(id)]
                })
            } else {
                interaction.editReply({
                    embeds: [embeds[pages[id]]],
                    components: [getRow(id)]
                })
            }
        })
    }
} as ICommand

错误:DiscordAPIError: Invalid Form Body embeds[0].description: This field is required

我一点击“最后”按钮,机器人就崩溃了...

// ...
} else if (btnInt.customId === 'last_embed' && pages[id] < embeds.length - 1) {
  pages[id] = embeds.length
}
// ...

此代码似乎将页面设置为 embeds.length。您可能希望将页面设置为 embeds.length - 1,因为数组是 zero-indexed.