Я не смог решить проблему с этим кодом, хотя пробовал несколькими способами. Я надеюсь, что кто-то может помочь мне с этим
КОД:
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: Недопустимое тело формы компоненты[0].components[5]: указанный компонент превышает максимальную ширину компоненты[0].components[6]: указанный компонент превышает максимальную ширину в RequestHandler.execute (/home/runner/System-Bot/node_modules/discord.js/src/rest/RequestHandler.js:350:13) в processTicksAndRejections (узел: внутренний/процесс/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) { метод: 'пост', путь: '/каналы/947233067129516093/сообщения', код: 50035, httpСтатус: 400, данные запроса: { json: { содержание: не определено, тс: ложь, одноразовый номер: не определено, встраивает: [ { название: ноль, тип: «богатый», описание: «Выбрать роль», URL: ноль, метка времени: 0, цвет: ноль, поля: [], миниатюра: ноль, изображение: ноль, автор: ноль, нижний колонтитул: ноль } ], компоненты: [ { компоненты: [ [Объект Object], [Объект Object], [Объект Object], [Объект] ], Тип 1 } ], имя пользователя: не определено, avatar_url: не определено, разрешенные_упоминания: не определено, флаги: неопределенные, message_reference: не определено, вложения: неопределенные, sticker_ids: не определено }, файлы: [] } }
Отвечает ли это на ваш вопрос? Discord JS, дискорд-кнопки; Как прикрепить к сообщению более 5 кнопок?
Согласно 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 })
}
}
})
}
Может стоит прочитать документацию...?!? discordjs.guide/взаимодействия/…: «ВНИМАНИЕ: у вас может быть максимум пять строк ActionRow для каждого сообщения и пять кнопок в строке действий».