Hi I'm trying to get an embed working but it keeps returning with
this.options.embeds?.map is not a function
I've looked online but can't find an answer as most of the solutions are to update node.js of which I have the latest version
const {
SlashCommandBuilder
} = require('@discordjs/builders');
const {
MessageEmbed,
MessageAttachment,
Message
} = require('discord.js');
module.exports = {
data: new SlashCommandBuilder()
.setName('info')
.setDescription('Returns info based on input')
.addSubmand(submand =>
submand
.setName("user")
.setDescription("Gets information of a user mentioned")
.addUserOption(option => option.setName("target").setDescription("The user mentioned")))
.addSubmand(submand =>
submand
.setName("server")
.setDescription("Info about the server")),
async execute(interaction, client) {
if (interaction.options.getSubmand() === "user") {
const user = interaction.options.getUser("target");
if (user) {
const file = new MessageAttachment("./src/images/Bobbys.png");
const userEmbed = new MessageEmbed()
.setTitle(`${user.username}`)
.setDescription(`A member of the ${user.guildname} server!`)
.setAuthor("Bobby Bot", client.user.displayAvatarURL())
.setThumbnail(client.user.displayAvatarURL())
.addFields(
{ name: "Tag", value: `<@${user.id}>`, inline: true},
{ name: "\u200B", value: "\u200B", inline: true},
{ name: "Member Since", value: `${user.joinedAt}`, inline: true}
)
.setImage(user.displayAvatarURL)
.setTimestamp()
.setFooter(client.user.tag, client.user.displayAvatarURL());
await interaction.reply({ embeds: userEmbed, files: [file] });
} else {
await interaction.reply(`<@${interaction.user.id}>\nUsername: ${interaction.user.username}\nYour ID: ${interaction.user.id}`);
}
} else if (interaction.options.getSubmand() === "server") {
await interaction.reply(`Server Name: ${interaction.guild.name}\nTotal Members: ${interaction.guild.memberCount}`);
} else {
await interaction.reply("No submand was used");
};
},
};
This is my code, but for some reason, it's returning a mapping error even though I'm not using the inbuilt function and is returning this error:
TypeError: this.options.embeds?.map is not a function
at MessagePayload.resolveData (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\structures\MessagePayload.js:184:36)
at CommandInteraction.reply (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\structures\interfaces\InteractionResponses.js:97:50)
at Object.execute (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\src\mands\Information\info.js:41:35)
at Object.execute (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\src\events\interactionCreate.js:11:27)
at Client.<anonymous> (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\src\functions\handleEvents.js:8:58)
at Client.emit (node:events:394:28)
at InteractionCreateAction.handle (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\client\actions\InteractionCreate.js:66:12)
at Object.module.exports [as INTERACTION_CREATE] (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
at WebSocketManager.handlePacket (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:345:31)
at WebSocketShard.onPacket (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:443:22)
C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\rest\RequestHandler.js:298
throw new DiscordAPIError(data, res.status, request);
^
DiscordAPIError: Unknown interaction
at RequestHandler.execute (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\rest\RequestHandler.js:298:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async RequestHandler.push (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\rest\RequestHandler.js:50:14)
at async CommandInteraction.reply (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\structures\interfaces\InteractionResponses.js:99:5)
at async Object.execute (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\src\events\interactionCreate.js:14:13) {
method: 'post',
path: '/interactions/887347065653452800/aW50ZXJhY3Rpb246ODg3MzQ3MDY1NjUzNDUyODAwOklyMlZNcFFmNndBTnR1c0FYYnp1ZDEyQU1lRVlFMjRWWmxxM3JmZkREY3dlNHcwRUtJcHFoRmFlQW1kRjRPMUtuVFB3Q0JpN0NncU5KaHVnZjRiV0dqQ1BsTlNBdmlXS1ZzOUYwQjN4R3RSUUhGU0RqSnVPNElYdzY2Umx1OWJ3/callback',
code: 10062,
httpStatus: 404,
requestData: {
json: {
type: 4,
data: {
content: 'There was an error while executing this mand!',
tts: false,
nonce: undefined,
embeds: undefined,
ponents: undefined,
username: undefined,
avatar_url: undefined,
allowed_mentions: undefined,
flags: 64,
message_reference: undefined,
attachments: undefined,
sticker_ids: undefined
}
},
files: []
}
}
Hi I'm trying to get an embed working but it keeps returning with
this.options.embeds?.map is not a function
I've looked online but can't find an answer as most of the solutions are to update node.js of which I have the latest version
const {
SlashCommandBuilder
} = require('@discordjs/builders');
const {
MessageEmbed,
MessageAttachment,
Message
} = require('discord.js');
module.exports = {
data: new SlashCommandBuilder()
.setName('info')
.setDescription('Returns info based on input')
.addSubmand(submand =>
submand
.setName("user")
.setDescription("Gets information of a user mentioned")
.addUserOption(option => option.setName("target").setDescription("The user mentioned")))
.addSubmand(submand =>
submand
.setName("server")
.setDescription("Info about the server")),
async execute(interaction, client) {
if (interaction.options.getSubmand() === "user") {
const user = interaction.options.getUser("target");
if (user) {
const file = new MessageAttachment("./src/images/Bobbys.png");
const userEmbed = new MessageEmbed()
.setTitle(`${user.username}`)
.setDescription(`A member of the ${user.guildname} server!`)
.setAuthor("Bobby Bot", client.user.displayAvatarURL())
.setThumbnail(client.user.displayAvatarURL())
.addFields(
{ name: "Tag", value: `<@${user.id}>`, inline: true},
{ name: "\u200B", value: "\u200B", inline: true},
{ name: "Member Since", value: `${user.joinedAt}`, inline: true}
)
.setImage(user.displayAvatarURL)
.setTimestamp()
.setFooter(client.user.tag, client.user.displayAvatarURL());
await interaction.reply({ embeds: userEmbed, files: [file] });
} else {
await interaction.reply(`<@${interaction.user.id}>\nUsername: ${interaction.user.username}\nYour ID: ${interaction.user.id}`);
}
} else if (interaction.options.getSubmand() === "server") {
await interaction.reply(`Server Name: ${interaction.guild.name}\nTotal Members: ${interaction.guild.memberCount}`);
} else {
await interaction.reply("No submand was used");
};
},
};
This is my code, but for some reason, it's returning a mapping error even though I'm not using the inbuilt function and is returning this error:
TypeError: this.options.embeds?.map is not a function
at MessagePayload.resolveData (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\structures\MessagePayload.js:184:36)
at CommandInteraction.reply (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\structures\interfaces\InteractionResponses.js:97:50)
at Object.execute (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\src\mands\Information\info.js:41:35)
at Object.execute (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\src\events\interactionCreate.js:11:27)
at Client.<anonymous> (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\src\functions\handleEvents.js:8:58)
at Client.emit (node:events:394:28)
at InteractionCreateAction.handle (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\client\actions\InteractionCreate.js:66:12)
at Object.module.exports [as INTERACTION_CREATE] (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
at WebSocketManager.handlePacket (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:345:31)
at WebSocketShard.onPacket (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:443:22)
C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\rest\RequestHandler.js:298
throw new DiscordAPIError(data, res.status, request);
^
DiscordAPIError: Unknown interaction
at RequestHandler.execute (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\rest\RequestHandler.js:298:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async RequestHandler.push (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\rest\RequestHandler.js:50:14)
at async CommandInteraction.reply (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\node_modules\discord.js\src\structures\interfaces\InteractionResponses.js:99:5)
at async Object.execute (C:\Users\jacob\OneDrive\Desktop\Bobby Bot\src\events\interactionCreate.js:14:13) {
method: 'post',
path: '/interactions/887347065653452800/aW50ZXJhY3Rpb246ODg3MzQ3MDY1NjUzNDUyODAwOklyMlZNcFFmNndBTnR1c0FYYnp1ZDEyQU1lRVlFMjRWWmxxM3JmZkREY3dlNHcwRUtJcHFoRmFlQW1kRjRPMUtuVFB3Q0JpN0NncU5KaHVnZjRiV0dqQ1BsTlNBdmlXS1ZzOUYwQjN4R3RSUUhGU0RqSnVPNElYdzY2Umx1OWJ3/callback',
code: 10062,
httpStatus: 404,
requestData: {
json: {
type: 4,
data: {
content: 'There was an error while executing this mand!',
tts: false,
nonce: undefined,
embeds: undefined,
ponents: undefined,
username: undefined,
avatar_url: undefined,
allowed_mentions: undefined,
flags: 64,
message_reference: undefined,
attachments: undefined,
sticker_ids: undefined
}
},
files: []
}
}
Share
Improve this question
edited Sep 14, 2021 at 16:23
MrMythical
9,0393 gold badges21 silver badges48 bronze badges
asked Sep 14, 2021 at 14:46
Jacob SandersonJacob Sanderson
191 silver badge6 bronze badges
1
-
Use
await interaction.reply({ embeds: [userEmbed], files: [file] });
, embeds is expecting an array – iunfixit Commented Sep 14, 2021 at 14:56
1 Answer
Reset to default 5await interaction.reply({ embeds: userEmbed, files: [file] });
this line of code looks like a problem. the "embeds:" label is expecting an array, just like you have for the files. change it to:
await interaction.reply({ embeds: [userEmbed], files: [file] });
hopefully that fixes it.