首页 > 解决方案 > this.options.embeds?.map 不是函数 discord.js

问题描述

嗨,我正在尝试让嵌入工作,但它不断返回

this.options.embeds?.map 不是函数

我在网上看过但找不到答案,因为大多数解决方案都是更新我拥有最新版本的 node.js

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')
        .addSubcommand(subcommand =>
            subcommand
            .setName("user")
            .setDescription("Gets information of a user mentioned")
            .addUserOption(option => option.setName("target").setDescription("The user mentioned")))
        .addSubcommand(subcommand =>
            subcommand
            .setName("server")
            .setDescription("Info about the server")),
    async execute(interaction, client) {
        if (interaction.options.getSubcommand() === "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.getSubcommand() === "server") {
            await interaction.reply(`Server Name: ${interaction.guild.name}\nTotal Members: ${interaction.guild.memberCount}`);
        } else {
            await interaction.reply("No subcommand was used");
        };
    },
};

这是我的代码,但由于某种原因,即使我没有使用内置函数并返回此错误,它也会返回映射错误:

    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\commands\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 command!',
        tts: false,
        nonce: undefined,
        embeds: undefined,
        components: undefined,
        username: undefined,
        avatar_url: undefined,
        allowed_mentions: undefined,
        flags: 64,
        message_reference: undefined,
        attachments: undefined,
        sticker_ids: undefined
      }
    },
    files: []
  }
}

标签: javascriptdiscorddiscord.js

解决方案


await interaction.reply({ embeds: userEmbed, files: [file] });

这行代码看起来有问题。“嵌入:”标签需要一个数组,就像文件一样。将其更改为:

await interaction.reply({ embeds: [userEmbed], files: [file] });

希望能解决它。


推荐阅读