Проблема с массивом вложений сообщений | Discord.js

#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. Не могли бы вы взглянуть на мои самые последние правки и, возможно, помочь мне найти решение