如何将邮件附件中的数据保存到空数组中?这样我就可以在一条消息中发送更多附件 Discord.js

问题描述 投票:0回答:3

我如何用附件网址填充空数组,以便我可以在一条消息中将它们全部发送? 因为当我发送使用

url
变量时,根据附件编号,相同的消息将被发送多次。这是我到目前为止尝试过的,但我无法通过这个..我没有主意了。

      message.attachments.forEach(attachment => {
        const url = attachment.url;
        if(url) {
        let links = []
        Array.from(message.attachments).forEach(links => console.log(links));
        const exampleEmbed = new MessageEmbed()
        .setColor('#ff0000')
        .setAuthor(lastMessage.author.username, message.author.avatarURL({ dynamic: true }))
        .setTitle(`(Report)Bug report from ` + lastMessage.author.username + `#` + lastMessage.author.discriminator)
        .setURL('https://discord.com/channels/' + lastMessage.guildId + '/' + lastMessage.channelId + '/' + lastMessage.id)
        .setDescription(lastMessage.content.replace(/^([^ ]+ ){2}/, '') + ' ' + links);
        client.channels.cache.get('ID').send({ embeds: [exampleEmbed] });
        }
      })
    }
  }

问题是我无法用 url 填充 links 数组,所以我可以在描述中使用它们,而且

links
内部的
.setDescription
不提供任何值,它只是空的,所以看起来
.forEach(links => console.log(links)); 
不会向
let links = []

添加任何内容

有人建议我使用这个

Array
   .from(message.attachments)
   .forEach(...);

// Or

[...message.attachments]
   .forEach(...);

Array.from(message.attachments).forEach
尝试它,但是我不知道如何正确使用它,我对我看到的其他示例(一般示例)完全感到困惑。非常感谢每一个帮助..

Array.from(message.attachments).forEach(links => console.log(links));

登录
[
  '924775808831197184',
  MessageAttachment {
    attachment: 'https://cdn.discordapp.com/attachments/924298360603672576/924775808831197184/bug1.gif',
    name: 'bug1.gif',
    id: '924775808831197184',
    size: 5314,
    url: 'https://cdn.discordapp.com/attachments/924298360603672576/924775808831197184/bug1.gif',
    proxyURL: 'https://media.discordapp.net/attachments/924298360603672576/924775808831197184/bug1.gif',
    height: 128,
    width: 128,
    contentType: 'image/gif'
  }
]
[
  '924775809040932945',
  MessageAttachment {
    attachment: 'https://cdn.discordapp.com/attachments/924298360603672576/924775809040932945/bug.gif',
    name: 'bug.gif',
    id: '924775809040932945',
    size: 5314,
    url: 'https://cdn.discordapp.com/attachments/924298360603672576/924775809040932945/bug.gif',
    proxyURL: 'https://media.discordapp.net/attachments/924298360603672576/924775809040932945/bug.gif',
    height: 128,
    width: 128,
    contentType: 'image/gif'
  }
]
[
  '924775808831197184',
  MessageAttachment {
    attachment: 'https://cdn.discordapp.com/attachments/924298360603672576/924775808831197184/bug1.gif',
    name: 'bug1.gif',
    id: '924775808831197184',
    size: 5314,
    url: 'https://cdn.discordapp.com/attachments/924298360603672576/924775808831197184/bug1.gif',
    proxyURL: 'https://media.discordapp.net/attachments/924298360603672576/924775808831197184/bug1.gif',
    height: 128,
    width: 128,
    contentType: 'image/gif'
  }
]
[
  '924775809040932945',
  MessageAttachment {
    attachment: 'https://cdn.discordapp.com/attachments/924298360603672576/924775809040932945/bug.gif',
    name: 'bug.gif',
    id: '924775809040932945',
    size: 5314,
    url: 'https://cdn.discordapp.com/attachments/924298360603672576/924775809040932945/bug.gif',
    proxyURL: 'https://media.discordapp.net/attachments/924298360603672576/924775809040932945/bug.gif',
    height: 128,
    width: 128,
    contentType: 'image/gif'
  }
]
node.js arrays discord.js message attachment
3个回答
0
投票

如果您想用消息中的所有附件 URL 填充名为

links
的数组,请使用这个简单的单行代码

const links = message.attachments.map(a => a.url)

这会获取所有邮件的附件,并将其与 URL 进行映射。


0
投票

我找到了解决方案。

我必须创建空变量,然后从链接数组中获取字符串形式的结果,然后使用 forEach,这会将链接存储在结果中,然后机器人将在一个嵌入中发送由

\n
分隔的附件链接留言。

      let result = '';
      message.attachments.forEach(attachment => {
        const url = attachment.url;
        if(url) {
          let links = [url]
          links.forEach(function(link) {
            result = result+'\n'+link;
          })
        }
      });
      const exampleEmbed = new MessageEmbed()
      .setColor('#ff0000')
      .setAuthor(lastMessage.author.username, message.author.avatarURL({ dynamic: true }))
      .setTitle(`(Report)Bug report from ` + lastMessage.author.username + `#` + lastMessage.author.discriminator)
      .setURL('https://discord.com/channels/' + lastMessage.guildId + '/' + lastMessage.channelId + '/' + lastMessage.id)
      .setDescription(lastMessage.content.replace(/^([^ ]+ ){2}/, '') + ' ' + result);
      client.channels.cache.get('ID').send({ embeds: [exampleEmbed] });
      }
    }
  }

0
投票

问题出在这部分:

let links = [];
Array.from(message.attachments).forEach(links => console.log(links));

在第一个字符串中,您创建一个“links”变量并为其分配一个空数组。 在第二行中,您从“message.attachments”创建一个新数组,不将其分配给任何内容并将其所有元素输出到控制台。 因此,在第二行之后,“links”变量仍然是空数组,但控制台输出填充了“message.attachments”数组项数据。

您需要将第二个字符串更改为:

Array.from(message.attachments).forEach(messageAttachment =>
  links.push(messageAttachment[1].url)
);

通过这种方式,您可以为“message.attachment”数组(它是数组,由两个元素组成:带有数字的字符串和 MessageAttachment 对象)的每个元素获取该数组的索引为“1”的元素(MessageAttachment 对象本身) )并从中获取“url”字段,然后使用 push 方法添加到“links”数组中。

© www.soinside.com 2019 - 2024. All rights reserved.