ErrorName => DiscordAPIError: Invalid Form Body

ErrorName => DiscordAPIError: Invalid Form Body

虽然我尝试了几种方法,但我无法用这段代码解决问题。我希望有人能帮我解决这个问题

代码:

client.on("messageCreate", async message => {
if (message.author.bot || !message.guild) return;
if (message.content.startsWith(prefix + "get-roles")) {
    let roles_notifications = new Discord.MessageActionRow()
    .addComponents(
        new Discord.MessageButton()
        .setCustomId("notification_1")
        .setLabel("All Notifications")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_2")
        .setLabel("YouTube Uploads")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_3")
        .setLabel("Twitter Uploads")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_4")
        .setLabel("Server News")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_5")
        .setLabel("Server Updates")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_6")
        .setLabel("Anime News")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_7")
        .setLabel("Anime Episodes")
        .setStyle("PRIMARY"),
    )
    let embed = new Discord.MessageEmbed()
    .setDescription("Select role")
    let msg = await message.channel.send({ embeds: [embed], components: [roles_notifications] })
    let iFilter = i => i.user.id === message.author.id;
    let collector = msg.createMessageComponentCollector({ filter: iFilter, time: 3600000 })

    collector.on("collect", async r => {
        if (r.customId === "notification_1") {
            let role_1 = message.guild.roles.cache.get(config.roles.all_notifications)
            if (message.member.roles.cache ?.has(role_1.id)) {
                message.member.roles.remove(role_1.id)
                r.reply({ content: `Removed The ${role_1} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_1.id)
                r.reply({ content: `Added The ${role_1} Role!`, ephemeral: true })
            }
        } else if (r.customId === "notification_2") {
            let role_2 = message.guild.roles.cache.get(config.roles.youTube_uploads)
            if (message.member.roles.cache ?.has(role_2.id)) {
                message.member.roles.remove(role_2.id)
                r.reply({ content: `Removed The ${role_2} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_2.id)
                r.reply({ content: `Added The ${role_2} Role!`, ephemeral: true })
            }
        } else if (r.customId === "notification_3") {
            let role_3 = message.guild.roles.cache.get(config.roles.twitter_uploads)
            if (message.member.roles.cache ?.has(role_3.id)) {
                message.member.roles.remove(role_3.id)
                r.reply({ content: `Removed The ${role_3} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_3.id)
                r.reply({ content: `Added The ${role_3} Role!`, ephemeral: true })
            }
        } else if (r.customId === "notification_4") {
            let role_4 = message.guild.roles.cache.get(config.roles.server_news)
            if (message.member.roles.cache ?.has(role_4.id)) {
                message.member.roles.remove(role_2.id)
                r.reply({ content: `Removed The ${role_2} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_4.id)
                r.reply({ content: `Added The ${role_4} Role!`, ephemeral: true })
            }
        }  else if (r.customId === "notification_5") {
            let role_5 = message.guild.roles.cache.get(config.roles.server_updates)
            if (message.member.roles.cache ?.has(role_5.id)) {
                message.member.roles.remove(role_5.id)
                r.reply({ content: `Removed The ${role_5} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_5.id)
                r.reply({ content: `Added The ${role_5} Role!`, ephemeral: true })
            }
        } else if (r.customId === "notification_6") {
            let role_6 = message.guild.roles.cache.get(config.roles.anime_news)
            if (message.member.roles.cache ?.has(role_6.id)) {
                message.member.roles.remove(role_6.id)
                r.reply({ content: `Removed The ${role_6} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_6.id)
                r.reply({ content: `Added The ${role_6} Role!`, ephemeral: true })
            }
        } else if (r.customId === "notification_7") {
            let role_7 = message.guild.roles.cache.get(config.roles.anime_episodes)
            if (message.member.roles.cache ?.has(role_7.id)) {
                message.member.roles.remove(role_7.id)
                r.reply({ content: `Removed The ${role_7} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_7.id)
                r.reply({ content: `Added The ${role_7} Role!`, ephemeral: true })
            }
        }
    })
}

});

错误:

/home/runner/System-Bot/node_modules/discord.js/src/rest/RequestHandler.js:350
  throw new DiscordAPIError(data, res.status, request);
        ^

DiscordAPIError:无效表单Body components[0].components[5]: 指定组件超出最大宽度 components[0].components[6]: 指定组件超过最大宽度 在 RequestHandler.execute (/home/runner/System-Bot/node_modules/discord.js/src/rest/RequestHandler.js:350:13) 在 processTicksAndRejections(节点:internal/process/task_queues:96:5) 在异步 RequestHandler.push (/home/runner/System-Bot/node_modules/discord.js/src/rest/RequestHandler.js:51:14) 在异步 TextChannel.send (/home/runner/System-Bot/node_modules/discord.js/src/structures/interfaces/TextBasedChannel.js:175:15) { 方法:'post', 路径:'/channels/947233067129516093/messages', 代码:50035, http状态:400, 请求数据:{ json:{ 内容:未定义, tts:假的, 随机数:未定义, 嵌入:[ { 标题:空, 类型:'rich', 描述:'Select role', url:空, 时间戳:0, 颜色:空, 字段:[], 缩略图:空, 图片:空, 作者:空, 页脚:空 } ], 组件: [ { 组件: [ [Object], [Object], [Object], [Object], [Object], [Object], [Object] ], 类型:1 } ], 用户名:未定义, avatar_url:未定义, allowed_mentions:未定义, 标志:未定义, message_reference:未定义, 附件:未定义, sticker_ids:未定义 }, 文件:[] } }

根据 discord.js,一个 MessageActionRow 中最多只能有五个按钮,因此您只需删除最后两个 MessageButtons 即可消除错误。但是如果您仍然希望显示所有按钮,您可以在具有最后两个按钮的代码中添加另一个 MessageActionRow 并将它们一起发送,以便您的代码如下所示:

client.on("messageCreate", async message => {
if (message.author.bot || !message.guild) return;
if (message.content.startsWith(prefix + "get-roles")) {
    let first_roles_notifications = new Discord.MessageActionRow()
    .addComponents(
        new Discord.MessageButton()
        .setCustomId("notification_1")
        .setLabel("All Notifications")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_2")
        .setLabel("YouTube Uploads")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_3")
        .setLabel("Twitter Uploads")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_4")
        .setLabel("Server News")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_5")
        .setLabel("Server Updates")
        .setStyle("PRIMARY"),
    )
    let second_roles_notifications = new Discord.MessageActionRow()
    .addComponents(
        new Discord.MessageButton()
        .setCustomId("notification_6")
        .setLabel("Anime News")
        .setStyle("PRIMARY"),
        new Discord.MessageButton()
        .setCustomId("notification_7")
        .setLabel("Anime Episodes")
        .setStyle("PRIMARY"),
    )
    let embed = new Discord.MessageEmbed()
    .setDescription("Select role")
    let msg = await message.channel.send({ embeds: [embed], components: [first_roles_notifications, second_roles_notifications] })
    let iFilter = i => i.user.id === message.author.id;
    let collector = msg.createMessageComponentCollector({ filter: iFilter, time: 3600000 })

    collector.on("collect", async r => {
        if (r.customId === "notification_1") {
            let role_1 = message.guild.roles.cache.get(config.roles.all_notifications)
            if (message.member.roles.cache ?.has(role_1.id)) {
                message.member.roles.remove(role_1.id)
                r.reply({ content: `Removed The ${role_1} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_1.id)
                r.reply({ content: `Added The ${role_1} Role!`, ephemeral: true })
            }
        } else if (r.customId === "notification_2") {
            let role_2 = message.guild.roles.cache.get(config.roles.youTube_uploads)
            if (message.member.roles.cache ?.has(role_2.id)) {
                message.member.roles.remove(role_2.id)
                r.reply({ content: `Removed The ${role_2} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_2.id)
                r.reply({ content: `Added The ${role_2} Role!`, ephemeral: true })
            }
        } else if (r.customId === "notification_3") {
            let role_3 = message.guild.roles.cache.get(config.roles.twitter_uploads)
            if (message.member.roles.cache ?.has(role_3.id)) {
                message.member.roles.remove(role_3.id)
                r.reply({ content: `Removed The ${role_3} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_3.id)
                r.reply({ content: `Added The ${role_3} Role!`, ephemeral: true })
            }
        } else if (r.customId === "notification_4") {
            let role_4 = message.guild.roles.cache.get(config.roles.server_news)
            if (message.member.roles.cache ?.has(role_4.id)) {
                message.member.roles.remove(role_2.id)
                r.reply({ content: `Removed The ${role_2} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_4.id)
                r.reply({ content: `Added The ${role_4} Role!`, ephemeral: true })
            }
        }  else if (r.customId === "notification_5") {
            let role_5 = message.guild.roles.cache.get(config.roles.server_updates)
            if (message.member.roles.cache ?.has(role_5.id)) {
                message.member.roles.remove(role_5.id)
                r.reply({ content: `Removed The ${role_5} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_5.id)
                r.reply({ content: `Added The ${role_5} Role!`, ephemeral: true })
            }
        } else if (r.customId === "notification_6") {
            let role_6 = message.guild.roles.cache.get(config.roles.anime_news)
            if (message.member.roles.cache ?.has(role_6.id)) {
                message.member.roles.remove(role_6.id)
                r.reply({ content: `Removed The ${role_6} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_6.id)
                r.reply({ content: `Added The ${role_6} Role!`, ephemeral: true })
            }
        } else if (r.customId === "notification_7") {
            let role_7 = message.guild.roles.cache.get(config.roles.anime_episodes)
            if (message.member.roles.cache ?.has(role_7.id)) {
                message.member.roles.remove(role_7.id)
                r.reply({ content: `Removed The ${role_7} Role!`, ephemeral: true })
            } else {
                message.member.roles.add(role_7.id)
                r.reply({ content: `Added The ${role_7} Role!`, ephemeral: true })
            }
        }
    })
}