как определить вложение и отправить его повторно (discord. js) - PullRequest
0 голосов
/ 04 августа 2020

, поэтому я пытаюсь определять, когда бот отправляет встраивание в канал, и когда он это обнаруживает, взять это вложение и повторно отправить его так же, как оно было отправлено как.

Например, если бот обнаруживает встраивание, отправленное в один канал, он отправит точно такое же вложение в другой канал. Но причина этого в том, что я хочу использовать вложения от нескольких ботов.

в discord js .guide он говорит использовать этот код:

const receivedEmbed = message.embeds[0];
const exampleEmbed = new Discord.MessageEmbed(receivedEmbed).setTitle('New title');

channel.send(exampleEmbed);

, но у меня это не сработало

Ответы [ 3 ]

1 голос
/ 04 августа 2020

Вам необходимо заменить channel в строке channel.send(exampleEmbed); фактической ссылкой на канал. Поскольку вы будете использовать обработчик событий сообщения, вы можете получить канал, по которому было отправлено сообщение, используя message.channel.

Я также добавил проверку, чтобы убедиться, что сообщение было отправлено. отправлено ботом и содержит вложение.

client.on('message', message => {
  // check to ensure message was sent by bot and contains embed
  if (!message.author.bot || !message.embeds[0]) return;

  const receivedEmbed = message.embeds[0];
  const exampleEmbed = new Discord.MessageEmbed(receivedEmbed).setTitle('New title');

  // send in same channel
  message.channel.send(exampleEmbed);

  // send in different channel
  client.channels.fetch(/* Channel ID */).then(channel => {
    channel.send(exampleEmbed);
  });
  // alternatively, you can use this (but the function must be asynchronous)
  const channel = await client.channels.fetch(/* Channel ID */);
  channel.send(exampleEmbed);
});

Для получения дополнительной информации о допустимых свойствах и методах прочтите Discord. js docs .

0 голосов
/ 04 августа 2020
const embed = message.embeds[0];
const editedEmbed = embed
.setTitle('Edited!')
.addField('Test Field!', 'This is a test', true);
message.channel.send(editedEmbed);

Это отлично сработало для меня. Проблема будет в том, что у вас не выбран TextChannel. (message.channel)

0 голосов
/ 04 августа 2020

Следующий код проверит, есть ли в сообщении какие-либо вставки, и повторно отправит первое.

if (message.embeds) {
    message.channel.send({ embed: message.embeds.first() || message.embeds[0] })
};
...