#javascript #discord.js
#язык JavaScript #discord.js
Вопрос:
Я хочу знать, как я могу отредактировать вставку, которая была отправлена ранее из-за того, что кто-то взаимодействовал с ее кнопками.
Пример:
[|Now Playing ] [|Music A ] [|Duration: 1:00 ] [|Vol: 100% ] [Add 10 of volume] [Subtract 10 of volume] (buttons)
Если пользователь нажмет кнопку «Добавить 10 объема», бот отправит сообщение о том, что он добавил 10 к объему, и он отредактирует вставку, чтобы показать новый объем и то же самое с «Вычесть 10 объема», но вычитая его на 10.
Теперь мой код:
const { MessageEmbed, MessageActionRow, MessageButton} = require("discord.js"); const { convertTime } = require('../../utils/convert.js'); module.exports = async (client, player, track, payload) =gt; { const emojiplay = client.emoji.play; const thing = new MessageEmbed() .setTitle("Começou a tocar.") .setDescription(`${emojiplay} [${track.title}](${track.uri})`) .addField('Duração:',`${convertTime(track.duration)}`, false) .addField('vol') .setThumbnail(track.displayThumbnail("3")) .setColor(client.embedColor) .setTimestamp() const But1 = new MessageButton().setCustomId("vdown").setEmoji("🔉").setStyle("SECONDARY").setLabel("-10 Vol.") ; const But2 = new MessageButton().setCustomId("stop").setEmoji("❌").setStyle("SECONDARY").setLabel("Finalizar sessão"); const But3 = new MessageButton().setCustomId("pause").setEmoji("⏸").setStyle("SECONDARY").setLabel("Pausar/Reproduzir"); const But4 = new MessageButton().setCustomId("skip").setEmoji("⏭️").setStyle("SECONDARY").setLabel("Pular"); const But5 = new MessageButton().setCustomId("vup").setEmoji("🔊").setStyle("SECONDARY").setLabel(" 10 de Vol."); const row = new MessageActionRow().addComponents(But1, But2, But3, But4, But5); let NowPlaying = await client.channels.cache .get(player.textChannel) .send({ embeds: [thing], components: [row] }); player.setNowplayingMessage(NowPlaying); const collector = NowPlaying.createMessageComponentCollector({ filter: (b) =gt; { if(b.guild.me.voice.channel amp;amp; b.guild.me.voice.channelId === b.member.voice.channelId) return true; else { b.reply({content: `You are not connected to ${b.guild.me.voice.channel} to use this buttons.`, ephemeral: true}); return false; }; }, time: track.duration, }); collector.on("collect", async (i) =gt; { if (i.customId === "vdown") { if (!player) { return collector.stop(); } let amount = Number(player.volume) - 10; await player.setVolume(amount); i.reply({content: `Volume set to ${amount} `, ephemeral: true}); } else if (i.customId === "stop") { if (!player) { return collector.stop(); } await player.stop(); await player.queue.clear(); i.reply({content: "Music Is Stopped", ephemeral: true}); return collector.stop(); } else if (i.customId === "pause") { if (!player) { return collector.stop(); } player.pause(!player.paused); const Text = player.paused ? "paused" : "resume"; i.reply({content: `I have ${Text} the music!`, ephemeral: true}); } else if (i.customId === "skip") { if (!player) { return collector.stop(); } await player.stop(); i.reply({content: "I have skipped to the next song!", ephemeral: true}); if (track.length === 1) { return collector.stop(); } } else if (i.customId === "vup") { if (!player) { return collector.stop(); } let amount = Number(player.volume) 10; if(amount gt;= 150) return i.reply({ content: `Cannot higher the player volume further more.`, ephemeral: true }); await player.setVolume(amount); i.reply({content: `Volume set to ${amount} `, ephemeral: true}); return; } }); }
Ответ №1:
К сожалению, вы не можете редактировать встраивания, поэтому для этого вашему боту нужно будет воссоздать встраивание с правильными параметрами, а затем message.edit({embeds: [theNewEmbed]})
. Я советую вам закодировать функцию, которая возвращает это встраивание в зависимости от некоторых параметров, чтобы избежать раздувания вашего кода созданиями встраивания.
Комментарии:
1. И можно ли удалить старую вставку?
2. При этом
{embeds: [newEmbed]}
он автоматически удалит вставку3. Кроме того, вы можете получить доступ к исходному встраиванию с помощью
message.embeds[0]