поиск изображения с бот-диска - PullRequest
0 голосов
/ 10 июня 2019

Я использую пакет google-images и image-search-google npm, но результат из части «использование» пакета либо пуст, либо «ошибка: невозможно отправить пустое сообщение», я действительно запутался

Я попробовал точно со страницы, но все тот же результат, я нашел учебник, который похож, но тот же результат, теперь я действительно запутался

const {RichEmbed, Attachment} = require('discord.js')
const GoogleImage = require('image-search-google')
const {saveGoogle, google_api} = require('../config.json')
const google = new GoogleImage(saveGoogle, google_api);

module.exports.run = async(bot, message, args) => {
        google.search("John Cena").then(result => {
          if(!result) return console.log('FAILED');
          console.log(result)

          const attachment = new Attachment(result.url);
          message.channel.send(attachment);

        }).catch(e => console.log(e))
};

(node:12184) UnhandledPromiseRejectionWarning: TypeError: The resource must be a string or Buffer.
    at ClientDataResolver.resolveFile (D:\Workspace\DiscordBot\node_modules\discord.js\src\client\ClientDataResolver.js:278:27)
    at Promise.all.options.files.map.file (D:\Workspace\DiscordBot\node_modules\discord.js\src\structures\interfaces\TextBasedChannel.js:173:30)
    at Array.map (<anonymous>)
    at TextChannel.send (D:\Workspace\DiscordBot\node_modules\discord.js\src\structures\interfaces\TextBasedChannel.js:172:40)
    at google.search.then.result (D:\Workspace\DiscordBot\commands\image.js:13:27)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Эторезультат, который я получаю с ошибкой «Не могу отправить пустое сообщение»

1 Ответ

0 голосов
/ 10 июня 2019

С вашим текущим кодом я вижу две основные проблемы:

  1. google.search(...) должен возвращать (обещанный) массив объектов.
  2. Изображение должно быть отправлено через вложение в Discord.js.

Чтобы решить эти проблемы, вы можете использовать этот пересмотренный код:

const { Attachment } = require('discord.js');

module.exports.run = async (bot, message, args) => {
  try {
    const [result] = await google.search('John Cena', { page: 1 });

    if (!result) return await message.channel.send(':x: No images found!');

    const attachment = new Attachment(result.url);
    await message.channel.send(attachment);
  } catch(err) {
    console.error(err);
  }
}; // This semicolon isn't a mistake; you're assigning a value to a property.

Вот почему это работает:

  • [result] является частью деструктурирующего синтаксиса . Эта строка объявляет result как первый элемент массива, возвращенного поиском. Это решает проблему result, являющегося массивом объектов.
  • attachment - это Discord Attachment , которое можно правильно отправить в сообщении. Первым параметром конструктора является URL / путь к изображению. Для этого мы можем использовать свойство url объекта из поиска изображений. Вторым параметром, который я пропустил из-за отсутствия необходимости в этом случае, было бы имя файла, отображаемого в Discord.
  • Вложение отправляется в сообщении, и изображение появляется. Voila!

Другие ресурсы:

...