#javascript #node.js #arrays #discord #discord.js
#javascript #node.js #массивы #Discord #discord.js
Вопрос:
Функция: для сбора всех вложений сообщений в канале и возврата их URL.
Код:
const scrapemember = require('./Scraper/scraper.json');
const fs = require('fs');
const { readdirSync } = require("fs");
const { join } = require("path");
client.commands = new Discord.Collection();
const commandFiles = readdirSync(join(__dirname, "Scraper")).filter(file => file.endsWith(".js"));
for (const file of commandFiles) {
const command = require(join(__dirname, "Scraper", `${file}`));
client.commands.set(command.name, command);
}
if(message.content.startsWith(prefix "test")){
Scrape(message);
function Scrape (message) {
const images = message.attachments.map((img) => img.url)
if(!scrapemember[message.guild.name]) {
scrapemember[message.guild.name] = {
URL: images,
}
fs.writeFile('./Scraper/scraper.json', JSON.stringify(scrapemember, null, 2), (err) => {
if (err) console.log(err)
})
message.delete()
message.channel.send(`*Images Scraped*`)
}
}
}
Результат: внутри scraper.json
{
"test (bot)": {
"URL": []
}
}
Я все еще не уверен, как решить эту проблему. Любая помощь будет оценена 😉
Редактировать:
if(message.content.startsWith(prefix "test")){
Scrape(message);
function Scrape (message) {
const images = message.channel.messages.cache.map(img => img.url)
if(!scrapemember[message.guild.name]) {
scrapemember[message.guild.name] = {
URL: images,
}
fs.writeFile('./Scraper/scraper.json', JSON.stringify(scrapemember, null, 2), (err) => {
if (err) console.log(err)
})
message.delete()
message.channel.send(`*Images Scraped*`)
}
}
}
Итак, на этот раз я использовал .cache
для получения массива сообщений, но результат отличается.
Второй результат:
{
"test (bot)": {
"URL": [
"https://discord.com/channels/781240723277742151/791081666289729567/792138804969734185"
]
}
}
Я предполагаю, что это один из идентификаторов изображений, но в виде URL. Все еще довольно озадачен
Правка #2
if(message.content.startsWith(prefix "test")){
Scrape(message);
function Scrape (message) {
const URLs = message.channel.messages.fetch().then( msg => msg.map(links => links.attachments)).then(geturls => geturls.map( result => result.filter(final => final.url)))
if(!scrapemember[message.guild.name]) {
scrapemember[message.guild.name] = {
URL: URLs,
}
fs.writeFile('./Scraper/scraper.json', JSON.stringify(scrapemember, null, 2), (err) => {
if (err) console.log(err)
})
message.delete()
message.channel.send(`*Images Scraped*`)
}
}
}
Я понял, что запрашивал сообщение, а не вложение, поэтому я проверил документы MessageManager и использовал этот .fetch()
метод.
Код, за которым нужно следить, — это эта переменная:
const URLs = message.channel.messages.fetch().then( msg => msg.map(links => links.attachments)).then(geturls => geturls.map( result => result.filter(final => final.url)))
Третий результат:
{
"test (lovell)": {
"URL": {}
}
}
Я пробовал следующее:
const URL3 = message.channel.messages.fetch().then( msg => msg.map(links => links.attachments)).then(geturls => geturls.map( result => result.filter(final => final.url).map( UrlLink => UrlLink.url)))
const URL2 = message.channel.messages.fetch().then( msg => msg.map(links => links.attachments)).then(geturls => geturls.map( result => result.filter(final => final.url).array()))
Они оба воспроизводят один и тот же результат.
Комментарии:
1. Неясно, чего вы ожидаете в результате, как вы намеревались достичь этого и в чем в настоящее время заключается ваша проблема. Будьте конкретны, и помощь пойдет дождем, как никогда раньше 😉
2. Итак, проблема, с которой вы сталкиваетесь, заключается в том, что (как вы сказали) вы пытаетесь захватить все вложения в канале, но в вашем коде вы пытаетесь захватить только вложения текущего сообщения. Я не уверен на 100%, какой код будет работать, поскольку вы используете командный синтаксис, но вам нужно будет перебирать все сообщения в канале, а не только одно сообщение, чтобы достичь того, чего вы пытаетесь достичь.
3. ООООО, я понимаю, спасибо, что указали на то, что я сделал не так, я постараюсь найти решение.
4. Не могли бы вы взглянуть на мои самые последние правки и, возможно, помочь мне найти решение