if (!embedData) return Error('Failed to provide embed data.');
if (this.previousMessage) await this.previousMessage.delete();
let filter = m => m.author.id == this.interaction.user.id;
let promptEmbed = new Discord.EmbedBuilder(embedData).setFooter({ text: cancelPromptMessage }).setTimestamp(Date.now());
if ((promptEmbed.title == '') || !promptEmbed) promptEmbed.setTitle(this.title);
if (skipable) promptEmbed.setFooter({ text: skipPromptMessage });
let memberId = this.interaction.user.id
let newPrompt = (await this.interaction.client.shard.broadcastEval(async (client, { promptEmbed, memberId }) => {
let member = await client.users.fetch(memberId)
if (member && client.shard.ids == 0) {
let message = await member.send({ embeds: [promptEmbed] })
return [message, message.url]
}
}, { context: { promptEmbed, memberId } }).catch(async () => {
return [false]
}))[0]
if (newPrompt == false) {
this.endPrompt('errorWithReason', "We couldn't send you a DM as they are closed.");
return
}
let ActionRow = new Discord.ActionRowBuilder()
const movedToDMButton = ActionRow.addComponents(new Discord.ButtonBuilder().setURL(newPrompt[1]).setLabel('Jump to DM').setStyle(Discord.ButtonStyle.Link));
if (this.interaction.deferred || this.interaction.replied) {
await this.interaction.editReply({ embeds: [movedToDM], components: [movedToDMButton] })
} else {
await this.interaction.reply({ embeds: [movedToDM], components: [movedToDMButton] })
}
this.redirectedToDMs = true
try {
let message = (await this.interaction.client.shard.broadcastEval(async (client, { memberId, filter, timeOutTime }) => {
let member = await client.users.fetch(memberId)
if (client.shard.ids[0] == 0) {
let message = await member.dmChannel.awaitMessages({ filter, max: 1, time: timeOutTime, errors: ['time'] });
if (message.first() && message.first().attachments.first()) return [message.first(), message.first().attachments.first()]
else if (message.first() && !message.first().attachments.first()) return [message.first()]
}
}, { context: { memberId, filter, timeOutTime } }))[0]
if (message[0].content == 'cancel') {
this.endPrompt('cancel')
return
}
if (message[0].content == 'skip' && skipable) return false;
if (message[1]) {
let newData = message[0]
newData.attachments = message[1]
return newData;
}
return message[0];
} catch {
this.endPrompt('time');
return false
}```