Как я могу отредактировать вставку после того, как кто-то взаимодействует с кнопкой

#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]