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.
所以我正在使用 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.