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 })
}
}
})
}
虽然我尝试了几种方法,但我无法用这段代码解决问题。我希望有人能帮我解决这个问题
代码:
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 })
}
}
})
}