admin管理员组文章数量:1401499
This is a Discord.js command to send embeds to a specific text channel. I'm struggling a little bit with the replies/updates deferral.
When the modal is submitted, the command raises an Interaction has already been acknowledged.
error but just sometimes, and I'm not really sure where I'm doing things wrong.
As far as I know, the .showModal
method must be called as a first interaction reply since the modal opening cannot be delayed, and .deferUpdate
is used to let the server know that you're not closing the interaction yet.
/** Controller for the Messages command. */
export default async function (interaction: ChatInputCommandInteraction) {
try {
// Modal fields data
const fields: {
id: string
label: string
style: TextInputStyle
required: boolean
}[] = [
{
id: 'title',
label: 'Título',
style: TextInputStyle.Short,
required: false,
},
{ id: 'url', label: 'URL', style: TextInputStyle.Short, required: false },
{
id: 'thumbnail',
label: 'URL de la miniatura',
style: TextInputStyle.Short,
required: false,
},
{
id: 'description',
label: 'Descripción',
style: TextInputStyle.Paragraph,
required: true,
},
{
id: 'image',
label: 'URL de la Imagen',
style: TextInputStyle.Short,
required: false,
},
]
// Modal instance
const modal = new ModalBuilder({
customId: 'new-message-modal',
title: 'Nuevo mensaje',
components: fields.map(({ id, label, style, required }) =>
new ActionRowBuilder<TextInputBuilder>().addComponents(
new TextInputBuilder()
.setCustomId(id)
.setLabel(label)
.setStyle(style)
.setRequired(required),
),
),
})
await interaction.showModal(modal)
// THIS IS WHERE THE ERROR IS BEING RISEN
// We wait for the user to press "submit" or "cancel"
const modalInteraction = await interaction.awaitModalSubmit({
filter: (i: ModalSubmitInteraction) =>
i.customId === modal.data.custom_id && i.user.equals(interaction.user),
time: 60_000,
})
await modalInteraction.deferUpdate()
// Extract values from the modal
const embedData = {
title: modalInteraction.fields.getTextInputValue('title') || null,
url: modalInteraction.fields.getTextInputValue('url') || null,
description: modalInteraction.fields.getTextInputValue('description'),
thumbnail: modalInteraction.fields.getTextInputValue('thumbnail') || null,
image: modalInteraction.fields.getTextInputValue('image') || null,
}
// Create a basic embed using only the description (it's mandatory)
const newMessageEmbed = createEmbed({
description: embedData.description
})
// Dinamically add the fields based on the values provided
if (embedData.title) newMessageEmbed.setTitle(embedData.title)
if (embedData.url) newMessageEmbed.setURL(embedData.url)
if (embedData.thumbnail) newMessageEmbed.setThumbnail(embedData.thumbnail)
if (embedData.image) newMessageEmbed.setImage(embedData.image)
// Get the current channel or the provided one
const selectedChannel = (interaction.options.getChannel('canal') ||
interaction.channel) as TextChannel
// Send message to selected channel
await selectedChannel.send({ embeds: [newMessageEmbed] })
// Follow up message
await modalInteraction.followUp({
embeds: createArrayedEmbed({
title: 'Asistente de Creación de Mensajes',
description: '✅ Mensaje enviado correctamente.',
}),
flags: 'Ephemeral',
})
} catch (error) {
console.log(error)
}
}
本文标签: javascriptAm I wrongly handling deferral in this Discordjs slash commandStack Overflow
版权声明:本文标题:javascript - Am I wrongly handling deferral in this Discord.js slash command? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744306843a2599836.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论