我如何用附件网址填充空数组,以便我可以在一条消息中将它们全部发送? 因为当我发送使用
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'
}
]
如果您想用消息中的所有附件 URL 填充名为
links
的数组,请使用这个简单的单行代码
const links = message.attachments.map(a => a.url)
这会获取所有邮件的附件,并将其与 URL 进行映射。
我找到了解决方案。
我必须创建空变量,然后从链接数组中获取字符串形式的结果,然后使用 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] });
}
}
}
问题出在这部分:
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”数组中。